#1616 fix(core-education-site-metadata-refresh): prefer xref_site_matterport for ISP join (SURTR-987) (@kevalshahtrilogy, Surtr)
#1618 refactor(heimdall): forward two discrete AWS secrets, not the blob (@kevalshahtrilogy, Surtr)
#56 fix(heimdall): discrete AWS secrets, and no credential line dropped in silence (@kevalshahtrilogy, mercy)
#55 feat(heimdall): revert-forward rollback when a release fails (@kevalshahtrilogy, mercy)
#1613 feat(gateway): register Aerie's EC2-sync-replacement tables (SURTR-984) (@kevalshahtrilogy, Surtr)
#1609 feat(heimdall): wire the ticket queue and CloudWatch reads into the caller (@kevalshahtrilogy, Surtr)
#3683 fix(qtd-reports): refresh school period after data refresh (@ashwanth1109, Klair)
#54 feat(heimdall): mode: linear — bridge a ticket queue into the intake path (@kevalshahtrilogy, mercy)
#1608 feat(heimdall): factory status timeline + what set each run off (@kevalshahtrilogy, Surtr)
#52 feat(heimdall): the Linear work queue — selection, routing, and refusing to guess (@kevalshahtrilogy, mercy)
#53 feat(heimdall): the callout protocol — ask once, block it, move on (@kevalshahtrilogy, mercy)
#1607 fix(collections-tracker-sync-v2): widen transient blank-header retry bu… (@the-heimdall[bot], Surtr)
#1604 fix(renewals-risk-assessment): raise Claude max_tokens and count trunca… (@the-heimdall[bot], Surtr)
#1602 fix(openai-usage-pipeline): retry failed cost fetches in an end-of-run… (@the-heimdall[bot], Surtr)
#1596 feat(heimdall): hourly release sweep — main to production (@kevalshahtrilogy, Surtr)
#49 feat(heimdall): mode: release — ship main to production unattended (@kevalshahtrilogy, mercy)
#51 fix(heimdall): revise must resolve its model, not hardcode two (@kevalshahtrilogy, mercy)
#50 fix(heimdall): tell the diagnose stage its scope, where the decision is made (@kevalshahtrilogy, mercy)
#3682 feat(heimdall): give Klair real verification, mirroring the ruff-check gate (@kevalshahtrilogy, Klair)
#1598 fix(netsuite-balance-sheet): allow EOM prior-month period in header-dat… (@the-heimdall[bot], Surtr)
#3680 386-cfo-crosswalk-validation (@mwrshah, Klair)
#48 feat(heimdall): the preflight gate for automatic production releases (@kevalshahtrilogy, mercy)
#1161 fix(auth): preserve Clerk codegen without preview config (@benji-bizzell, Aerie)
#1160 fix(admissions): align shadow assertion with status routing (@benji-bizzell, Aerie)
#1158 feat(admissions): add dashboard API and agent parity (@benji-bizzell, Aerie)
#1157 feat(auth): add provider-neutral Preview authentication (@benji-bizzell, Aerie)
#1588 fix(education): restore source-backed snapshot triggers (@benji-bizzell, Surtr)
#1156 test(chat): accelerate and formalize test architecture (@benji-bizzell, Aerie)
#1143 feat(forge): make articles platform resources (@benji-bizzell, Aerie)
#1155 fix(portfolio): show enrollment for open sites (@benji-bizzell, Aerie)
#1154 feat(portfolio): surface operational backup site status (@benji-bizzell, Aerie)
#1260 fix(netsuite-saved-search-refresh): collapse transaction-line reconcili… (@the-heimdall[bot], Surtr)
#1037 fix(aws-spend-insights): automated heimdall fix (code_fix) (@the-heimdall[bot], Surtr)
#47 fix(heimdall): BASE_REF is unbound in the publish step — my regression from #46 (@kevalshahtrilogy, mercy)
#1585 feat(education): add source-backed forecast baseline (@benji-bizzell, Surtr)
#46 fix(heimdall): stop discarding git merge's error in the base sync (@kevalshahtrilogy, mercy)
#1580 fix(collections-collectiq-sync-v2): pinpoint BU and metric on unparseab… (@the-heimdall[bot], Surtr)
#1043 fix(aws-spend-pipeline): automated heimdall fix (code_fix) (@the-heimdall[bot], Surtr)
#1139 fix(netsuite-balance-sheet): assert CSV header period matches file-date… (@the-heimdall[bot], Surtr)
#1451 fix(mart-education-hc-current-cost-refresh): read HC run_id from nested… (@the-heimdall[bot], Surtr)
#1454 fix(hubspot-raw-sync): fail terminal run when finalize reports failed r… (@the-heimdall[bot], Surtr)
#45 feat(heimdall): let the agent pull the logs it was not given (@kevalshahtrilogy, mercy)
#1584 fix(heimdall): make verification actually cover what CI gates on (@kevalshahtrilogy, Surtr)
#43 feat(heimdall): let the agent query Redshift — without ever holding a credential (@kevalshahtrilogy, mercy)
#44 feat(heimdall): steward merges approved green PRs directly, no repo setting needed (@kevalshahtrilogy, mercy)
#42 fix(heimdall): price codex runs — they report tokens, never dollars (@kevalshahtrilogy, mercy)
#41 feat(heimdall): gate auto-merge on provenance, not scope tier (@kevalshahtrilogy, mercy)
#40 fix(heimdall): make the codex runtime actually runnable (@kevalshahtrilogy, mercy)
#39 fix(heimdall): retry transient provider errors in the fix and revise stages (@kevalshahtrilogy, mercy)
#38 fix(heimdall): authenticate the base-sync fetches that killed every revise run (@kevalshahtrilogy, mercy)
#37 feat(heimdall): gate summons on a login allowlist, not org membership (@kevalshahtrilogy, mercy)
#1583 fix(aws-spend): record Q3 mapping for newly active Quark account (@caina-barbosa, Surtr)
#1581 071-aws-spend-opus-4-8 (@mwrshah, Surtr)
#1577 fix(education): accept new GuidePlatform meeting fields (@benji-bizzell, Surtr)
#1152 fix(admissions): reconcile forecast school year views (@benji-bizzell, Aerie)
#3678 fix(mcp-ontology): guide QuickBooks P&L reconciliation (@YibinLongTrilogy, Klair)
#1576 feat(quickbooks): reconcile school P&L from actuals (@YibinLongTrilogy, Surtr)
#1151 fix(admissions): classify Finalsite assessment statuses (@benji-bizzell, Aerie)
#3675 test(board-doc): prove embed-safe clone strategy (KLAIR-3462) (@marcusdAIy, Klair)
#1150 fix(portfolio): preserve legacy capex totals in patches (@benji-bizzell, Aerie)
#3677 feat(board-doc): add Coach Claire quick actions (KLAIR-2688) (@marcusdAIy, Klair)
#1146 docs(api): distinguish directory-active site status (AERIE-1892) (@marcusdAIy, Aerie)
#3676 fix(board-doc): preserve legacy clone-forward sessions (@marcusdAIy, Klair)
#3674 feat(board-doc): complete clone-forward BrainLift flow (KLAIR-2876) (@marcusdAIy, Klair)
#1148 fix(admissions): label forecast school-year provenance (AERIE-824) (@marcusdAIy, Aerie)
#3670 feat(board-doc): add idempotent add-on operation ledger (KLAIR-3230) (@marcusdAIy, Klair)
#1574 fix(education): preserve eduCRM mart relation identity (@benji-bizzell, Surtr)
#1145 docs(api): document served document sensitivity (AERIE-1886) (@marcusdAIy, Aerie)
#256 test(platform): make Linux probe selection explicit (AI-580) (@marcusdAIy, trilogy-drones)
#3672 fix(school-report): accept unmapped QuickBooks accounts (@ashwanth1109, Klair)
#3671 fix(qtd-reports): recover from malformed commentary payloads (@ashwanth1109, Klair)
#1572 docs(pipelines): remove stale retired pipeline references (@ashwanth1109, Surtr)
#257 test(paths): normalize discovery and task corpus paths (AI-581) (@marcusdAIy, trilogy-drones)
#3659 feat(qtd-reports): align school report tables with approved layout (@ashwanth1109, Klair)
#255 test(cli): fix Windows tsx and help path parity (AI-579) (@marcusdAIy, trilogy-drones)
#1144 fix(public-api): restore status-open membership contract (AERIE-1891) (@marcusdAIy, Aerie)
#254 test(receipts): make hydration stamp failure deterministic (AI-578) (@marcusdAIy, trilogy-drones)
#253 docs(security): publish current-system threat model (AI-403) (@marcusdAIy, trilogy-drones)
#1571 fix(surtr-783): validate EventBridge input transformers (@marcusdAIy, Surtr)
#3669 feat(review-agent): D2.2 forecast versus actual lookback (@marcusdAIy, Klair)
#252 docs(spec): schedule AERIE-1891 correction (@marcusdAIy, trilogy-drones)
#1139 fix(insights): include open sites in health list (AERIE-1163) (@marcusdAIy, Aerie)
#250 fix(runner): retry busy warm addresser handoffs (AI-584) (@marcusdAIy, trilogy-drones)
#251 [draft-spec] AI-582: unattended spec-authoring draft (@marcusdAIy, trilogy-drones)
#3664 fix(ci): pin Amplify pnpm toolchain (KLAIR-3388) (@marcusdAIy, Klair)
#1567 fix(guide-platform-raw-sync): contract drift — capture_images gained 3 columns (@kevalshahtrilogy, Surtr)
#1568 fix(netsuite-unrealized-gains, netsuite-gl-detail): propagate total enrichment failure instead of swallowing it (@kevalshahtrilogy, Surtr)
#1566 fix(netsuite-unrealized-gains, netsuite-gl-detail): pin anthropic to a working version (@kevalshahtrilogy, Surtr)
#1520 fix(openai-cost-pipeline): throttle OpenAI calls with a shared token bu… (@the-heimdall[bot], Surtr)
#1142 fix(portfolio): fail closed on incomplete REBL3 pagination (@benji-bizzell, Aerie)
#1141 fix(portfolio): preserve REBL3 opening calendar dates (@benji-bizzell, Aerie)
#3666 fix(mcp-ontology): drop colliding account_category_code from 62700 note (@sanketghia, Klair)
#3665 feat(mcp-ontology): document 62700 expensed-capex policy for Q22 LTD capex (@sanketghia, Klair)
#1562 fix(quickbooks): publish canonical ECS failure results (@benji-bizzell, Surtr)
#1137 fix(education): hide unreliable Summer lead metrics (@benji-bizzell, Aerie)
#1497 fix(education): refresh enrollment after SIS publication (@benji-bizzell, Surtr)
#1496 fix(education): handle GuidePlatform schema drift (@benji-bizzell, Surtr)
#1560 feat(education): add auditable FinalSite site retirement (@benji-bizzell, Surtr)
#1138 feat(portfolio): migrate REBL3 integration to v2 (@benji-bizzell, Aerie)
#1131 fix(portfolio): ignore deprecated duplicate calendar rows (@benji-bizzell, Aerie)
#1555 Migrate QuickBooks Expense AI Generation to ECS (@YibinLongTrilogy, Surtr)
#3663 refactor(board-doc): type chat stream events (KLAIR-2849) (@marcusdAIy, Klair)
#1136 Fix chat table document links (@YibinLongTrilogy, Aerie)
#246 fix(orchestrator): atomically sync canonical dispatch wrapper (AI-574) (@marcusdAIy, trilogy-drones)
#248 test(ledgers): make persistence failures deterministic (AI-576) (@marcusdAIy, trilogy-drones)
#1135 docs(admissions): separate attendance and roster semantics (AERIE-1753) (@marcusdAIy, Aerie)
#1134 docs(portfolio): define school-chain completeness (AERIE-1164) (@marcusdAIy, Aerie)
#3662 refactor(board-doc): type benchmark coverage gaps (KLAIR-3343) (@marcusdAIy, Klair)
#3660 feat(board-doc): add Q4 provisioning preflight (KLAIR-3246) (@marcusdAIy, Klair)
#249 test(locks): make acquisition failures deterministic (AI-577) (@marcusdAIy, trilogy-drones)
#3661 fix(board-doc): distinguish discovery errors from empty states (KLAIR-3216) (@marcusdAIy, Klair)
#1128 docs(mercy): note the active review model and how to change it (@kevalshahtrilogy, Aerie)
#247 test(stale-spec): make filesystem failures deterministic (AI-575) (@marcusdAIy, trilogy-drones)
#1132 fix(feedback): route Linear issues to configured project (AERIE-1877) (@marcusdAIy, Aerie)
#1133 docs(insights): define pre-open quality coverage (AERIE-1140) (@marcusdAIy, Aerie)
#1556 Fix Rhodes expansion status contract (@YibinLongTrilogy, Surtr)
#1517 fix(surtr-783): correct verifier Lambda observation window (@marcusdAIy, Surtr)
#245 test(eval): add reviewer mutation calibration pilot (AI-572) (@marcusdAIy, trilogy-drones)
#3657 feat(board-doc): dispatch Budget Bot jobs through ECS (KLAIR-3238) (@marcusdAIy, Klair)
#244 [draft-spec] AI-585: unattended spec-authoring draft (@marcusdAIy, trilogy-drones)
#1129 docs(api): define the filed phasing-plan contract (AERIE-1866) (@marcusdAIy, Aerie)
#243 docs(mercy): note the active review model and how to change it (@kevalshahtrilogy, trilogy-drones)
#1550 chore(pipelines): enable Aerie financials on-demand runs (@ashwanth1109, Surtr)
#1530 fix(netsuite): harden saved-search FX-rate refresh (@ashwanth1109, Surtr)
#3658 feat(mcp-ontology): publish CAC per Finance's decided perimeter/denominator (@sanketghia, Klair)
#3648 Revert "feat(maint-report): establish standalone service baseline" (@ashwanth1109, Klair)
#1544 070-grainne-pull-failure (@mwrshah, Surtr)
#166 docs(mercy): note the active review model and how to change it (@kevalshahtrilogy, Sindri)
#3656 docs(mercy): note the active review model and how to change it (@kevalshahtrilogy, Klair)
#1526 feat(mercy-dashboard): per-model cost rollup + telemetry v2 fields (@kevalshahtrilogy, Surtr)
#3655 fix(spacex-valuation): restore waterfall reconciliation copy (@sanketghia, Klair)
#1127 AERIE-1845: gate historical OCR backfill candidates (@caina-barbosa, Aerie)
#1108 chore(mercy): pass AGENT_OPENAI_API_KEY through to the reusable workflow (@kevalshahtrilogy, Aerie)
#36 fix(mercy): pin telemetry_version back to 1 — the bump dropped every record (@kevalshahtrilogy, mercy)
#242 chore(mercy): re-apply AGENT_OPENAI_API_KEY passthrough (@kevalshahtrilogy, trilogy-drones)
#3646 chore(mercy): pass AGENT_OPENAI_API_KEY through to the reusable workflow (@kevalshahtrilogy, Klair)
#35 fix(mercy): authenticate codex before running the review (@kevalshahtrilogy, mercy)
#164 chore(mercy): pass AGENT_OPENAI_API_KEY through to the reusable workflow (@kevalshahtrilogy, Sindri)
#1527 chore(mercy): pass AGENT_OPENAI_API_KEY through to the reusable workflow (@kevalshahtrilogy, Surtr)
#34 feat(mercy): codex runtime + harness-side pricing (gpt-5.6-luna) (@kevalshahtrilogy, mercy)
#3653 fix(spacex-valuation): reconcile Aug 18 and Aug 24 sales (@sanketghia, Klair)
#1126 AERIE-1844: activate hybrid PDF OCR and page grounding (@caina-barbosa, Aerie)
#1125 fix(education): serve fresh program demographics (@benji-bizzell, Aerie)
#241 test(runtime): add secondary-runtime fixture contract (AI-567) (@marcusdAIy, trilogy-drones)
#1124 AERIE-1843: add dormant PDFium renderer (@caina-barbosa, Aerie)
#3652 fix(board-doc): log rejected fallback type mismatches (KLAIR-3344) (@marcusdAIy, Klair)
#1123 docs(api): complete property acquisition lease semantics (AERIE-1143) (@marcusdAIy, Aerie)
#240 [draft-spec] AI-583: unattended spec-authoring draft (@marcusdAIy, trilogy-drones)
#1121 feat(portfolio): add internet and cleanliness cards (@benji-bizzell, Aerie)
#1120 AERIE-1842: OCR rollout 4/7: Activate standalone image OCR (@caina-barbosa, Aerie)
#1119 feat(education): support terminal buildout expansion status (@benji-bizzell, Aerie)
#1096 feat(portfolio): add not-applicable milestone state (@benji-bizzell, Aerie)
#1532 fix(education): bound TimeBack activity facts sync (@caina-barbosa, Surtr)
#3651 feat(board-doc): preview and explicitly apply deterministic NC.1 narrative fixes (@marcusdAIy, Klair)
#1105 fix(chat): preserve accurate streamed cost tables (@benji-bizzell, Aerie)
#1111 fix(documents): paginate large site document projections (@benji-bizzell, Aerie)
#1112 fix(agent): summarize completed Flue reasoning during streaming (@benji-bizzell, Aerie)
#1116 Stop expected warehouse cutovers from opening opaque platform errors (@marcusdAIy, Aerie)
#1118 AERIE-1841: OCR rollout 3/7: Add dormant OCR operation safety primitives (@caina-barbosa, Aerie)
#1109 feat (agent): count Aerie Flue agent skill invocations (@caina-barbosa, Aerie)
#1117 AERIE-1840: OCR rollout 2/7: Add dormant shared OCR transport (@caina-barbosa, Aerie)
#237 feat(triage-classify): durable read-only Builder Team triage classifier (AI-534) (@marcusdAIy, trilogy-drones)
#1115 AERIE-1846: Keep Due Diligence cost labels inside card (@YibinLongTrilogy, Aerie)
#239 duplicate-work: name budget-skipped candidates in the tick-wide budget warning (@marcusdAIy, trilogy-drones)
#1114 AERIE-1839: OCR rollout 1/7: Add contracts and status foundation (@caina-barbosa, Aerie)
#3650 docs(board-doc): add code-cited as-built inventory (@marcusdAIy, Klair)
#238 revert(mercy): restore reusable workflow compatibility (@marcusdAIy, trilogy-drones)
#236 [draft-spec] AI-569: unattended spec-authoring draft (@marcusdAIy, trilogy-drones)
#1537 069-surtr-thinking-block (@mwrshah, Surtr)
#1113 Make milestone keys and health timezone semantics self-contained (@marcusdAIy, Aerie)
#3649 fix(addon): execute chat MCP calls as initiating principal (@marcusdAIy, Klair)
#3644 feat(claire): add bounded per-BU quarter memory (@marcusdAIy, Klair)
#3645 feat(board-doc): surface post-refresh NC.1/GA.1 findings in the Review workflow (@marcusdAIy, Klair)
#3643 feat(claire): add margin and revenue-quality coaching probes (@marcusdAIy, Klair)
#235 chore(mercy): pass AGENT_OPENAI_API_KEY through to the reusable workflow (@kevalshahtrilogy, trilogy-drones)
#234 [draft-spec] AI-562: unattended spec-authoring draft (@marcusdAIy, trilogy-drones)
#233 [draft-spec] AI-544: unattended spec-authoring draft (@marcusdAIy, trilogy-drones)
#3640 feat(maint-report): establish standalone service baseline (@ashwanth1109, Klair)
#1522 feat(pipelines): reconcile TFY provider identifiers daily (@kevalshahtrilogy, Surtr)
#1513 066-renewals-theme-classifier (@mwrshah, Surtr)
#1102 fix(deployment): recover production CD preflight (@benji-bizzell, Aerie)
#1101 fix(forge): repair list status filters (@benji-bizzell, Aerie)
#1100 fix(forge): align list navigation and controls (@benji-bizzell, Aerie)
#1095 AERIE-1180: Fix rounded portfolio card hover states (@YibinLongTrilogy, Aerie)
#1099 fix(forge): harden article editing experience (@benji-bizzell, Aerie)
#3627 feat(board-doc): rebuild product tables at clone time (@marcusdAIy, Klair)
#232 feat(registry): promote Praxis-V2 from retro-only to fire capability (AI-177 admission phase) (@marcusdAIy, trilogy-drones)
#1097 feat(admissions): stage Pipeline and Funnel access split (@benji-bizzell, Aerie)
#1515 fix(aws-spend-insights): reject empty date-week map before context queries (SURTR-567) (@marcusdAIy, Surtr)
#1514 fix(netsuite-raw): handle omitted nullable keyset fields (@ashwanth1109, Surtr)
#1090 feat(portfolio): add ready-for-review diligence status (@benji-bizzell, Aerie)
#1094 fix(platform-errors): provision triage worker in production CD (@benji-bizzell, Aerie)
#1472 fix(surtr-783): anchor verifier to pipeline stack update (@marcusdAIy, Surtr)
#163 185-models-endpoint (@mwrshah, Sindri)
#229 AI-531: triage harvested review-follow-up bundles to one auditable terminal outcome (@marcusdAIy, trilogy-drones)
#1087 docs(api): clarify enrollment summary forecast provenance (@marcusdAIy, Aerie)