Releases
v1.31.0
Compare
Sorry, something went wrong.
No results found
1.31.0 (2026-11-12)
Features
agent-review: L1 battery scaffolding + QC standardization scaffold (#194 spec A/B/C/D) (be6dabe )
billing: configurable free-tier limits + billing create-free (bcc4a05 )
billing: enforce free-tier limits at generation/schedule time (8e4ab44 )
cli: add autoinfo mvp init/list for Concierge MVP pilots (fb03fd6 )
cli: add autoinfo validation list --summary (23df167 )
cli: add domain init --seed for flagship domains + extract_fields (5bde966 )
cli: propagate extract_fields through init --demo (c32a7b2 )
collect: requires_app_review G�:�IW� + �����:6��fail-closed (#450 ) (#453 ) (2c8a258 )
coverage: diagnose sources per row and align the KB index with the tree (#640 ) (2d040ba )
domains: eP��f`��Ɛv�n$*1H� (#433 ) (0861872 )
gov: 8-state status model + swallowed-failure visibility + known-red budget (#704 ) (d4544ca )
gov: ADR guard + decision consumer sync + SSOT convergence (PR-C, T09-T11) (#706 ) (c3c6d8c )
gov: capability boundary + degradation drills + human escalations (PR-D, T12/T15/T16) (#708 ) (60e340a )
governance: flip gov parity steps to blocking (T09) (#713 ) (9950a1b )
gov: repo hygiene + scripts registry + negative-control harness (PR-E, T13/T14/T17) (#710 ) (9298b07 )
gov: single governance contract + derived facts + one entry point + doctor (#702 ) (adb3981 )
kb,sources,quality: goals 1-3 � true-fresh dedup, two-state sources, attributable failures (#700 ) (1cbc18a )
matrix: llm_status + artifact provenance sidecar + report fallback marking (#771 ) (#783 ) (f1944a5 )
mcp: add read-only MCP server mode (autoinfo serve --agent) (bc3eeb4 )
mcp: surface regression flag in list_validation_scenarios (29d164e )
mvp: complete pilot delivery package (#740 ) (#761 ) (4fff040 )
nightly: hard budget and fair-share batching for process stage (#596 ) (#635 ) (8c97182 )
output: default Sources/References sections across product templates (327ca93 )
output: honest "grouped by source" annotation + structured log on grouping degradation (#120 ) (8616253 )
output: shared weekly story-set helper for digest/presentation/report (#119 ) (3a044c0 )
quality: add deterministic G7 entity-fact consistency gate (#418 ) (b4e5218 )
scripts: add real-product assertion scanner + closure rule (#356 ) (#376 ) (1853f18 )
scripts: archive stale outputs by date cutoff with manifest rollback (AutoInfo#754 ) (#763 ) (eaaab2b )
scripts: packaging manifest flags configured domains with zero artifacts (#94 ) (7003c93 )
scripts: packaging manifest flags configured domains with zero artifacts (#94 ) (e7a60b2 )
scripts: quality_gate C6 � deterministic long-form grounding check (#192 ) (b351813 )
scripts: version the R2 review battery as scripts/quality_gate.py (#188 ) (1513a02 )
tts: add Azure Speech engine (#647 ) (#648 ) (e29b1d3 )
validation: add 01-QA-GATES gate reports to delivery package (480acdb )
validation: add a machine acceptance reviewer that cannot self-certify (#434 ) (c333ceb )
validation: close agent-oriented gap register (2e1052d )
validation: verify 81 product-format cells with an evidence pack (#642 ) (324a9ec )
Bug Fixes
agent-callback: contain, track, and join the outbox drain worker (#378 ) (#382 ) (787fad6 )
agent-infra: align agent-facing gate claims with actual wiring; wire derived checks into CI (#659 ) (41b42dd )
agent-review: embed product file contents + verdict schema in battery prompt (#197 ) (111778c )
agent-review: extract ModelResponse text before parsing battery verdicts (#196 ) (9188e77 )
api: refuse non-loopback bind; confirmed bind never serves "*" CORS (#680 ) (#681 ) (671ac2a )
api: serialize portal delivery history dataclasses (b0e39dc )
battery: harden L1 verdict parsing without weakening fail-loud (#417 ) (e922b20 )
build: reconcile the documented CLI group count against the code (#511 ) (a48527a )
callbacks: convert the journal mode only when not already WAL (#387 ) (#394 ) (e0f5d78 )
ci,config,prompts,deps,governance: close issues 423-428 (#437 ) (a3db252 )
ci: clear the two red self-check gates and lock the known-red budget by identity (9aec309 )
cli+templates: wire --include-stale on tutorial/presentation, drop hollow product placeholders (#126 #129 ) (17354e3 )
cli: collect h� 0 ���^���
������ ok�B14 (#698 ) (8dd0322 )
cli: emit the canonical --json envelope on usage and internal errors (#242 ) (bacd5ce )
cli: guard output digest --persist against no-data empty shells (#525 ) (#527 ) (0ad9a01 )
cli: remove duplicate mvp typer registration (2ffdb75 )
collect+config: URL-path noise guard for TheStreet deals/shopping, drop over-broad brand exclusions (#137 ) (08f8bdf )
collect: cross-date URL dedup in raw cache � same URL on a later day no longer duplicates (#139 ) (5428b34 )
collect: dry_run must not write the run ledger (#237 ) (03d5c3f )
collectors: preserve full article bodies and correct HN provenance (f01791c )
collectors: robots �e UA � �� ��X�e web/web_playwright/pdfDisallow �: skipped (#452 ) (#456 ) (6c73d3e )
collect: pre-request validation gates + auto-disable after consecutive failures (#669 ) (4faccd1 )
collect: report post-dedup new counts and duplicates (#555 ) (#558 ) (1c5fc8a )
collect: skip list-shaped _runs.json in cross-date dedup scan (#160 ) (dd9566e )
config: replace ghost JUDGMENT_MODEL with real deployment model, add default_config hint (#127 ) (5015d9e )
config: single source of truth for domain default TTL (#366 ) (#373 ) (60473b8 )
coverage: align the coverage generator with end-of-file-fixer (#240 ) (5197c61 )
db: �� SQLite ޥ�eP busy_timeout��n�'Mn�� (#568 ) (abb0135 )
db: �� WAL 6�0 ensure_initialized��ޥ
�� journal_mode=WAL�#571 (#574 ) (785591d )
dedup: anchor frontmatter delimiters to line start (#735 ) (#741 ) (f323562 )
dedup: collect B�ߋ���� � �����
�����
�� (#109 ) (#110 ) (22ae1e2 )
dedupe finding source citations, correct pubmed collected_at, default quality gates (#168 #169 #170 ) (0702e05 )
delivery: wire MCP add_delivery_schedule into the free-tier frequency gate (#674 ) (#686 ) (ccf6bb3 )
deps: restore the mcp<2 upper bound and stop dependabot widening it (#245 ) (522bfa8 )
deps: restore the pytest<9 bound that dependabot widened (e5b28de )
docs: correct documentation drift found by the 2026-10-29 audit (#657 ) (96f7fef )
docs: gate drift-prone counts in living docs (#621 ) (#627 ) (eda086d )
docs: name the interpreter when the doc gate fails for environment reasons (#424 ) (#473 ) (8fa7652 )
domains: coursera ��B description W��
��c�hz (#458 ) (#459 ) (8fc3f3c )
domains: korean-learning b(&c���Ɛ�
h�홫"� (#442 ) (#443 ) (ba1623d )
exclude placeholder single-source drafts + report full-domain fallback + cross-domain language filter (#184 #185 #186 ) (4c831bf )
exclude synthesized multi-source digests from products + no-fabrication prompt constraint (#178 #179 ) (10904c4 )
G3 uses the configured LLM model and never silently neutral-passes (#171 #172 ) (2091677 )
gates: keep the template provenance footer out of parsed sections (#403 ) (#404 ) (d17e63c )
gates: premium section aliases, Action Required omission, outbox loss observability (#395 , #396 , #397 ) (#398 ) (d3b7426 )
grade-review defects � synthesis traceability, word-safe truncation, list serialization, unified USD, gate H1/H2/H3 (#200 #201 #202 #203 #204 ) (39e8be2 )
grade-review defects � synthesis traceability, word-safe truncation, list serialization, unified USD, gate H1/H2/H3 (#200 -#204 ) (6eda986 )
grounding: record #449 as escalate-only and cut entity-candidate noise (#475 ) (d14171f )
guard: make .omo a fully ignored runtime tree (a4374f7 )
high-score news no longer buried by G3 lexical archive / sticky archived / draft URL clash (#189 ) (5ba392d )
kb,process,delivery: #695 entry-id collisions � #722 ledger stall � #725 dirty-data resilience � #687 cron cadence gate (#731 ) (42c76a5 )
kb: auto-generate draft summary when not passed so drafts never render empty-shell (#176 ) (2156f98 )
kb: make 03-Wiki append-only guard separator-agnostic (#773 ) (#777 ) (dfd4abb )
kb: skip git versioning for gitignored knowledge paths (#607 ) (133ac1d )
kb: store index file paths relative to knowledge root (#695 ) (#762 ) (f7ad791 )
keep LiteLLM logs off stdout, warn on CJK leaks, protect currency figures (#180 #181 #182 ) (ff30acb )
lint: clear the 247-error lint debt that blocked edits to 60 files (#512 ) (a6eb2e6 )
llm: de-vendor judgment model + hardcoded fallbacks; fail-loud NOT_JUDGED (#195 ) (70d8ad6 )
llm: implement same-gateway fallback key inheritance (#410 ) (9355d96 )
llm: parse_json_response ��,��
+W����+�!�!�
�3 �� json.loads ��6� (#533 ) (#536 ) (60fe977 )
llm: probe fallback chain and flag double-prefixed model ids (#605 ) (#606 ) (d001682 )
llm: survive a closed LiteLLM log stream instead of failing every LLM call (da3c067 )
matrix: stop reporting L3 for KB-derived fallback products (#646 ) (#651 ) (141dfe6 )
mcp: classify expected failures into semantic error codes (#364 ) (#372 ) (3faa45f )
mcp: guard POSIX process-group APIs with Windows tree-kill equivalent (#772 ) (#781 ) (60f98d7 )
mcp: tools/list �d�Y outputSchema�README ���#588 , #584 (#594 ) (d2cb3bb )
mcp: ���6�0 ErrorCode �> + MOBI blocked-with-record {��#585 , #586 (#590 ) (e64908e )
nightly-gap: ����t$� �� � entries ��
��� last_run (#554 ) (#556 ) (743b4bf )
nightly: add backlog-triggered process stage (#554 ) (#560 ) (8c6b2a1 )
nightly: compute backlog as cached-vs-ledger set difference (#734 ) (#736 ) (b48e156 )
nightly: DoD ` ����$n��\F
�G� (#528 ) (#531 ) (964b3aa )
nightly: locate the venv console script by path, not by slash (#744 ) (#746 ) (2cad879 )
output,scripts: annotate & gate Chinese-numeral RMB amounts (#206 ) (f12e8ce )
output,scripts: synthesis source traceability, canonical RMB->USD rate, H1/H2/H3 grade assertions (#200 #203 #204 ) (d7c07b3 )
output: add missing References section to column template (3a66e1f )
output: ai-commercial is a bilingual domain � 36kr Chinese news enters products (#190 #193 ) (bf30967 )
output: block no-data products, drop premium filler, and gate the keyless scenario subset (#385 ) (86c8e12 )
output: canonical trailing newline in digest markdown render (golden byte-identity) (d6bc802 )
output: complete briefing divergence, tutorial summary, Entry-N strip, presentation; add surface-level quality gate (#146 #147 #148 #149 #150 ) (ab4b4e7 )
output: config-driven semantic topic labels for keyword groups, no bare keyword headers (#120 ) (d2d06fc )
output: constrain tutorial gloss language + exercise format for language-learning domains (#162 #163 ) (fe1a630 )
output: deterministic ����Sb� � source_type ��
(:�
(HACKERNEWS/RSS/API)9(���~ (#113 ) (#115 ) (1019126 )
output: drop empty-bodied tutorial exercise shells, fall back to KB exercises (#163 #164 ) (4384af9 )
output: exclude entries from sources absent from domain config at selection time, fail-open on unreadable config (#119 ) (c0d4a6f )
output: explicit re-exports to satisfy mypy strict [T11-lint] (88012d9 )
output: extend #191 hedge discipline to all editorial-opening surfaces (#210 ) (1ff296b )
output: gate fabricated and self-contradicting product content (#447 ) (5ff98db )
output: ground magazine-digest feature_story prompt � no un-sourced assertions (#191 ) (d156608 )
output: keep HTML structure and tidy citation residue (#644 , #645 ) (#650 ) (420445d )
output: newline-separated Key Findings bullets in digest+report templates (trim_blocks-safe) (#202 ) (40563e6 )
output: parse nested section headings and single-source the D1 parser (#400 ) (#401 ) (40daf39 )
output: presentation G�9� � prompt ��� source_url }
U + 2��`M URL ��8� (#101 ) (925c983 )
output: preserve 'Cross-Domain' hyphen in display-name mapping (#155 ) (3c19d73 )
output: prevent fabricated body-cited URLs in report/digest synthesis (#207 ) (070df8d )
output: rebuild tutorial completeness � no more shell tutorials (#92 ) (7f95d38 )
output: rebuild tutorial completeness � no more shell tutorials (#92 ) (9e3d778 )
output: render grouping-degradation marker on report product-template path (#120 ) (aee765a )
output: rephrase degradation marker as user-meaningful copy; align scenarios (#134 ) (18fe8ad )
output: report refs carry raw platform + derived source_label; stabilize tests/output + #325 scenarios (ae77b98 )
output: report refs carry raw platform + derived source_label; stabilize tests/output + #325 scenarios (bd0da21 )
output: report/column � entries cap [:200] + �� chaos guard � 9�� KB � 470 ah��ą� 0B (#106 ) (f67dd33 )
output: scope topic-count target to degraded grouping path, keep retry/chaos/chunking (#120 ) (65bb344 )
output: strip fabricated presentation source citations + forbid them in prompt (#93 ) (2ba721f )
output: strip fabricated presentation source citations + forbid them in prompt (#93 ) (93f6688 )
output: strip fake-source placeholders, add product relevance floor, traceable section tables + truthful headings (#165 #166 #167 ) (dea06f7 )
output: strip internal KB metadata table and raw platform ids from products (#91 ) (92518bd )
output: strip internal KB metadata table and raw platform ids from products (#91 ) (4c9a3b7 )
output: strip LLM-echoed internal 'Entry N' refs from key_metrics source (#131 ) (1bc2ecb )
output: tutorial ��a� cap 0 10 � 9�� KB ߅� 0B (#103 ) (41518ee )
output: tutorial/presentation H1 mapping + digest-path tutorial header fill (#99 ) (112ad5a )
output: use display domain name in product H1 titles; differentiate premium/enterprise entry subsets (#144 #145 ) (dae1cfb )
output: word-safe presentation truncation + newline-separated Key Findings bullets (#201 #202 ) (0207c08 )
portability: make product+tests Windows-safe for paths, filenames, newlines (#757 ) (#769 ) (c161612 )
process: add --since-days / --newest-first so a budgeted run reaches new items (#596 ) (#655 ) (46eaef2 )
process: fail the run when LLM extraction returns empty (#750 ) (#760 ) (b601475 )
process: grade ai-process exit codes 0/1/2 (#725 ) (#749 ) (7562db1 )
process: grade G0-blocked items into exit code 2 (#751 ) (#759 ) (9c07118 )
process: migration seed always follows default cache walk; ledger writes retry and fail loud (#667 ) (568530c ), closes #663
process: ��8�9: item id U���item p��
�R� (AutoInfo#596 ) (#637 ) (c28c0c3 )
quality: D2 �����Pe� PROCESSED �i9:1%s� (#451 ) (#454 ) (c5418f8 )
raise G3 relevance LLM max_tokens to 512 for reasoning models (#174 ) (6ff68bf )
regression: align 6 stale scenario assertions with current template/design + add stdout-purity guard (#124 #128 #302 ) (2cf68ac )
regression: hermetic dates for date-bombed scenarios (#123 ) (0d35049 )
regression: update regression-357 step 3 to the #54 honest-fallback action wording (#143 ) (7aafc76 )
release: reconcile the release tag instead of racing CI for it (#494 ) (#495 ) (7fb18a7 )
resolve scenario CLI interpreter from the running process (#622 ) (#628 ) (18f6eb5 )
RMB�USD textual-amount annotation + report URL whitelist (#206 #207 ) (4293ac3 )
scenarios: cli-content asserts actual topic name IVF & Assisted Reproduction (9addbd5 ), closes #226
scenarios: drop bash-only set -o pipefail from CLI steps (runner uses /bin/sh) (3d05750 )
scenarios: drop bash-only set -o pipefail from CLI steps (runner uses /bin/sh) (d2fe4e0 ), closes #219
scenarios: make regression-298 self-contained (language field + mock alert dispatch) (9646220 ), closes #225
scenarios: mock product judge in regression-298 for LLM-key hermeticity (#233 ) (f8cfdcd )
scenarios: output-agent-interaction mock entries need relevance_score above floor (6b5c418 ), closes #232
scenarios: output-agent-interaction mock entries relevance_score above floor (8ac6349 )
scenarios: raise regression-16 mock e2 relevance above domain floor (6e175a2 ), closes #224
scenarios: refresh regression fixtures for language filter + stale-source guard (f2808d9 )
scenarios: refresh regression fixtures for language filter + stale-source guard (198c1e0 ), closes #218
scenarios: refresh stale mock dates in regression-15 + domain-language-default (775ced2 ), closes #227
scenarios: render report through real _get_jinja_env (domain_display_name global) (049425d )
scenarios: render report through real _get_jinja_env (domain_display_name global) (1eb1b6a ), closes #220
scripts: detect a stale doc inventory in --check (b83f0fb )
scripts: exclude gap-reports ops ledger from product scans (#753 ) (#755 ) (b8804d1 )
template: magazine-digest �d {��ߡ4 � �feed�p/;��p/����3 (#117 ) (#118 ) (f643a79 )
templates, mcp: drop premium filler and classify PromotionRejected as a validation error (#390 ) (0365f40 )
templates+config: dedupe Source URLs, keep Key Findings on separate lines, omit empty column section, block shopping/non-repro exclusions (#130 #132 #133 #135 #136 ) (509fc7c )
templates+output: strip internal brand/slug/microsecond marks from product footers (#138 ) (55c4461 )
templates: drop the last No ... fillers from column and report (#391 ) (6506256 )
templates: render display domain name in 3 html Domain headers + magazine masthead; de-brand CSS comment (#142 ) (a1696f8 )
templates: render display domain name in Domain header; strip AutoInfo from briefing title defaults (#141 ) (88600a1 )
test: remove unused MagicMock import in entry filters boundary test [F2] (1dc0f77 )
tests: resolve 14 test failures across 8 files (d087cba )
thread the production LLM model into the SERIAL G3 path (#173 ) (4400466 )
types: pay down the mypy strict debt to zero across src/ (4ccea65 )
validation: #-prefix concierge-wave regression_issue tags (#214 ) (b16a226 )
validation: #-prefix concierge-wave regression_issue tags (#214 ) (5ddab8c )
validation: doc_inventory --check asserts on-disk scenario count vs README (#215 ) (c5ee767 )
validation: make regression-445 hermetic and gate LLM seams in CLI scenarios (#623 ) (#626 ) (b27aa92 )
validation: make the year assertion's title-run match any script (#444 ) (#477 ) (7dbe7ea )
validation: relocate on-disk scenario count assertion into run_check; sync doc-manager-skill 137->138 (#215 ) (b634588 )
validation: remove year/RSS assertion false positives (#351 , #325 ) (#375 ) (abbf8ac )
validation: �����e HTML ӄ�~}
U� scheme:// �+ (#677 ) (#684 ) (923fbc2 )
Documentation
acceptance: publish the 1.14.0 report and stop the closure doc lying (#422 ) (c39bbad )
add development briefs v1-v4; ignore generated demo-packages/. (f01791c )
adr: record multi-tenancy as out of scope (ADR-0012) (#676 ) (c13ced5 )
agent-infra: agent ��t9 � �rQ�/��B/��':6�ع+P0-P5 (#724 ) (ce6ca30 )
agents: add Product QC 3-layer model protocol to AGENTS.md (#194 spec E) (c6fe5f7 )
align declared counts with code truth (governance remediation T01) (#699 ) (3367527 )
callbacks: repoint outbox lock references from #67 to #387 (#388 ) (e95436c )
ci: retarget the tree-wide ruff count to the post-round value (70cdaee )
correct CLI group count, scenario split, and remove duplicated blocks (#507 ) (a40f197 )
counts: align test-suite count with pytest collection (#505 ) (7ad2a69 )
coverage: reconcile the E8 required_sources count with reality (#416 ) (daf2e95 )
demo release standard + quality residual risk register (063be80 )
demo release standard + quality residual risk register (0db81ee )
document 01-QA-GATES, free-tier, mvp, readonly MCP, and seed features after concierge wave (8b92210 )
fix drifted counts/refs found by the 2026-10-18 drift audit (#541 ) (0ce7e6e )
gates: G0 n�'��
�����^ G4�+ :h��h� CI �� (#569 ) (18d3e7a )
governance: add the cross-repo boundary gate to �0 (#745 ) (#748 ) (031ed35 )
graph-engineering: ���J�=0���H(�cH)e� + Ͱ�� doc-inventory (ce89311 )
handoff: count the handoff commit itself in the round total (51cfa25 )
handoff: hand the round over with its traps and open items (98e4a0f )
handoff: make the round count drift-proof (4fe8164 )
health: pin the report's counts to the post-commit state (6b378a8 )
health: record the mypy paydown and the out-of-selection sweep (88071f6 )
health: state where the runtime-artifact guard is enforced (97aa3ee )
known-limitations: {� #526 ��JSON ��(c���k�bK���� � (#535 ) (89234e6 )
loop-log: correct the test baseline after refreshing the local env (17, not 23) (2c5a100 )
loop-log: record the 2026-09-13 verification round + five new pitfalls (dc5ff6a )
mcp: �U tools/list ��K token �� outputSchema �Y�#562 (#577 ) (861f9b6 )
output: record export/entries module split in project tree [T12] (9e90969 )
output: regenerate doc inventory after pre-commit whitespace fixes [T12] (914a86e )
plans: promote agent-oriented gap register to docs/dev/plans (#236 ) (8ab1983 )
re-verify project-analysis-2026-10-29 on 2026-10-30; correct 12 findings (#661 ) (335054e )
reconcile counts and the round records (ede8e3c )
record ADR-0012 amendment and add director goals brief (#693 ) (f202408 )
refresh derived doc surfaces after inventory sweep (#689 ) (1e20992 )
register the year-granularity laundering residual (#444 ) (#483 ) (c95d8f0 )
required status checks are ten after the T09 flip (#716 ) (89f52c2 )
residuals: inferential-wording hedge review procedure now in skill (da9bf89 )
restore the CLI group count to the repo registered_groups definition (#508 ) (9b0f7af )
resync the documented test count to 5514 (eed68ff )
sync drift-prone counts and record the 2026-09-14 round (#236 -#242 ) (b803aa4 )
sync scenario count 137 -> 138 in README/AGENTS (#215 ) (ad2c676 )
sync scenario count 137->138 across all documentation (4437200 )
sync scenario count to 137, CLI groups to 31, test count, and README/AGENTS stale surfaces after concierge wave (d7dd743 )
sync stale scenario/CLI/ErrorCode counts across specs and skills after concierge wave (fb95c28 )
sync validation scenario count 129�130 across README, AGENTS, and skill docs (1fd60fb )
triage: make the known-red budget a single source of truth (#239 ) (8edb5d4 )
update judgment-model resolution references to config-first (#195 ) (fb82982 )
validation: add fix-retro
ذU section to LOOP-LOG (49309da )
validation: add fix-retro
ذU section to LOOP-LOG (0ba3935 )
validation: apply corrections to business-validation report (gate term, external data, pricing) (86b1001 )
validation: apply corrections to dev roadmap (gate term, template matrix, CLI verb, seed lists) (e4e5ffe )
validation: correct nonexistent demo-package and unarchived R5 claims (e31cc51 )
validation: sync tool/scenario counts to 149/182 after phase-3 refactor (#620 ) (414035d )
{� #519 �Y����c�P�E((�~S� (#523 ) (3203559 )
Refactoring
config: ؤ<6�0 autoinfo.defaults U�e��#587 (#591 ) (314796b )
core: MCP dispatch �h + output ��!W���#581 /#582 phase 2 (#601 ) (684d440 )
core: ����/(�/MCP/��!W�L�#580 -#583 phase 1 (#597 ) (a75661d )
mcp: phase 3 wave 0 � context.py helper tier + seam retarget + guards (#581 ) (#609 ) (e08ffd0 )
mcp: phase 3 waves 1-3 � move all 149 handlers into tools/ (#581 ) (#611 ) (6b3fc43 )
nightly: NIGHTLY.md ;:9:�&+2�+CI --check����:��� (#570 ) (4acb7e2 )
output: extract export family to output/export.py with re-export shim [T7] (748ae4f )
output: extract shared entry filters to output/entries.py with re-export shim [T10] (6dc7e31 )
output: phase 3 wave 4 � split output hub into six leaves (#582 ) (#617 ) (e22d1ed )
prompts: centralise LLM prompts under data/prompts with a loader (#426 ) (#481 ) (9274478 )
Tests
acceptance: close B-01 and B-03 with real scenario coverage (#420 ) (fe1f4e4 )
add regression tests for #168 finding-source dedupe, #169 pubmed collected_at, #170 default quality gates (3f78651 )
agent-review: make known-good/honest-hedge-positive fixtures genuinely clean positive anchors (#198 ) (e3594f5 )
api: lock the portal delivery-history serialization fix (a0f498f )
cli: cover the billing/collect/process/serve/status/summaries additions (69addfa )
cli: help �,��� ANSI M�� main ��h� 26 aG� (#461 ) (3904c94 )
cli: lock the enduser/audit/portal asdict regressions (7f5fc49 )
collect: add cross-date URL dedup regression tests for #139 (343c6a8 )
collectors: annotate hackernews tests for strict mypy (#367 ) (#371 ) (d3e4613 )
core: cover the dedup and validate additions (532be7a )
cost: lock the stripe and budget-alert normalizers (9019cc3 )
delivery: cover gate_report and translation_qa (3323d49 )
delivery: �� TestDigestDeliveryGates � LLM/Q���9�L����#567 (#579 ) (3c03437 )
fixtures: make freshness-sensitive KB entries date-relative (#506 ) (f7cc541 )
freshness: freeze expiring fixture dates and guard against new ones (#509 ) (7d6a5b4 )
gates: register perf-concurrency flake; pre-commit doc-drift check (#692 ) (99b36ca )
infra: fix 3 backlog test-suite issues (#211 #212 #213 ) (a6d81a3 )
llm: fallback Mn(�9: hermetic�
��,:�rMn �e�墄� (#448 ) (#462 ) (fd71ebe )
llm: lock the closed-stream LiteLLM log fix (0c432c2 )
llm: make judgment-gate tests hermetic without a project config (6e2cfe6 )
mcp: accept non-issue regression tags in scenario regression_issue assertion (0539ef4 )
mcp: isolate the journal-mode statement recorder per connection (#484 ) (#486 ) (1a4db3b )
mcp: � http e�(�9(��� loopback
���lQ�V (#519 ) (#521 ) (95efabf )
output: add #165 /#166 regression tests; harden #150 gate with R10/R11 rules (#165 #166 #167 ) (0a8bef7 )
output: align 7 test suites to the display-name/timestamp/engine contracts (#153 #154 #156 #157 #158 #159 ) (75cbe59 )
output: bound the Dolly flood count on the findings section (63c7f20 )
output: derive digest fixtures from the current time instead of literal dates (12fa77c )
output: freeze the clock that decides entry staleness (#498 ) (#499 ) (82fd00e )
output: hermetic #120 entry-level column test � include_stale=True to defeat stale-guard date bomb (#121 ) (#122 ) (2443aef )
output: lock export family at module boundary with golden renders [T6] (6927143 )
output: lock shared entry filters at module boundary with golden digest [T9] (1d94829 )
output: lock tutorial entry cap at 10 with unit tests + regression scenario (#103 ) (f7e3155 )
output: make digest window-fallback fixtures calendar-proof (#431 ) (0a685aa )
output: make tutorial fixtures time-relative (#241 ) (8f4130b )
output: regression scenarios for cross-product sourcing + grouping-degradation honesty (#119 #120 ) (1ff97d1 )
output: update H1 title + reference-subset assertions to display-name contract (#144 #145 ) (e32e78e )
quality: fix stale expectations (count drift, dir layout) [T2] (118e485 )
quality: hermetic seams for config-dependent tests + optional-dep skip tags [T4] (94ed120 )
quality: restore mock seams (usage-site patches, pre-check stubs) [T3] (04772ab )
scenarios: align regression-16 with #166 relevance-floor (sub-floor entry excluded) (#218 ) (22d5f1c )
scripts: known-defects fixture acceptance for quality_gate (#194 spec C) (adce87f )
validation: add billing create-free regression scenario and regression-flag assertion (db4501d )
validation: tag regression-validation-list and de-hardcode tool count in readonly scenario (cacf39d )
Build System
deps-dev: update pytest requirement from <9,>=8.0 to >=8.0,<10 (#243 ) (3a7e496 )
deps: update mcp requirement from <2.0,>=1.0 to >=1.0,<3.0 (#244 ) (7a405cc )
pre-commit: pin ruff to 0.16.8 and clear the self-match (787e0dc )
Miscellaneous Chores
You can’t perform that action at this time.