chore(ci): reconcile protected main into review admission owner - #2192
Conversation
…cks are in flight (#1937) A scheduler run that executes after a 2h+ queue wait finds its scanned PR behind main and merges main into the head before any review is dispatched (inspect_pr, pre-review path). That push cancels every queued check on the old head (22/28 on #1926, 21/30 on #1484) and requeues the PR at the back, so under a saturated queue no head ever finishes its checks: 76 of the 77 PRs merged since 2026-09-04 had 0/12 required contexts satisfied at merge. has_in_flight_check_runs() reuses latest_check_runs()/running_check_state(); the pre-review path now decides "wait" while any newest current-head check run is still queued or running. No age cap on purpose: a cap would restart the loop. The post-approval update path is unchanged (main is strict=true). CLAUDE.md described only the post-approval update; it now names both paths. Refs #1935 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…roup per run id
The workflow-level concurrency key fell back to github.run_id for every
non-PR event, so each main push was its own group and no newer main head
ever retired an older, superseded scan. Measured 2026-09-05T14:27Z in
.github: nine push/main Strix runs outstanding at once (five running, one
past two hours; four queued) against a 10-30 minute normal scan, each
holding a slot under the shared 60-job ceiling.
Scope push events as push-<ref_name> with the existing cancel-in-progress:
true, so a newer head of the same protected branch supersedes the older
scan exactly as a newer PR head does. A push scan covers the whole tree and
publishes no strix commit status, so the newest head subsumes every older
one; schedule and PR-less repository_dispatch keep a unique run id and the
pr_number admission output is unchanged.
Contract: queue-contract docstring records the measurement and a new
assertion pins the push-{0} clause; the quick gate asserts it too; the
2026-09-04 doctoring record carries a dated amendment.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
…cing Requested in review on #1938: during a merge burst each new main head cancels the previous scan, so the latest main is scanned once merging pauses for one scan duration; the weekly schedule scan is the floor. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
… the workflow comment Peer measurement on #1938: 50 main pushes in 24 h, median gap 8.4 min, mean 26.5 min, so only the final head of each merge burst completes a scan. Stated next to the group key so a later coverage measurement does not read the gaps as a defect. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
…1939) build_zdr_prioritized_catalog sorted eligible routes by (cost, ZDR, provider, model) and filled the bounded catalog in that order, taking up to account_cap per account. With the sidecar's ORCHESTRATOR_CATALOG_ ACCOUNT_CAP=8 and ORCHESTRATOR_CATALOG_LIMIT=12 the fill took 8 nvidia_nim + 4 nvidia_nim_sub and stopped before the alphabetically last account: noema-review run 33969842312 admitted 62 free routes across three accounts (free_account_diversity 3) and served 12 NVIDIA routes, of which runtime preflight kept 2, so a stalled NVIDIA endpoint had no other account to fail over to (contextual-orchestrator#1045). Keep the sort; group the sorted rows by (cost, ZDR) tier and fill each tier round-robin across provider accounts until limit, honouring account_cap. Tier order, cap, limit and discovery-order independence are unchanged; the same input now yields 4 + 4 + 4. The launcher's evidence_only filter (#1476) is not the cause on the current pin (2e414d15 includes contextual-orchestrator#949), so that PR stays a complementary hardening. Tests: three new cases (interleave within tier; ZDR tier still first; exhausted accounts hand turns over) were RED against the old loop (3 failed) and are GREEN now. Gate on this tree: 2896 passed, coverage 100%, interrogate 100%. Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Rebinds workflow_sha so the required review runs pick up #1939's round-robin catalog fill; the previous head's Noema run failed on the single-upstream gateway stall that #1939 removes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
…ew sidecar's stderr (#1943) The review sidecar never configured its orchestrator process's logging, so it ran at Python's default WARNING while contextual_orchestrator logs every provider attempt, classified failure, backoff and circuit event at DEBUG. A 3122 s noema-review 502 on 2026-09-05 (.github#1940) could only be attributed by reading source: six preflight-ready routes, two retry layers (TaskOrchestrator.tool_retry_attempts=1 over ModelClient max_retries=2 at a 90 s per-recv timeout), about 548 s per hop. The launcher now calls the vendored debug_logging.configure_logging before serving, DEBUG by default and overridable through ORCHESTRATOR_SIDECAR_LOG_LEVEL, and gives every root handler a timestamped format so per-hop durations can be read off the trace. At the vendored pin no DEBUG site logs a prompt, payload or response body; the only free-text field (provider_attempt_failed's error_message) is kept out of CI evidence by the sidecar's allow-list sanitizer, which a companion change extends to admit these templates and upload the file. Tests: level default, override, level-and-format application, invalid level -> SystemExit, and a source-order contract that logging is configured before credential work; all five fail against main's launcher. Gate on this tree: 2901 passed, coverage 100%, interrogate 100% (the final commit differs from the gated tree by a docstring only; the touched test module and interrogate were re-run on the final text). Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…rcuit events (#1945) * fix(sidecar): let the stream sanitizer pass orchestrator route and circuit events Every provider_*/circuit_* line from the orchestrator was folded into omitted_unstructured_lines, so even the provider_exhausted WARNING that fires today never reached an artifact. Admit those templates field by field against bounded charsets, cut provider_attempt_failed before its free-text error_message, and accept both the default and the sidecar formatter log prefixes (keeping the timestamp for durations). Companion to #1943 and #1944. Refs #1935, #1939 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(sidecar): accept float circuit counters and pin the real formatter output The orchestrator's circuit counters are floats (failures 0.0 += 1.0, circuit_reset_seconds 30.0), so the lines that reach stderr say failures=2.0 / reset_seconds=30.0; the integer-only pattern rejected both circuit_failure and circuit_opened. Found by rendering the templates through the sidecar's logging.Formatter, which the new test now does for all ten. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…erdict phase fails (#1944) A failed noema-review run left artifacts=0, so a 3122 s walk across six ready routes ending in HTTP 502 (run 33981136873) was diagnosable only from the caller's one-line summary. Ship the sanitized sidecar stderr and the preflight report on failure, using the same pinned upload-artifact and the same file Strix already publishes in strix-reports. Refs #1935, #1939 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ilover The review sidecar's preflight discarded a route the moment its 16-token probe raised, including on 429 and 5xx, while the serving gateway treats exactly those statuses as transient: it retries the route and fails over across it (provider_errors.PROVIDER_STATUS_SURFACES marks 429 retryable; orchestrator.TRANSIENT_HTTP_STATUS). Under concurrent CI load the probes spend the per-key budgets themselves: noema-review run 33993637015 (.github#1687, 2026-09-05) rejected 11 of 12 routes -- six with 429, three of them on NVIDIA keys whose sibling routes were ready -- served the single ready route for 542 s and returned 502. Routes whose probe answered with a status in the gateway's transient set are now kept as deferred, ranked after every ready route by a catalog priority penalty, so failover has somewhere to go. A probe that timed out records no http_status and stays rejected, so the silent route whose request costs the full two-layer retry budget is never admitted on that evidence. ready_count is unchanged, deferred_count is reported, and with no ready route the stage still fails, so ADR-0005's priced-catalog fallback contract is untouched. The escalation path is not touched. The stream sanitizer admits preflight_route_deferred next to preflight_route_rejected. Tests: deferral order and priorities, all-transient still fails, frozen and plain agent demotion, deferred log line, sanitizer pass/drop/scrub; all five fail against main's launcher and sanitizer. Gate on this tree: 2909 passed, coverage 100%, interrogate 100% (final commit differs from the gated tree by one comment; the touched module and interrogate re-run). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The review request is served by the passthrough path (one attempt per candidate via proxy_send_once, stream=False), so a silent route costs one socket-silence timeout, not a multi-layer retry budget. Comment-only. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… budget The first noema-sidecar-evidence trace (.github#1661 run 33995553859) shows the review path is _invoke: a silent route costs two rounds of three 90 s timeouts. Word the constant's comment on that basis instead of the single-attempt passthrough wording of the previous commit. Comment-only. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The catalog becomes a candidate list (up to 24, per-account cap 8, the tier-then-round-robin order from #1939) and _preflight_review_agents probes it in order, stopping at REVIEW_PREFLIGHT_TARGET_READY = 8 ready routes or REVIEW_PREFLIGHT_MAX_PROBES = 16 probes, whichever comes first. A permanently dead candidate (NIM lists gemma-3-12b/4b and answers 404 on every run) costs one probe instead of a served slot; a healthy pool stops early. Why: after #1939's four-per-account slice, each NVIDIA key's slots were its first four models alphabetically -- deepseek-v4-flash, deepseek-v4-pro and the two gemma-3 404s -- so each key served two contended routes. Preflight ready fell from 6/12 to 1-3/12 and noema-review in .github went from 7 successes / 14 failures to 0 / 22 (lane jan's census on #1948, verdict-step conclusions). - REVIEW_PREFLIGHT_MAX_TOTAL_ROUTES 12 -> 24, PRIMARY_ROUTE_LIMIT 8 -> 16; sidecar ORCHESTRATOR_CATALOG_LIMIT default and the composite action's catalog_limit default 12 -> 24. - Report gains candidate_count, target_ready, probe_budget; probed_count now counts probes sent; rejected_count = probed - ready - deferred. #1947's deferral pass pairs exactly the probed prefix. - ADR-0029 (new; 0028 is claimed by #1668), ADR-0003 section 2 stage-budget sentence amended, CHANGELOG. Tests: four new lazy-fill tests plus the updated stage-limit invariant; all five fail on #1947's tree (negative control). Gate: 2913 passed, 1 skipped, coverage 100% (13150 statements, 0 missed), interrogate 100%. Refs #1939, #1947, #1948. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… budget Review fixes from lane peer 1's head verification of #1949: - The production pool is `free` (sidecar default, no fallback stage), where _bounded_primary_catalog_limit returned the full 24 while the probe cap is 16, so candidates 17-24 could never be probed and candidate_count minus probed_count would have been meaningless as evidence. Every stage's list is now min(total, REVIEW_PREFLIGHT_MAX_PROBES): the free pool lists 16 candidates (12 before), the auto pool keeps 16 free + up to 8 priced. - The launcher's own ORCHESTRATOR_CATALOG_LIMIT default follows the sidecar (12 -> 24). - The sidecar's job-log echo of the preflight JSON grows from 160 to 400 lines: 16 probed routes at 8-10 lines each plus the header overran the old cap exactly in the dead hour; the artifact copy was always complete. - ADR-0029 and CHANGELOG state the free-pool bound and the wall-time cost of silent probes (one artifact: 19 probes, 805 s). Test: the stage-limit test now asserts the free pool's single stage equals the probe cap. Gate: 2913 passed, 1 skipped, coverage 100% (13150 statements, 0 missed), interrogate 100%. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The sidecar stream sanitizer collapsed every Python traceback into a single "sidecar emitted an unexpected exception" line, printed once per stream. On .github#1812's strix run 33993155419 the gateway answered 83 requests with 500 internal_error -- contextual-orchestrator's generic `except Exception: traceback.print_exc(); _send_error(500, ...)` path -- and no artifact could say which exception escaped, where, or how many times. Each traceback now yields one bounded line, `unexpected_exception type=<Type> frame=contextual_orchestrator/<module>.py:<line>:<fn>`: opened at the header, closed at the column-0 terminal line (or the next header, an allowlisted line, or end of stream -> type=unknown). Indented frame/source lines are consumed rather than counted as omitted; only a contextual_orchestrator frame's package path, line and function are kept, and the exception message is never re-emitted. Chain sentences are consumed so a chained exception yields cause then effect. Tests render real tracebacks with traceback.format_exc() from code compiled under a contextual_orchestrator/ filename (plain, dotted package type with a `from` chain, truncated at end of stream, free-text column-0 line), and the existing traceback expectation is updated. Only the sanitizer's own test consumed the old sentence. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…trator/free retry-stacking Advances ORCHESTRATOR_PIN_SHA from 2e414d15 (2 days stale) to 414f2297, the commit merging contextual-orchestrator#1081's retry-stacking fix. Independently verified: reproduced the bug on unmodified contextual-orchestrator main (6 real attempts), confirmed the fix (<=2), and byte-for-byte verified all 4 file edits (sidecar script, contract test, ADR, CHANGELOG) post-push. Bypass-merged per this cycle's standing authorization: this PR's own required reviews route through the base branch's still-stale sidecar script (pull_request_target trust boundary), so normal review would hit the exact bug being fixed here -- the chicken-and-egg case this bump exists to resolve. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KPmJErfkcHer4UVEgrQxUX
…ransient-routes # Conflicts: # CHANGELOG.md
…t-lazy-fill # Conflicts: # CHANGELOG.md
Binds the sidecar pin bump to contextual-orchestrator@414f2297 (contextual-orchestrator#1081's retry-stacking fix, .github efb8926) and the #1943/#1944/#1945 workflows to this head's required runs; the previous head's Noema/Strix runs failed on the stalled-route loop that fix removes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
Lane jan rebuilt the real 2026-09-06 candidate order from #1938's Strix artifact (comment on #1949): under the plain sixteen-probe walk the served set is about five ready + five deferred and the readiness target of eight is unreachable, because the tier round-robin spends five probes on an account whose every free route has answered 429 in every artifact since 21:00Z and four on the two dead gemma-3 entries per key, while the routes that were ready in every pre-#1939 artifact (llama-3.2-11b/90b, muse-glimmer-30b) sit past the cap. A 429 at preflight is a per-key answer. Once one credential account has answered 429 to REVIEW_PREFLIGHT_ACCOUNT_SKIP_AFTER_429 = 2 consecutive probes, its remaining candidates are skipped without a probe and the walk continues with the other accounts' next candidates; the two probed routes are still deferred (#1947). Under jan's order the same sixteen probes now reach both keys' llama routes and the target; a fully rate-limited hour costs two probes per account instead of the whole budget. - The production free pool lists the full 24 candidates again (probe cap 16): the tail past the cap is reachable exactly when an account is skipped, and the report separates skipped_count from the unreached remainder, which answers the earlier unreachable-tail objection. - The deferral pass pairs rows with the agents actually probed (a new `probed` list), not positionally with `agents` -- with skips those no longer line up; the artifact-order test alone missed this because its skips fell after its deferred rows, so a dedicated ordering test pins it. - Report gains skipped_count and account_skip_after_429. ADR-0029 and the CHANGELOG record the rule and the projection; jan's family-interleave layer is recorded as the reserve alternative. Tests: dead-hour budget test now uses 404s (24 -> 16 probes, no skips); three accounts x 8 all 429 -> 6 probes, 18 skipped; jan's order -> a llama route on each key, ready 8 within 16 probes, deferred = the two probed OpenRouter routes, skipped >= 3; row/agent pairing after skips. Negative control: the new tests fail on this PR's previous head; the pairing test fails on the pre-fix walk. Gate: 2916 passed, 1 skipped, coverage 100% (0 missed), interrogate 100%. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…post-pin measurement .github#1661 run 34008191123 (04:48Z, sidecar pin 414f2297): both NVIDIA keys' deepseek-v4-pro preflight probes held for 90.06 s and 90.10 s -- a 16-token probe can spend the full receive timeout -- and the hour had zero ready routes of twelve. So the probe cap is a wall-time bound as well: a fully silent hour costs at most 16 x 90 s = 24 minutes of preflight against 18 today, and the account-skip rule cuts a rate-limited hour to two probes per account. Docs only; no code change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…-transient-routes fix(sidecar): keep transient-rejected preflight routes as deferred failover instead of discarding them
…er-traceback-type-20260906 fix(sidecar): keep the exception type and innermost frame per traceback
…fill fix(sidecar): fill the preflight served set lazily to a readiness target
…retry (#1953) * fix(strix): name the sandbox bootstrap failure and give it a bounded retry When Strix's sandbox container comes up without its Caido proxy, Strix fails its fixed ten loginAsGuest attempts and exits; the gate then printed "STRIX_PROVIDER_UNAVAILABLE: contextual-orchestrator/orchestrator/free exhausted" -- blaming a component the run never called. The gate already recognises this class (is_caido_bootstrap_timing_error) and documents a same-model retry for it, but that retry draws on STRIX_TRANSIENT_RETRY_PER_MODEL, which is 0 in production because the gateway owns model failover, so it has never run. - STRIX_SANDBOX_BOOTSTRAP_RETRIES (default 1): once the per-model budget is spent, a sandbox-class failure may extend the attempt loop by one, up to this budget. The budget is charged in the same branch that grants the attempt: an adversarial verification pass (three independent lenses) showed that the first draft, which charged it in the retry-reason elif chain behind the gateway classes, let a log matching both the sandbox class and a rate-limit or connection class extend the loop on every iteration without charging, with nothing in production bounding it but GitHub's six-hour default. Gateway failures at per-model budget 0 still get no retry. - run_current_target_scan: for the sandbox class the verdict is "STRIX_PROVIDER_UNAVAILABLE: STRIX_SANDBOX_UNAVAILABLE: the last Strix attempt ended in the sandbox bootstrap (...) after N sandbox-specific same-model retries (budget B); this verdict names Strix's sandbox, not the LLM gateway." N is the observed count (SANDBOX_RETRIES_USED). The leading token is unchanged, so strix.yml's finding-free classification and its tests are untouched; the second token lets the review census split sandbox outages from gateway ones. Evidence: argos Strix run 34013128112 (2026-09-06): sidecar preflight ready 4 / deferred 4, then "Docker image ready", loginAsGuest failed after 10 attempts on 127.0.0.1:48080, Strix exit after 240 s, one attempt, the gateway verdict; a second artifact (9983313170) identical; two of the six most recent strix-reports artifacts are this class. Tests (tests/test_strix_caido_bootstrap_timing_retry.py, production functions extracted, run_strix_once stubbed with a self-capping stub): sandbox retry at per-model 0 (2 attempts), bounded (budget 2 -> 3, 0 -> 1), gateway retries not widened, mixed sandbox+rate-limit log stays bounded, sandbox budget on top of per-model (1+1 -> 3), verdict names the sandbox with the observed count, gateway verdict unchanged. Negative controls: three fail on main's gate; the mixed-log test fails on the first draft (runaway caught by the stub cap). Gate: 2927 passed, 1 skipped, coverage 100% (0 missed), interrogate 100%. Refs #1948, #1935. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(strix): report only sandbox retries that actually ran Lane peer 1's verification note on #1953: the reporting variable was set where the extra attempt is granted, but a granted attempt can still be vetoed by the timeout / transient checks that follow, so a log carrying both the sandbox and a timeout signature was charged, not retried, and reported as "after 1 sandbox-specific same-model retries". SANDBOX_RETRIES_USED is now assigned only when the retry really proceeds (just before the attempt counter advances); the budget charge stays in the grant branch, so the bound is unchanged. The constant's comment notes that a sandbox retry waits the same inter-attempt backoff as any other retry -- a pause between container attempts, not an inference deadline. Test: sandbox+timeout log -> 1 call, reported 0; plain sandbox log -> 2 calls, reported 1 (the harness echoes SANDBOX_RETRIES_USED). Module 14/14; negative control on main's gate 7 failed / 7 passed. Gate: 2928 passed, 1 skipped, coverage 100% (0 missed), interrogate 100%. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ource The central bootstrap scans this repository's own pull requests with the policy under test, and only tests/test_pingora_edge_policy.py is path-exempt. PR #2144 run 34737529066 flagged five literal runtime paths in the new fixture file; build the fixture at runtime instead so the diff never carries the form. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Refs ContextualWisdomLab/late-life-anxiety-reanalysis#10, #2122. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The comment still said the classifier verdict was consumed through `needs`; nothing consumes it that way any more. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…te-consumer-read-permissions fix(codeql): grant private consumers pull-request and status reads
…-route-keys # Conflicts: # CHANGELOG.md
…id-route-keys fix(review-policy): key OpenRouter ZDR feed routes by model_id
…ence-2116 # Conflicts: # CHANGELOG.md
…idence-2116 fix(pingora): admit bounded HWPX evidence documents without UTF-8 decoding
…sarif-checkout-path-2132
CodeRabbit on #2143: whole-workflow counts could pass if the same string appeared in another step or log line while a scanner or reporter step lost its flag. Check the four scan/retry steps and the reporter step by name. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`gather_findings` consulted only `tool.driver.rules`, so results whose rule lives in `tool.extensions` (every current CodeQL query pack: the real Python artifact has 0 driver rules and 43 extension rules) lost their security-severity and tags and passed the Medium+ gate fail-open (#2150). - `_component_rules`: honour `result.rule.toolComponent` (index | guid | name); absent means driver; unmatched means unresolved, never the wrong component. - `_rule_for_result`: resolve inside the referenced component only, so colliding rule ids stay distinct; validate `rule.index` against the declared id; `ruleId` != `rule.id`, bad indices, non-dict entries are unresolved. - `_finding_from_result`: an unresolved reference with no result-level score gates as `level=unresolved-rule` instead of silently passing. Driver-backed behaviour unchanged. Tests RED 8 -> GREEN 24; file coverage 100%. Full suite under coverage: 3062 passed / 1 skipped / 100% coverage; 13 timing-sensitive failures reproduced as passing in isolation (CPU contention). Closes #2150 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix(scheduler): recheck cancellation races * test(scheduler): bound cancellation race outcomes * fix(scheduler): preserve runs started during cancellation * fix: preserve runs after cancellation race * test: document coalescer callbacks
…mplicit model timeout) Advance ORCHESTRATOR_PIN_SHA from 414f2297 to protected main@767e67fbc6b881a452761f32abb69b9971b9b03b, the merge of contextual-orchestrator#1053. Under the old pin ModelClient defaulted to timeout=90 and the review gateway inherited it, so NVIDIA NIM google/gemma-4-31b-it attempts in the Noema sidecar timed out at exactly 90 s (15 of 27 attempts in fast-mlsirm#1860 run 34748511702) and the gateway answered 502 provider_connection_error after ~20 min of circuit retries. #1053 makes the model timeout null by default and administrator configured per model. Update the sidecar contract test constant, ADR-0003 (current pin and a 2026-09-13 amendment), and CHANGELOG. tests/test_contextual_orchestrator_* and sidecar contract tests: 225 passed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ar-pin-1053 chore(sidecar): advance contextual-orchestrator pin to 767e67fb (no implicit model timeout)
…on-root-20260913 # Conflicts: # CHANGELOG.md
* fix(noema): extract office documents for review context * fix(noema): harden document XML extraction * fix(noema): install document XML dependency in quality CI
Follow-up to #2172. The required hosted workflows remained queued repository-wide with zero available Actions runners; local focused, fixture, security, and syntax validation passed for the exact head. Apply the reviewed document-reader fixes.
…-extension-rules-2150
…ags-sarif-checkout-path-2132
…gate-fold-20260913
…thon-root-20260913 fix(opencode): admit immutable python source roots
…te-extension-rules-2150 fix(codeql): resolve SARIF rules from the referenced tool component
…s-sarif-checkout-path-2132 fix(security-scan): use current OSV output flags and bind SARIF upload to the head checkout
…te-fold-20260913 fix(sast-semgrep): fold the changed-scope gate into its single consumer job
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
1 similar comment
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
f9b0194
into
fix/no-heuristic-review-admission-current-main
Ordinary/non-force reconciliation helper for canonical review-admission owner #1629.
This reverse PR originally exposed a real conflict between
main@7f07029381a9ca770d0a68b7f3938dd652799d4dand owner head1ca83c308a2e8982d721bb9ec7a2e2df3d1b5578. The conflict was repaired on the canonical owner branch with ordinary two-parent merge commitf9b019422817772ac89b84590a5595982da17a44, preserving protected-main ancestry while resolving the overlapping launcher/policy/sidecar contract intentionally. ADR-0029 was then superseded explicitly on the same owner branch.Current comparison from the owner branch to protected
mainhasahead_by=0for this reverse direction and no changed files: the protected-main delta this helper existed to carry is now fully inherited by #1629. This PR therefore has no remaining valid delta and is closed under the verified-complete-inheritance rule; #1629 remains the canonical owner.