Skip to content

fix: pin NOEMA_LLM_MODEL routing alias to orchestrator/free - #535

Merged
seonghobae merged 762 commits into
mainfrom
fix/noema-orchestrator-free-routing-alias
Sep 8, 2026
Merged

fix: pin NOEMA_LLM_MODEL routing alias to orchestrator/free#535
seonghobae merged 762 commits into
mainfrom
fix/noema-orchestrator-free-routing-alias

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Scope and ownership

Noema consumes the governed orchestrator/free contract only. ContextualWisdomLab/contextual-orchestrator owns provider/model discovery, routing, credentials, retry and failover. This lane owns Noema reviewer/config/privacy/tool/gateway-preflight boundaries; docs/product-technical-gap-baseline.md remains #559's documentation lane.

Verified RED → causal repair lineage

The earlier stale candidate was ordinary/non-force converged, then hosted CI 34169700288 exposed a real release-test RED: the model-bearing proposer still used repository-selected ${{ vars.NOEMA_LLM_MODEL }} and a 55-minute wall clock while the executable contract required literal orchestrator/free and no repository-authored model timeout. Production 97718814382112079d1348db5f2b6ee44d94687b source-pinned orchestrator/free and removed only propose_product_increment.timeout-minutes while preserving work-conserving admission, immutable proposal validation and provider-owner boundaries.

After #547 became protected source, test-only f1bca1b44bc9b1cf5f67c200380aaeed8c67bb2f produced hosted CI RED 34177131397 (1 failed / 4140 passed) because two procedure documents still restored a superseded global-empty-PR admission rule. 06ed62fcc5611e9b25ef38b06e87e7521dbf1be1 repaired only that documentation authority.

Protected #558 convergence

#558 subsequently integrated as protected main@59ae66de96b64c8ce51f0030a624815a08dbefdd. The branch was advanced without force by ordinary two-parent convergence while preserving the #558 patch-validator workflow/cache truth. Fresh compare remains ahead-only, behind_by=0, with merge-base exactly protected main.

Python endpoint authority RED → repair

Fresh review found a cross-language contract defect. JavaScript gateway preflight and contracts/orchestrator-gateway.json reject direct-provider hosts, URL userinfo/query/fragment and non-/v1 endpoints, while the Python reviewer boundary only required HTTPS (or loopback HTTP). A direct provider or malformed OpenAI-compatible HTTPS endpoint could therefore receive the gateway credential even while the model alias remained orchestrator/free.

Test-only 9d67a3cff2700ec2672f78ea05a5e464e7857360 added executable cases for the six forbidden direct-provider hosts, URL authority metadata, /v1 shape and a valid contextual-orchestrator-compatible endpoint. Production e0a329916ab71b1009aa62cbab667a737d511223 minimally applied the same endpoint invariant in reviewer/noema_reviewer/config.py, preserving exact orchestrator/free, AsyncOpenAI(timeout=None, max_retries=0), loopback-only HTTP development support and contextual-orchestrator provider/model ownership.

Reviewer-ci 34182299455, job 101923650070, then supplied a concrete coverage RED: all 631 reviewer tests passed, but mandatory line+branch coverage was 99.93%, leaving the hostless-URL rejection branch uncovered. Exact 82b20b293f0a5f0ac0e69857c1b61dddfe478491 adds only the missing https:///v1 regression so the implemented fail-closed branch is exercised; production behavior did not change in this follow-up.

Current exact-head authority — 2026-09-08 KST

Exact head remains 82b20b293f0a5f0ac0e69857c1b61dddfe478491; fresh compare against protected main@59ae66de96b64c8ce51f0030a624815a08dbefdd remains behind_by=0 with exact protected merge-base. Fresh current-head checks are:

  • application CI 34182693606: SUCCESS;
  • reviewer-ci 34182693512: SUCCESS;
  • required Security Scan 34182693575: SUCCESS;
  • patch-validator-image 34182693666: IN_PROGRESS.

Three GREEN gates do not authorize merge. Keep Draft until the unchanged image gate is terminal-success, then re-read current head/base, all review threads and all four gates immediately before ordinary merge. Predecessor evidence, self-approval, force update, destructive rebase, provider-authority copy, timeout/gate weakening and release fabrication remain prohibited.

#556 is downstream. Its current stacked exact head 363d62bc888e7b9555ff56bbce4dadc0a61d4efb is not final-integration authority while #535 is unmerged, and its required Security Scan is currently absent due central stacked-ruleset undercoverage tracked at ContextualWisdomLab/.github#2037. After #535 normal integration, #556 must be re-read and ordinary/non-force restacked from resulting protected source with fresh Security-inclusive evidence.

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 171 files, which is 71 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 021cdb28-0c76-4bb5-aac8-834dfd74e7b8

📥 Commits

Reviewing files that changed from the base of the PR and between 0dec8d8 and 82b20b2.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (171)
  • .github/lockfile-change-policy.json
  • .github/workflows/central-review.yml
  • .github/workflows/ci.yml
  • .github/workflows/hourly-product-development.yml
  • .github/workflows/patch-validator-image.yml
  • .github/workflows/reviewer-ci.yml
  • .gitignore
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • README.md
  • contracts/orchestrator-gateway.json
  • docs/CONTEXT_MAP.md
  • docs/LICENSING_AND_IP_TRANSFER.md
  • docs/OPERABILITY.md
  • docs/PRD.md
  • docs/TRACEABILITY.md
  • docs/TRD.md
  • docs/acquisition-readiness-2b.md
  • docs/adr/0012-runtime-orchestration-bounded-contexts.md
  • docs/adr/0013-durable-workflow-execution-authority.md
  • docs/adr/0014-shared-noema-core-package.md
  • docs/adr/README.md
  • docs/automation-threat-model.md
  • docs/buyer-due-diligence-index.md
  • docs/contextual-orchestrator-reviewer-cutover.md
  • docs/development/contributor-and-agent-procedure.md
  • docs/doctoring/hourly-product-development-prerequisites.md
  • docs/doctoring/orchestrator-free-routing-alias.md
  • docs/evidence-templates/revenue-evidence.example.json
  • docs/evidence-templates/transfer-evidence.example.json
  • docs/noema-agent-sandbox-plan.md
  • docs/operations/hourly-product-development-prerequisites.md
  • docs/operations/hourly-product-development.md
  • docs/orchestrator-gateway-consumer-contract.md
  • docs/product-technical-gap-baseline.md
  • package.json
  • packages/noema-core/.gitignore
  • packages/noema-core/README.md
  • packages/noema-core/pyproject.toml
  • packages/noema-core/src/noema_core/__init__.py
  • packages/noema-core/src/noema_core/agent.py
  • packages/noema-core/tests/__init__.py
  • packages/noema-core/tests/test_agent.py
  • packages/noema-core/tests/test_owner_boundary.py
  • reviewer/MANIFEST.in
  • reviewer/README.md
  • reviewer/build_backend.py
  • reviewer/noema_reviewer/__init__.py
  • reviewer/noema_reviewer/agent.py
  • reviewer/noema_reviewer/config.py
  • reviewer/noema_reviewer/gating.py
  • reviewer/noema_reviewer/github_io.py
  • reviewer/noema_reviewer/models.py
  • reviewer/pyproject.toml
  • reviewer/requirements-ci.in
  • reviewer/tests/test_agent.py
  • reviewer/tests/test_build_backend_editable.py
  • reviewer/tests/test_build_backend_staging.py
  • reviewer/tests/test_check_run_pagination.py
  • reviewer/tests/test_config.py
  • reviewer/tests/test_deterministic_finding_identity.py
  • reviewer/tests/test_failed_check_causal_binding.py
  • reviewer/tests/test_failed_check_coverage_edges.py
  • reviewer/tests/test_finding_line_contract.py
  • reviewer/tests/test_gateway_endpoint_contract.py
  • reviewer/tests/test_gating.py
  • reviewer/tests/test_github_io.py
  • reviewer/tests/test_models.py
  • reviewer/tests/test_no_heuristic_gateway_policy.py
  • reviewer/tests/test_non_success_check_gate.py
  • reviewer/tests/test_shared_core_import_boundary.py
  • reviewer/tests/test_verdict_invariants.py
  • scripts/acquisition-readiness-audit.mjs
  • scripts/cloudflare-worker-deploy.mjs
  • scripts/cloudflare-worker-dev.mjs
  • scripts/hourly-commercial-readiness.mjs
  • scripts/lib/acquisition-data-room-integrity.mjs
  • scripts/lib/acquisition-private-output.mjs
  • scripts/lib/cloudflare-worker-config.mjs
  • scripts/lib/orchestrator-gateway.mjs
  • scripts/lockfile-change-policy-candidate.mjs
  • scripts/verify-orchestrator-gateway.mjs
  • src/runtime-entrypoint.ts
  • src/runtime-shared/execution-identity.ts
  • src/workflow-task-execution/workflow-recovery-claim.ts
  • src/workflow-task-execution/workflow-state-durable-object.ts
  • src/workflow-task-execution/workflow-state-store.ts
  • src/workflow-task-execution/workflow-task-runner.ts
  • test/acquisition-artifact-rights-json.test.ts
  • test/acquisition-data-room-integrity-branches.test.ts
  • test/acquisition-evidence-iso-date.test.ts
  • test/acquisition-private-output-atomic-coverage.test.ts
  • test/acquisition-private-output-atomic-replace.test.ts
  • test/acquisition-private-output-close-cleanup.test.ts
  • test/acquisition-private-output-existing-target-metadata.test.ts
  • test/acquisition-private-output-existing-target-nonblocking.test.ts
  • test/acquisition-private-output-filesystem-capability.test.ts
  • test/acquisition-private-output-new-file-failure-cleanup.test.ts
  • test/acquisition-private-output-parent-race.test.ts
  • test/acquisition-private-output-staging-parent-race.test.ts
  • test/acquisition-private-output-version-race.test.ts
  • test/acquisition-private-output.test.ts
  • test/acquisition-readiness-audit.test.ts
  • test/acquisition-retained-artifact-hardlink.test.ts
  • test/acquisition-revenue-metric-domain.test.ts
  • test/acquisition-review-regressions.test.ts
  • test/acquisition-source-only-license.test.ts
  • test/acquisition-transfer-rights.test.ts
  • test/actions-runner-assignment-write-io-boundary.test.ts
  • test/agents-security-scan-applicability.test.ts
  • test/ci-exact-head-contract.test.ts
  • test/cloudflare-toolchain-license-boundary.test.ts
  • test/cloudflare-worker-config.test.mjs
  • test/documentation-architecture-contract.test.ts
  • test/documentation-current-trust-authority.test.ts
  • test/documentation-durable-workflow-protected-authority.test.ts
  • test/documentation-live-open-pr-authority.test.ts
  • test/documentation-post-trust-integration-authority.test.ts
  • test/documentation-runtime-protected-authority.test.ts
  • test/documentation-workflow-concurrency-authority.test.ts
  • test/helpers/hourly-workflow.ts
  • test/hourly-commercial-readiness-script.test.ts
  • test/hourly-commercial-readiness-work-conserving-dispatch.test.ts
  • test/hourly-product-development-documentation-authority.test.ts
  • test/hourly-product-development-final-candidate-cleanup.test.ts
  • test/hourly-product-development-no-model-timeout.test.ts
  • test/hourly-product-development-runner-isolation.test.ts
  • test/hourly-product-development-workflow.test.ts
  • test/lockfile-reproducibility-workflow.test.ts
  • test/main-governance-audit.test.ts
  • test/no-heuristic-gateway-workflow.test.ts
  • test/no-heuristic-workflow-authority.test.ts
  • test/no-temporary-self-modifying-writer.test.ts
  • test/noema-core-packaging-contract.test.ts
  • test/opencode-private-visibility-boundary.test.ts
  • test/opencode-tool-capability-boundary.test.ts
  • test/orchestrator-gateway-body-timeout.test.ts
  • test/orchestrator-gateway-cli-preflight-timeout.test.ts
  • test/orchestrator-gateway-contract.test.ts
  • test/orchestrator-gateway-routing-alias.test.ts
  • test/orchestrator-gateway-secret-source.test.ts
  • test/patch-validator-image-build-cache.test.ts
  • test/patch-validator-image-contract.test.ts
  • test/patch-validator-workflow.test.ts
  • test/product-technical-gap-current-candidate-contract.test.ts
  • test/reviewer-ci-action-runtime-integrity.test.ts
  • test/runtime-bounded-context-fitness.test.ts
  • test/upload-artifact-node24-integrity.test.ts
  • test/workflow-concurrency-policy.test.ts
  • test/workflow-recovery-claim.test.ts
  • test/workflow-state-durable-object-command-shape.test.ts
  • test/workflow-state-durable-object-payload-minimization.test.ts
  • test/workflow-state-durable-object-plan-authority.test.ts
  • test/workflow-state-durable-object-routing.test.ts
  • test/workflow-state-store-atomicity.test.ts
  • test/workflow-state-store-cancellation-policy.test.ts
  • test/workflow-state-store-failure-contracts.test.ts
  • test/workflow-state-store-integrity-regressions.test.ts
  • test/workflow-state-store-malformed-record-shape.test.ts
  • test/workflow-state-store-missing-state-coverage.test.ts
  • test/workflow-state-store-plan-authority.test.ts
  • test/workflow-state-store-provenance.test.ts
  • test/workflow-state-store-recovery.test.ts
  • test/workflow-state-store-retained-provenance-integrity.test.ts
  • test/workflow-state-store-transition-result-contract.test.ts
  • test/workflow-task-execution-coverage-contract.test.ts
  • test/workflow-task-runner-claim-authority.test.ts
  • test/workflow-task-runner-terminal-authority.test.ts
  • test/workflow-task-runner.test.ts
  • wrangler.toml

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae seonghobae added the bug Something isn't working label Sep 2, 2026 — with ChatGPT Codex Connector
@seonghobae seonghobae added priority: high High-priority or P1 work status: draft Draft pull request type: bug Defect or incorrect behavior labels Sep 2, 2026 — with ChatGPT Codex Connector

Copy link
Copy Markdown
Contributor Author

Cross-repo consistency check from a session that's spent this pass deep in .github's docs/product-goal-directive.md §8/§10 (the org's canonical LLM-orchestration/CI-pool-pinning directive) and its Devin Review reconciliation — offering this since it's context another same-repo reviewer likely doesn't have loaded.

Two things this PR does that line up cleanly with what the directive requires elsewhere in the org, worth having on record as independent cross-repo confirmation:

  1. Timeout/retry delegation (config.py's _reject_legacy_attempt_controls, AsyncOpenAI(timeout=None, max_retries=0)): this matches §8's "no uniform hardcoded LLM request timeout — default unlimited/null, upstream provider ends the call on its own failure" principle exactly. .github's own Strix/OpenCode CI paths made the identical move (removing repo-authored LLM_TIMEOUT/attempt-budget variables in favor of gateway-owned allocation) for the same reason. Good to see the same discipline applied independently in Noema's own reviewer client.
  2. orchestrator/free as the canonical routing alias, with orchestrator/auto and arbitrary aliases explicitly rejected fail-closed: this is exactly the same posture .github/workflows/strix.yml enforces (CONTEXTUAL_ORCHESTRATOR_POOL accepts only free, auto removed as an accepted value — see .github's docs/product-technical-gap-baseline.md). One nuance worth being aware of if it comes up later: .github's own directive had to explicitly reconcile (this session, today) that the original orchestrator/free switch on strix.yml was an unreviewed agent action, not an owner decision, and that the underlying single-outage-domain availability risk (ADR-0003) is still open — the owner has since separately, explicitly authorized the pin-as-CI-policy (not the risk itself). Doesn't block anything here since this PR's doctoring note doesn't make an owner-authorization claim either way, but flagging it in case Noema's own docs ever need to describe why orchestrator/free is required, not just that it is.

No blocking concerns from this reading — flagging for the record, not asking for changes.


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

Merge conflict resolution: mainfix/noema-orchestrator-free-routing-alias

Confirmed the reported dirty merge state was real (verified fresh via git fetch + git merge-tree against live main@bbee332, not stale), then resolved it with a normal merge commit (no rebase, no force push).

Merge: git merge --no-edit origin/main at PR head 79a8dbc3b725a5a64276bba15f042d5d425b5e9e (main had advanced to bbee33270b496255d785c766fc009a5f9162a695 via PR #528, a runtime-orchestration bounded-context feature landed independently of this PR). Result: merge commit 82dc4b11b4b76b904d919d1ed177460e53123fb0, pushed non-force.

Conflict scope: only CHANGELOG.md had a real textual conflict — both branches appended a distinct ## Unreleased bullet at the same insertion point (this PR's orchestrator/free routing-alias entry vs. main's Workflow/Task Execution + State & Checkpoint admission entries). Resolved by keeping both entries, in order. Every other file git merge-tree reported as touched by both sides (docs/PRD.md, docs/README.md, docs/adr/README.md, plus the new bounded-context src//test/ files from #528) merged cleanly with no marker conflicts.

No lockfile/package.json changes were part of this merge, so no lockfile regeneration was needed.

Verified this PR's own security-hardening contributions survived the merge intact — did not let main's independent evolution silently drop either side:

  • scripts/lib/orchestrator-gateway.mjs still has "*": "deny" (deny-by-default OpenCode permission model) with the explicit read/edit/glob/grep/list allowlist.
  • orchestrator/free remains the pinned DEFAULT_ROUTING_ALIAS.

Gates run on the merged head (Node 24.19.0, matching devEngines):

  • npm run typecheck — clean.
  • npm run security:scan (npm audit --audit-level=high) — 0 vulnerabilities.
  • npx vitest run test/opencode-tool-capability-boundary.test.ts (the RED/GREEN pair for the deny-by-default permission model) — 1/1 passed, no regression from the merge.
  • npm test (full suite) — 3943-3947 passed; 3 pre-existing failures (test/hourly-product-development-final-candidate-cleanup.test.ts, test/no-heuristic-workflow-authority.test.ts, test/orchestrator-gateway-contract.test.ts) reproduce identically on the unmerged PR head 79a8dbc in this environment (verified in an isolated worktree), so they predate and are unrelated to this merge — consistent with this PR's own "Verification boundary" section noting exact-head CI was not yet GREEN. Not touched or masked by this merge.

PR left in Draft as instructed; no threads resolved (none were addressed by this conflict fix); no merge/approval action taken.


Generated by Claude Code

Comment thread reviewer/tests/test_no_heuristic_gateway_policy.py Fixed

Copy link
Copy Markdown
Contributor Author

Reviewer-ci + verify failures on abae56f4 — root cause and fix

Pushed 9d06400 on top of abae56f4 (non-force). Summary below; full reasoning is in the commit message.

Python reviewer/ package (4 reported pytest failures)

All four traced to one production commit on this branch, 44e58c9 "remove local severity admission thresholds" (preceded by its RED, 519500c), which intentionally:

  • removed Confidence as a settable ReviewVerdict field (replaced with a read-only .confidence property that always returns a LegacyConfidence/"not-applicable" sentinel, since Noema has no calibrated confidence model — see models.py's own docstring),
  • changed the approval-invariant validator from "block only MEDIUM+ findings" to "block APPROVE alongside any finding" (severity is descriptive evidence metadata only, "never a local admission threshold" — same docstring, same wording repeated in agent.py's system prompt), and
  • as a side effect, reworded the downgrade-summary prefix in gating.py (no more severity-threshold language).

44e58c9 updated test_models.py and test_manifest.py accordingly (test_models.py::test_approval_rejects_every_evidence_backed_finding already asserts rejection for every Severity including LOW/INFO, and test_verdict_defaults_are_evidence_only already asserts confidence isn't a field) but missed three other test files:

  1. test_gating.py::test_failed_check_downgrades_approval_with_log_pointer — asserted the old plural substring "current-head checks". Updated to the actual current prefix "unresolved current-head check, scanner, or review-thread evidence".
  2. test_github_io.py::test_render_review_body_marks_findings_and_marker — passed confidence=Confidence.MEDIUM to the constructor, now extra_forbidden since confidence isn't a field. Removed the kwarg; added an assertion that the rendered body shows Confidence: not-applicable (exercising the legacy-sentinel property directly).
  3. test_verdict_invariants.py::test_approval_allows_nonblocking_advisory_findings — directly re-encoded the removed invariant ("LOW/INFO findings remain compatible with approval"), contradicting the sibling test in test_models.py. This is the security-relevant one: I verified the new global-rejection design is deliberate (docstrings + system prompt + the already-updated sibling test agree), not a regression, so I flipped this test to assert ValidationError for LOW/INFO too, matching MEDIUM/HIGH/CRITICAL.

Also fixed gating.py: the package's interrogate docstring gate (100% required) was separately failing on a missing docstring on the nested identity() helper in _enforce_findings — pre-existing on this branch, unrelated to the 4 pytest failures but blocking the same reviewer-ci check-run. Added the one-line docstring.

Folded in the requested quality nit in test_no_heuristic_gateway_policy.py: removed the redundant local import noema_reviewer.config as config_module (duplicate of the top-level import) in favor of inspect.getmodule(resolve_config).

Verification (Python 3.11, non-root runner, GH_TOKEN unset — matching real CI; this sandbox's ambient GH_TOKEN had been masking one branch in github_io.py as a false coverage gap, unrelated to this PR):

  • RED (pre-fix, on abae56f4): exactly the 4 reported failures reproduced.
  • GREEN (post-fix): 515 passed, 0 failed, 100.00% line+branch coverage, 100.0% docstring coverage (interrogate).

verify (vitest) — 2 fixtures on the same head

  1. orchestrator-gateway-contract.test.ts — "prints the gateway identity after a successful CLI preflight": commit 857b76a ("fail closed for private OpenCode routing") added requirePublicRepositoryForOpenCode(), which now requires GITHUB_EVENT_PATH whenever --write-opencode-config is passed. 857b76a didn't update this pre-existing success-path test, so it now fails closed (status 1) for a fixture with no event file. Added a GITHUB_EVENT_PATH fixture with visibility: "public", matching the pattern in opencode-private-visibility-boundary.test.ts.
  2. no-heuristic-workflow-authority.test.ts — "derives request privacy from live repository visibility": asserted the hourly workflow should carry the same gh api .../--jq .visibilityNOEMA_LLM_ZDR_ONLY pattern as central-review.yml. That pattern exists because the PydanticAI reviewer has a proved request-level zdr_only transport. OpenCode does notverify-orchestrator-gateway.mjs's own docstring says so explicitly, and NOEMA_LLM_ZDR_ONLY is never read anywhere in the OpenCode/hourly path. OpenCode's actual (and already fully tested, in opencode-private-visibility-boundary.test.ts) privacy mechanism is stricter: refuse to run at all for non-public repos, via requirePublicRepositoryForOpenCode. Implementing what the test literally asked for would have added an unread NOEMA_LLM_ZDR_ONLY=true env var to the hourly workflow — a phantom signal nothing enforces, which is exactly the kind of invented/uncalibrated signal this PR's own design principle rejects. I split the test: central-review's assertions are unchanged (still correct), and the hourly assertion now checks the actual fail-closed wiring (--write-opencode-configrequirePublicRepositoryForOpenCode → the real "OpenCode inference fails closed for ..." message) instead of the inapplicable flag pattern. If anyone disagrees with this read, flag it here — I did not touch the underlying privacy behavior, only which assertions the test makes.

Verification: both tests RED before (reproduced exactly as reported) → GREEN after. tsc --noEmit clean. Full vitest run: 3940 passed, 0 of the 2 reported failures remain. 6 other test files (8 tests: acquisition-data-room-manifest, acquisition-output-symlink, acquisition-review-regressions, dependency-license-inventory-release-wiring, hourly-product-development-final-candidate-cleanup [readSingleRunBudget is not a function — a real stale-export bug, but pre-existing and out of scope of what was reported], kpi-tail-streaming-integrity) fail identically with or without my changes (confirmed via git stash against unmodified abae56f4) — root/sandbox-specific (symlink handling, SIGTERM reaping, npm-CLI PATH resolution under this container), not present in the 3945/3948 figure from the actual job log, and untouched by this commit. Flagging readSingleRunBudget specifically since it looks like a genuine stale reference someone should look at, just not part of this fix.

Commit: 9d06400. No force-push, no history rewrite, no gate weakened — the LOW/INFO invariant fix makes the gate stricter, not looser.

🤖 Generated with Claude Code

https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

Fresh protected-base repair supersedes the stale authority block. Protected main is e1ac9d50f6c646f04be8c137c8acdc7200182fcd. Ordinary two-parent non-force merge ac5efa46ada634f17da0321df0f80d53fecec4d7 preserves the provider-neutral orchestrator/free/privacy/tool-authority delta and inherits only the protected stateless GitHub installation-token regression. Current exact-head workflows ci 33872001753, reviewer-ci 33872001734, required Security Scan 33872001818, and patch-validator-image 33872001775 are queued/non-passing. No predecessor or local result transfers; keep Draft.

Copy link
Copy Markdown
Contributor Author

2026-09-06 KST post-#546 repair finding: protected semantic reviewer truth is now main@85b17014b8d46eacc95e096ca114568c321d0263. This branch overlaps that protected delta in .github/workflows/central-review.yml, CHANGELOG.md, reviewer/noema_reviewer/gating.py, and reviewer gating/GitHub-I/O tests while also owning CO consumer/work-conserving writer changes. A blind tree replacement would drop valid delta from one side. Keep Draft and perform an ordinary semantic three-way restack that preserves both owner deltas, then regenerate exact-head gates. Do not force-push, copy provider/routing authority into Noema, or transfer the pre-#546 reviewer result.

seonghobae added a commit that referenced this pull request Sep 8, 2026
Preserve PR-scoped verification while seeding the patch-validator BuildKit cache from path-bounded protected-main changes. Exact head 2f91bf8 had terminal success for CI, reviewer-ci, required Security Scan, and patch-validator-image with clean fresh review authority and current-main ancestry.
Preserve #558's protected patch-validator image/cache contract while retaining #535's CO-backed reviewer and work-conserving control-plane delta. Ordinary two-parent convergence only; no predecessor gate authority is transferred.
seonghobae added a commit that referenced this pull request Sep 8, 2026
Require the documentation lane to reflect protected #558 integration, the newly converged #535 exact head, and the newly observed #556 stacked head before production baseline text is repaired.
seonghobae added a commit that referenced this pull request Sep 8, 2026
Bring #559's owned baseline in line with protected #558 integration, exact #535 convergence, and the newly observed #556 stack while preserving canonical owner boundaries and release-evidence discipline.
seonghobae added a commit that referenced this pull request Sep 8, 2026
Update #559's sole documentation authority to the latest #556 exact head, preserve the observed hosted release-test failure as historical evidence, and keep the downstream stack non-authorizing until #535 reaches protected main.
seonghobae added a commit that referenced this pull request Sep 8, 2026
seonghobae added a commit that referenced this pull request Sep 8, 2026
@seonghobae
seonghobae marked this pull request as ready for review September 8, 2026 05:17
@seonghobae
seonghobae merged commit 0dbfceb into main Sep 8, 2026
18 of 19 checks passed
@seonghobae
seonghobae deleted the fix/noema-orchestrator-free-routing-alias branch September 8, 2026 05:18
seonghobae added a commit that referenced this pull request Sep 8, 2026
Preserve the valid #556 claim-evidence implementation and tests, adopt protected main as an ordinary second parent, and restore docs/product-technical-gap-baseline.md from protected source because #559 is its sole writer. No predecessor check or review evidence transfers.
seonghobae added a commit that referenced this pull request Sep 8, 2026
Adopt current protected main as an ordinary second parent while preserving #559's six sole-writer documentation authority paths. All #535 production/reviewer/gateway changes remain from protected source; predecessor check evidence does not transfer.
seonghobae added a commit that referenced this pull request Sep 8, 2026
seonghobae added a commit that referenced this pull request Sep 9, 2026
* test(docs): expose post-547 commercial authority drift

* test(docs): require current active commercial lanes

* docs: refresh commercial gap authority after #547

* test: advance patch-validator candidate authority

* test: reject superseded patch-validator candidate

* docs: refresh patch-validator exact authority

* test: require current #535 commercial authority

* docs: repair current commercial authority after hosted RED

* test(docs): require live post-558 commercial authority

Require the documentation lane to reflect protected #558 integration, the newly converged #535 exact head, and the newly observed #556 stacked head before production baseline text is repaired.

* docs(gap): repair post-558 live commercial authority

Bring #559's owned baseline in line with protected #558 integration, exact #535 convergence, and the newly observed #556 stack while preserving canonical owner boundaries and release-evidence discipline.

* test(docs): require latest observed #556 authority

Advance the documentation contract to the live #556 successor after its hosted release-test RED, while rejecting the superseded observation. Production baseline text follows in the causal repair commit.

* docs(gap): record live #556 successor and hosted RED

Update #559's sole documentation authority to the latest #556 exact head, preserve the observed hosted release-test failure as historical evidence, and keep the downstream stack non-authorizing until #535 reaches protected main.

* test(docs): require current #535 endpoint-repair authority

* docs: track current #535 gateway endpoint repair

* test(docs): require #535 coverage-repair authority

* docs: track #535 coverage-gate repair

* test(docs): require current central control-plane snapshot

* docs: refresh central control-plane snapshot

* test(docs): retire stale commercial authority assertions

* docs: refresh protected and claim-evidence authority

* test(docs): track protected #535 integration

* test(docs): track current claim-evidence head

* test(docs): bind post-535 protected authority

* test(docs): refresh current candidate contract

* test(docs): align claim-binding authority wording

* docs: refresh claim-evidence candidate authority

* test(docs): match hosted run authority casing

* docs: refresh live Noema commercial authority

* test(docs): track current Noema feature authority

* test(docs): bind commercial gap to live feature heads

* test(docs): require settled external-extension authority

* docs: converge commercial gap to current plugin admission

* test(docs): track active policy-approval RED

* docs: bind commercial gap to policy-approval RED

* docs: restore durable commercial gap owners

* docs: align external-extension authority after restack

* test: bind documentation authority to restacked #560

* test(d(docs): require complete gap authority schema

* docs: bind gap status to architecture authorities

* test(docs): reject stale tool-capability candidate

* docs: refresh current tool-capability evidence

* docs: refresh active extension authority

* docs: bind extension event chronology evidence

* docs: refresh extension chronology authority

* docs: bind gap baseline to hostile admission repair

* test(docs): bind live candidate to admission repair

* test(docs): preserve candidate ADR authority wording

* docs: refresh external-extension runtime-time authority

* test(docs): bind current runtime-time candidate authority

* test(docs): refresh live external-extension candidate authority

* docs: bind gap authority to invocation replay repair

* docs: converge on public replay authority repair

* docs: converge on activation revocation repair

* docs: converge on admission-bound invocation authority

* docs: bind commercial gap to exact admission provenance

* test(docs): require exact-admission candidate authority

* test(docs): bind candidate contract to exact admission

* docs: track crypto-provider RED authority

* test(docs): bind external-extension authority to Web Crypto repair

* docs: converge external-extension Web Crypto authority

* test(docs): follow current external-extension authority

* test(docs): assert public receipt binding authority

* test(docs): match activation revocation authority wording

* docs: converge baseline after #560 protected integration

* test: bind documentation authority to #560 integration

* test: treat external-extension admission as protected history

* test: extend protected integration history through #560

* test: move external-extension gap to lifecycle successor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working priority: high High-priority or P1 work status: draft Draft pull request type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants