Repository navigation
feat: Verify Bugbot findings against repository evidence before publication (#950) - #951
Conversation
|
To preview the documentation for this pull request, visit the following URL:
|
Copilot approval · Human review neededStatus: This pull request is outside the configured approval scope. Technical evidenceRevision: |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #951 +/- ##
===========================================
+ Coverage 95.25% 95.74% +0.49%
===========================================
Files 1172 1547 +375
Lines 39236 48492 +9256
Branches 11685 15138 +3453
===========================================
+ Hits 37373 46429 +9056
- Misses 698 781 +83
- Partials 1165 1282 +117
🚀 New features to boost your workflow:
|
…-publication: regenerate approval reader bundles
…-publication: Stage agent installer archives in runner scratch
…-publication: Recover complete review and progress from large PRs
…-publication: Create agent session artifacts on runner scratch
…-publication: run source validation in parallel
…-publication: verify the published SDD revision
…-publication: Complete large progress and review workloads
…-publication: Show Bugbot review stages and actionable Commit progress
There was a problem hiding this comment.
Current status: 20 individually tracked findings from this review require attention. The snapshot also contains historical overflow without individual threads.
Last reconciled on53b2173. See aggregate Bugbot status.
🤖 Bugbot review snapshot
Bugbot reported 37 potential problems when commit 53b2173 was analyzed. This snapshot is historical; use the status block above for current state. 20 findings are linked to changed code.
Findings
- high: Run freeze checks before executing the dependency control —
quality/bugbot/evidence/issue-950/coverage-895-pilot/fixture.cjs:15 - high: Fixture code can escape the VM into the host process —
quality/bugbot/evidence/issue-950/partial-diagnostic/pagination-control.cjs:25 - medium: Same-line reassignment bypasses caller-flow check —
quality/bugbot/evidence/issue-950/causal-replay/python-source.py:556 - medium: Cumulative token totals are added on every resumed turn —
quality/bugbot/evidence/issue-950/shadow-real-prs/run.cjs:69 - medium: Missing sessions can pass the independence check —
quality/bugbot/evidence/issue-950/two-live-verifications/run-two.cjs:69 - medium: Conditional initializer assignment is treated as the effective field value —
quality/bugbot/evidence/issue-950/causal-replay/python-source.py:630 - medium: Rebound decorator is still treated as dataclasses.dataclass —
quality/bugbot/evidence/issue-950/causal-replay/python-source.py:436 - medium: OpenCode catalog parsing truncates nested model records —
src/infrastructure/bugbot/verifier_model_catalog.ts:13 - medium: Subclass with inherited abstract methods can be reported as concrete —
quality/bugbot/evidence/issue-950/causal-replay/python-source.py:316 - medium: Runner does not enforce the verifier concurrency cap —
quality/bugbot/evidence/issue-950/run-pilot.cjs:332 - medium: Runner does not verify the frozen input digest —
quality/bugbot/evidence/issue-950/two-live-verifications/run-two.cjs:21 - medium: Pilot runner does not enforce the pinned SDK revision —
quality/bugbot/evidence/issue-950/v3/run-pilot.cjs:11 - medium: Freshness check ignores draft-state changes —
src/application/usecases/steps/commit/bugbot/bugbot_review_freshness.ts:37 - medium: Codex verifier processes have no timeout before completion —
src/infrastructure/bugbot/shadow/session.cjs:85 - medium: Search instructions omit the accepted repository-root syntax —
quality/bugbot/evidence/issue-950/coverage-895-pilot/runner.cjs:35 - medium: Runner does not validate the selected SDK revision —
quality/bugbot/evidence/issue-950/run-pilot.cjs:10 - medium: Brokered verifier turns bypass the execution timeout —
src/infrastructure/agents/agent_execution_planner.ts:195 - medium: Accepts imports that execute after a module-level use —
quality/bugbot/evidence/issue-950/causal-replay/python-source.py:248 - medium: Mixed workspace targets are always unresolved —
quality/bugbot/evidence/issue-950/chain-diagnostic/retrieve.cjs:108 - medium: Missing corpus score does not block full-review dispatch —
quality/bugbot/evidence/issue-950/ev07-shadow/full-review.cjs:22
Additional findings omitted by the comment limit
17 additional findings were detected.
- Skipped citation audit passes the integrity check
- Bugbot dry-run suppresses unrelated issue publication
- Brokered verification skips its process timeout
- Scorer does not enforce attempt event order
- Audit does not verify which planned candidates produced results
- Runner can load an SDK other than the pinned revision
- Type identity alone can stitch unrelated code into a source chain
- Exact-range checks accept unvalidated premise citations
- Audit accepts a trace where the story merge occurs after the final map
- Unrelated order evidence can validate the final reason
- SDK pin check is skipped when the override is unset
- Invalid UTF-8 filenames can produce false evidence paths
- Installed shadow evidence scope is contradictory
- A call can exceed its wall-time cap and still qualify
- Preflight does not verify the complete primary matrix
- …and 2 more.
|
|
||
| function fixtures(lab, archives) { | ||
| const control = require.resolve('../coverage-895-reserved/dependency-control.cjs'); | ||
| const result = execFileSync(process.execPath, [control, lab, archives], { encoding: 'utf8', timeout: 30_000 }); |
There was a problem hiding this comment.
Run freeze checks before executing the dependency control
Severity: high
Category: security · Confidence: 95%
Location: quality/bugbot/evidence/issue-950/coverage-895-pilot/fixture.cjs:15
fixtures() launches the repository's coverage-895-reserved/dependency-control.cjs from the current worktree. The caller invokes fixtures() before checkFrozen() and the clean-worktree check, so a modified helper can execute with the caller's privileges before its hash or worktree state is rejected. Move those integrity checks ahead of this call.
Evidence:
This line executes the path returned for the repository helper. In run.cjs, fixtures() is called at line 112, while checkFrozen() runs at line 118 and the clean-worktree check at line 136. frozen.sha256 includes the helper's hash, but that check occurs only after it has already run; a modified helper can therefore perform arbitrary Node.js actions before rejection.
Suggested fix:
In the caller, verify the frozen hashes, expected HEAD, and clean worktree before calling fixtures().
| const code = ts.transpileModule(text, { | ||
| compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.CommonJS }, | ||
| }).outputText; | ||
| vm.runInNewContext(code, { exports, require(specifier) { |
There was a problem hiding this comment.
Fixture code can escape the VM into the host process
Severity: high
Category: security · Confidence: 90%
Location: quality/bugbot/evidence/issue-950/partial-diagnostic/pagination-control.cjs:25
The control loads and transpiles source from the pinned fixture, then evaluates it in a VM context. The exports object was created in the host realm and is passed directly into that context, so fixture code can traverse exports.constructor.constructor to obtain the host Function constructor and access the host process. Running the documented pagination control can therefore execute fixture-supplied code with the operator's permissions; the VM timeout does not provide a security boundary.
Evidence:
load obtains module text with git show at binding.head, creates host-realm exports at line 19, then injects it at this line. The reproduction instructions invoke this control against the reserved fixture. A fixture can use the injected object's host-realm constructor chain to escape the context and access process capabilities.
Suggested fix:
Avoid executing fixture source in-process. Use a disposable, credential-free OS-level sandbox with network blocked and resource limits, or replace the execution probe with a static/mock-only harness.
| if any(statement.lineno < getattr(node, "lineno", 0) < anchor["line"] and | ||
| dotted(assignment(node)[0]) in ((variable,), (receiver,), (receiver, field)) for node in local_walk(owner_func)): |
There was a problem hiding this comment.
Same-line reassignment bypasses caller-flow check
Severity: medium
Category: correctness · Confidence: 99%
Location: quality/bugbot/evidence/issue-950/causal-replay/python-source.py:556-557
The strict line-number bounds miss writes on the selected call’s line. With result = unit.adapter.lookup(); result = None, both assignment nodes share a line, so this check does not detect the reassignment. Later guard and consumer analysis can still attribute the consumer to lookup, although it sees None.
Evidence:
The reviewed source has this check at lines 556–557. Python AST nodes for semicolon-separated assignments share lineno; the strict < test therefore skips the later write. collect then continues using the original variable and can report a causal link for a value overwritten before the later guard and consumer.
Suggested fix:
Track statement order within the containing suite using AST positions or statement order, and reject intervening writes even when they share a physical line.
| inputTokens += usage.input_tokens; | ||
| outputTokens += usage.output_tokens; |
There was a problem hiding this comment.
Cumulative token totals are added on every resumed turn
Severity: medium
Category: correctness · Confidence: 99%
Location: quality/bugbot/evidence/issue-950/shadow-real-prs/run.cjs:69-70
The resumed Codex turns report session-cumulative usage, but this code adds each turn’s total to the running counters. The counters therefore exceed actual usage and can trigger the token cap before the investigation has used its allowed budget, marking valid findings as failed.
Evidence:
The added audit validates each recorded turn against cumulative usage and checks the difference against that turn’s usage delta (audit-usage.cjs, lines 48–53). The results report that summing these cumulative values caused five premature stops even though actual usage stayed below the limits (results.md, lines 54–56). These additions feed the cap check at line 74.
Suggested fix:
Use the latest cumulative totals directly, or add only each turn’s delta before checking the limits.
Apply this change:
| inputTokens += usage.input_tokens; | |
| outputTokens += usage.output_tokens; | |
| inputTokens = usage.input_tokens; | |
| outputTokens = usage.output_tokens; | |
| cachedInputTokens = usage.cached_input_tokens ?? 0; |
| } | ||
| })); | ||
| assert(runs.every(run=>run.writes.length===0)); | ||
| const initialThreads = runs.map(run=>run.turns[0]?.sessionSha256).filter(Boolean); |
There was a problem hiding this comment.
Missing sessions can pass the independence check
Severity: medium
Category: reliability · Confidence: 99%
Location: quality/bugbot/evidence/issue-950/two-live-verifications/run-two.cjs:69
The runner filters missing initial session hashes before checking uniqueness. When an investigation fails before receiving a thread ID, its result has status: 'failed' and a null session hash. If both fail this way, the uniqueness assertion compares two empty arrays; if one fails, the remaining hash is still unique. The runner does not check investigation status or require a hash for every run, so it can log completion and exit successfully without two independent live sessions.
Evidence:
In the numbered run-two.cjs source listing, the code begins at source line 1 and this statement is at zero-based displayed-line offset 68 (1 + 68 = 69). The pinned session adapter sets sessionSha256 to null when no thread ID is received; the investigation records that fact in turns and returns status: 'failed' on provider failure. After the empty-writes check, .filter(Boolean) removes absent hashes, and the following set-size comparison succeeds for zero hashes or one remaining hash. The subsequent completion log is therefore reachable without confirming successful runs or two session IDs.
Suggested fix:
Require both investigations to complete and require a nonempty initial session hash for each run before checking uniqueness.
Apply this change:
| const initialThreads = runs.map(run=>run.turns[0]?.sessionSha256).filter(Boolean); | |
| assert(runs.every(run => run.status === 'completed'), 'live-verification-failed'); | |
| const initialThreads = runs.map(run => run.turns[0]?.sessionSha256); | |
| assert(initialThreads.every(Boolean), 'initial-session-missing'); |
| const { tmpdir } = require('node:os'); | ||
| const path = require('node:path'); | ||
|
|
||
| const root = process.env.BUGBOT_PILOT_SDK || path.resolve(__dirname, '../../../..'); |
There was a problem hiding this comment.
Runner does not validate the selected SDK revision
Severity: medium
Category: reliability · Confidence: 96%
Location: quality/bugbot/evidence/issue-950/run-pilot.cjs:10
The selected root supplies the production modules loaded by load(), but the runner does not check that root against either SDK revision pinned in the manifest or verify its worktree state. A stale or modified checkout can therefore produce trial results using different code from the preregistered SDK without the runner detecting the mismatch.
Evidence:
Line 10 selects the root, and load() imports production modules from it at lines 17–22. manifest-v2.json pins sdk.development and sdk.audit; the runner validates subject checkouts and evidence but does not validate the selected SDK root. Thus the measured implementation can differ from the pinned one.
Suggested fix:
Before trials, validate the selected SDK checkout against an allowed manifest revision and check for relevant uncommitted changes.
| @@ -180,6 +192,7 @@ export class AgentExecutionPlanner { | |||
| approval: 'never', | |||
| sessionPersistence: false, | |||
| output: providerPolicy.output, | |||
| ...(brokeredWorkspace ? { brokeredVerification: true as const } : {}), | |||
There was a problem hiding this comment.
Brokered verifier turns bypass the execution timeout
Severity: medium
Category: reliability · Confidence: 96%
Location: src/infrastructure/agents/agent_execution_planner.ts:195
This plan sets brokeredVerification: true, and the managed verifier passes it to runAgentCli. That runner skips its timeout timer for brokered plans. The verification caller supplies no abort signal or enclosing deadline, so a provider process that does not exit can leave the review pending indefinitely even though the plan sets timeoutMs.
Evidence:
The added plan field is consumed by runAgentCli, whose timeout is installed only when !plan.brokeredVerification. observeBugbotShadowVerification calls the verifier without a signal, so the brokered provider turn has no other cancellation path and can exceed its configured 15-minute maximum without terminating.
Suggested fix:
Enforce the plan deadline for brokered runs, or provide an enclosing bounded deadline that aborts the provider process.
| if len(writes) == 1 and stable(writes[0], imported, name): | ||
| return original, () |
There was a problem hiding this comment.
Accepts imports that execute after a module-level use
Severity: medium
Category: correctness · Confidence: 95%
Location: quality/bugbot/evidence/issue-950/causal-replay/python-source.py:248-249
When an import is the module-level name’s only write, this branch returns its precomputed identity without checking whether the import precedes the use passed as at. For a module-level construction such as service = Review(Database()) followed by from adapters import Database, the resolver can treat Database as a resolved constructor even though Python evaluates the construction before binding that name, causing NameError at import time and making the reported wiring chain unusable.
Evidence:
In the added-file source, whose origin is line 1, the exact if is at zero-based offset 247 (1 + 247 = 248) and its return is at offset 248 (1 + 248 = 249). Module.__init__ pre-indexes all top-level imports, and Source.resolve passes the use node to effective_identity. The single-import branch accepts that precomputed identity based only on the write count and stable(...); it never compares the import’s line with the use. The at ordering check appears only in the separate alias branch. For a module-level constructor argument using a later import, callable_origin reaches this resolver path and can follow the imported symbol to its class, despite Python evaluating the argument before the import binds the name.
Suggested fix:
Check import order for module-level uses before accepting an imported identity. Preserve deferred function-body uses when module initialization guarantees the import runs before the function is called; otherwise return unresolved if execution order is not proved.
| const matched = receipts.filter(item => target.workspace === null && inside(item.path, target.scope) | ||
| && (target.match === 'literal' ? item.text.includes(target.query) : item.path.split('/').at(-1) === target.query)); |
There was a problem hiding this comment.
Mixed workspace targets are always unresolved
Severity: medium
Category: correctness · Confidence: 95%
Location: quality/bugbot/evidence/issue-950/chain-diagnostic/retrieve.cjs:108-109
A valid search request can contain up to three targets, including both a causal literal target and a workspace target. The literal target makes retrieve enter the TypeScript chain path, but this filter excludes every target whose workspace is non-null. Those targets are then returned as unresolved, and the successful chain path never delegates them to the common retriever, which supports workspace resolution. As a result, requested in-scope package evidence is withheld from the verifier.
Evidence:
requestProblem permits multiple searchTree targets with non-null workspace values and does not prohibit mixing them with literal targets. The dispatch at line 22 enters the chain path when any target is a literal with workspace === null. The filter at lines 108–109 then rejects all workspace targets, producing unresolved for them. The common retriever's workspace-resolution path can resolve those same targets from package manifests, but it is bypassed after the chain succeeds.
Suggested fix:
Resolve targets the causal chain cannot handle through the common retriever and combine their results and receipts, or route mixed requests to the common retriever.
| const record = row => fs.appendFileSync(ledger, JSON.stringify(row) + '\n', { mode: 0o600 }); | ||
| const slots = Array.from({ length: plan.repositoryCohort.repetitions }, (_, index) => | ||
| plan.repositoryCohort.order.map(id => ({ id, repetition: index + 1 }))).flat(); | ||
| const blocked = () => fs.existsSync(score) && JSON.parse(fs.readFileSync(score, 'utf8')).passed === false; |
There was a problem hiding this comment.
Missing corpus score does not block full-review dispatch
Severity: medium
Category: reliability · Confidence: 95%
Location: quality/bugbot/evidence/issue-950/ev07-shadow/full-review.cjs:22
If corpus-v3/corpus-score.json is absent, blocked() returns false because existsSync(score) short-circuits the check. The worker then admits slots and spawns reviews, so provider calls can run without the required independent detector corpus gate having passed. Block dispatch unless the score exists, is complete, and passed.
Evidence:
blocked() is false when the score file is missing; the worker loop at line 35 uses !blocked() to admit slots and line 42 spawns review.cjs. The preregistration defines the independent corpus as a mandatory gate, and the reproduction sequence runs the corpus before full review.
Suggested fix:
Require an existing, complete, passing corpus score before admitting any full-review slot.
Apply this change:
| const blocked = () => fs.existsSync(score) && JSON.parse(fs.readFileSync(score, 'utf8')).passed === false; | |
| const blocked = () => { | |
| if (!fs.existsSync(score)) return true; | |
| const result = JSON.parse(fs.readFileSync(score, 'utf8')); | |
| return result.complete !== true || result.passed !== true; | |
| }; |
Bugbot: 37 findings need attention
Findings
|
…-publication: Recheck draft state and parse complete OpenCode catalog records
Refs #950.
Review corrections
f8de480on the existing branch with first commit80407b7preserved.#895 deterministic verdict and coverage audit
One verdict-limit definition drives the prompt and application checks.
100 simulated calls passed the deterministic boundary and diagnostic
controls with zero runner writes and zero model calls. The historical
generic rejections remain indeterminate.
The actual pinned commands show the mutant CSF entry arriving through
executed coverage, remap and map merge, then JSON-summary and inventory
rejection. The observed and baseline reports match. Source establishes
the conditional route. An actual report-entry claim needs authenticated
execution evidence. The PR stays in draft and activation stays disabled.
Contract, link audit and reproduction ·
Controls · Source and execution receipts ·
Artifacts · CI ·
Head checks
#895 configureVitest lifecycle replay
Six fresh Sol sessions used compact packets that add lock-authenticated
evidence of project resolution, awaited configureVitest hooks, and V8
initialization and effective options. The controls verify the packet
and prompt budgets and that the historical packets fail the new timing
checks. The runner recorded zero GitHub write attempts.
Supported original refutations went from 3/3 to 2/3
and supported mutant confirmations from 0/3 to 0/3.
Sol did not meet the entry criterion for a separate runner-directed search.
The PR stays in draft and production activation stays disabled.
Preregistration · Simulated controls ·
Historical packet check · Trial ledger ·
Report · Deterministic CI ·
Commit checks
#895 complete-evidence regression
Phase 1 ran 12 closed one-call trials. All stayed within budget and the
runner recorded zero GitHub write attempts.
Sol confirmed one mutant with the correct downstream explanation, but
the packet omitted the lifecycle evidence linking its hook to the
effective coverage options. The other two Sol mutant responses were
inconclusive and named that gap. Luna refuted all three mutants. Neither
profile passed, so phase 2 was gated out. The PR stays in draft and
production activation stays disabled.
Preregistration · Simulated controls ·
Trial ledger · Lifecycle audit ·
Report and per-trial scores · Deterministic CI ·
Commit checks
#895 path-pattern regression pilot
The known-case regression kept the same pinned #895 candidate and initial
evidence while exposing the path-pattern search contract. The 36 slots
recorded 44 provider attempts and zero GitHub writes.
The report compares this run with the historical pilot and lists each
trial's first stopping stage. The PR remains in draft and production
activation stays disabled.
Preregistration · Simulated controls ·
Trial ledger · Scores · Report ·
Deterministic CI · Commit checks
#895 bounded Git path pattern controls
The versioned common adapter matches scope-relative paths with one-segment
wildcards and can filter a literal search before opening blobs. Exact
basename matching and all 17 historical replay outcomes are preserved.
Both new modes delivered the decisive configuration on each pinned tree
in four separate simulated controls. Each filtered to one path and opened
one file. The verifier cited the Git receipt alongside the authenticated
dependencies. The largest final package and prompt were 14,275 and 15,104
bytes. Both modes returned a budget result with zero opened files when
the pattern admitted 123 paths. The runner made zero model calls and
recorded zero GitHub write attempts. Production activation stays disabled
and the PR remains in draft.
Search contract, results and reproduction · Control record ·
Deterministic controls · Versioned adapter ·
Deterministic CI · Commit checks
#895 deterministic Git request replay
The frozen runner reproduced all 17 historical denials. The corrected
adapter admitted 16 searches after normalizing the authorized root alias.
Seven had no exact basename match, seven hit the literal search file
budget, and two combined both outcomes. The three-file read remains denied.
None of the historical inputs recovered the decisive configuration.
Separate exact-name, one-file, and partial-result controls delivered the
pinned configuration on both trees and validated the Git and dependency
receipts within the final packet and prompt limits. This replay made zero
model calls and recorded zero GitHub write attempts. The PR stays in draft
with production activation disabled.
Before/after table and reproduction · Exact request and delivery record ·
Deterministic controls · Versioned adapter ·
Deterministic CI · Commit checks
#895 reserved model diagnostic
Both profiles received the same pinned evidence and first-call schema
within each tree. The initial packet withheld the effective project
configuration. The on-demand arm could add it only through one typed
request to the common Git adapter.
The 36 scheduled trials recorded 48 provider attempts and zero
GitHub write attempts. The report gives each model/tree/arm result and
the first stopping stage for every trial. PR #951 remains in draft and
production activation stays disabled.
Preregistration · Simulated controls ·
Trial ledger · Scores · Report ·
Deterministic CI · Commit checks
#895 deterministic reserved coverage fixture
The reserved pair is ready for a separate diagnostic under the tested
prepared-dependency profile. Both pinned ha-ui trees passed typecheck
and 1,155 Vitest tests. The original report contains 52 runtime modules
and passes inventory. The mutant preserves all 52 entries and adds one
CSF file through the real V8 pipeline. The unchanged inventory rejects
it. The evaluator attributes the aggregate branch change to that file.
A simulated verifier accepted all ten dependency fragments on both
trees through lockfile-authenticated delivery and rejected wrong-version
and cross-revision receipts. This iteration made zero model calls.
PR #951 stays in draft and production activation remains disabled.
Report and reproduction · Subject lock ·
Mutation · Evaluator record ·
Dependency delivery · Future pilot protocol ·
Deterministic CI · Commit checks
#892 Sol retrieval with adapter limits disclosed
The first prompt adds only the common Git adapter's effective 80-line
and 4,400-byte limits. The same pinned trees, initial packet, schemas,
retrieval rules and scoring apply. The historical run admitted 0/18
requests. The replay admitted 18/18 under the same rule.
The 18 dry-run slots recorded 30 provider attempts and zero GitHub
write attempts. Sol passed the known-case control. The report recommends a separate reserved case. Production activation remains disabled and
PR #951 remains a draft.
Preregistration · Deterministic controls ·
Trial ledger · Causal audit ·
Report and historical comparison · Deterministic CI · Commit checks
#892 Sol on-demand viewport evidence
Sol starts with the same three receipts in every arm. The viewport
selector and listener are withheld. An admitted on-demand request runs
against the pinned tree through the common Git adapter. The second-call
control receives status without new source.
The 18 dry-run slots recorded 30 provider attempts and zero
GitHub write attempts. Sol did not pass this known-case retrieval control. All requests named the correct file but requested lines 1–88. The 80-line admission limit blocked every read. The initial prompt described a bounded read without stating the numeric limit. Production activation remains
disabled and PR #951 remains a draft.
Preregistration · Deterministic controls ·
Trial ledger · Causal audit ·
Report · Deterministic CI · Commit checks
#892 Sol verdict control with viewport identity
The final-only verifier receives the same seeded candidate, anchor and
schema as the previous Sol control. Only S1 expands from lines 26–32
to 21–32. Both receipts were verified against their pinned Git trees.
The updated evaluator requires cited viewport identity and checks the
causal explanation for the new mousedown and selection decision.
6 one-call dry-run attempts and zero GitHub write attempts.
Sol passed the prepared-packet control. The report specifies a separate test for independent discovery of the viewport link. The historical results use the previous range rule.
The PR remains in draft and production activation stays disabled.
Preregistration · Deterministic controls ·
Trial ledger · Causal audit ·
Report · Deterministic CI · Commit checks
#892 final verdict with identical complete evidence
The historical matched-source ledger groups its four rejections. The exact
failed checks are indeterminate. The new final-only schema binds candidate,
revision and anchor in the runner and offers four receipt aliases as the
only citation choices. The preflight checked source identity against the
historical ledger and verified byte-identical inputs within each tree.
12 single-call dry-run attempts and zero GitHub write attempts.
Neither profile passed this control. Luna omitted one or more required link citations on every
trial. Sol's inconclusive N1 trial identified viewport selection, which the
historical packet did not show directly. All attempts retained the anchor
and had measured usage within the budget. This result covers judgment on
prepared evidence for the known seeded candidate. Automatic recovery and
detector handoff are separate.
The PR remains a draft and production activation stays disabled.
Preregistration · Frozen manifest ·
Deterministic controls · Trial ledger ·
Report · Deterministic CI · Commit checks
Luna detector with paired #892 verifiers
One Luna detection call per pinned tree produced the handoff before either
verifier ran. A missing hypothesis uses a labeled seeded replay. Both
verifiers receive the same hypothesis, anchor and initial evidence. The
experimental adaptive arm permits two typed reads under one shared budget.
The matched-source control gives both models identical complete source.
The report distinguishes whole-flow performance from judging the same
sources, and records failed and unmetered attempts. #892 is a known-case
diagnostic. The PR stays in draft and production activation remains
disabled.
Preregistration · Runner controls ·
Detection ledger · Frozen candidates ·
Trial ledger · Report and recommendation ·
Deterministic CI · Commit checks
Reserved #892 common Git diagnostic
The reserved pair checks whether the first fresh pointer click works after a
drag is released outside the tab bar. The browser control observed one
selection request on the original and zero on the one-line mutation in all
four mode and direction combinations. Each model ran 18 dry-run slots using
the corrected common Git adapter with the same candidate and initial packet
across arms.
The counts require the expected verdict, exact anchor and proved budget.
The on-demand gate additionally requires the decisive source in all six
slots and a higher count than both controls. Neither profile met the gate for full-review evaluation.
The PR stays in draft and production activation remains disabled.
Preregistration · Independent control ·
Trial journal · Profile report and failed stages ·
Deterministic CI · Commit checks
GPT-6.1 Sol automatic #913 replay
The two typed requests that produced the prepared #913 reference went
through the automatic runner in a model-free control. It delivered
the form, parser and precision decoder with exact pinned receipts.
The six measured calls used those frozen second prompts with Sol,
low effort and the prepared diagnostic's verdict schema and budgets.
refutedconfirmedCounts require the expected verdict, a valid decisive citation, the
exact anchor and demonstrated budget. Sol reproduced both 3/3 results and met the gate to try a newly
reserved pair.
The PR stays in draft and production activation remains disabled.
Preregistration · Frozen packets ·
Six-call journal · Report ·
Deterministic CI · Commit checks
Automatic quantity chain and pagination oracle
The #913 dry-run derives the source chain from the selected anchor and the
request. The TypeScript checker ties the input and submit callbacks to
the imported parser and the typed precision decoder. All ten historical
requests delivered the three revision-bound receipts to a simulated
verifier. The largest complete packet was 12,658 bytes of the 15,500-byte
limit. There were zero model calls and zero GitHub write attempts in the
replay. With the pinned decoder and component callbacks in a Lit shim,
H1 accepted both six-place inputs and H2 rejected both.
Implementation ·
Replay ·
Consumer observations
The revised #880 oracle records page replacement on P1 and P2. The
label-only mutation suggests accumulation and conflicts with the pinned
navigation label test. The accumulation finding is inconclusive on P2
because an independent requirement to retain prior rows is missing. The
original remains refuted. Historical pilots retain their frozen scores.
Oracle and reproduction ·
Deterministic checks ·
Commit checks
Production activation remains disabled.
Prepared evidence second-call diagnostic
The four historical second-call prompts match their recorded SHA-256
digests. The preregistered dry-run replayed them and the prepared-chain
packets in fresh closed sessions with the same candidate, anchor and
response schema per revision. The 48 slots include 45 valid responses,
one citation integrity failure and two unmetered timeouts. The GitHub
write ports recorded zero attempts.
Preregistered protocol ·
Frozen packets and prompt hashes ·
Trial journal ·
Comparative report
Usable verdicts require an exact anchor, the decisive receipt and proved
budget. Counts are out of three, historical → prepared.
For #913, Sol's three prepared mutant confirmations cite the form path
and the adapter that admits precision six. Luna improved mutant
confirmation and falsely confirmed all three prepared originals. For
#880, Sol cited the button-to-controller path but still left the
mutant inconclusive. The safe premise codes point to page replacement
and the product promise of accumulation. This was a prepared-source
diagnostic. Automatic retrieval and the separate reserved-pair
advancement gate remain pending. #918 stayed outside the matrix and
its read result remains conditional on a persisted retired schedule
that retains its slot. The PR stays in draft and production activation
remains disabled.
Premise signals and interpretation ·
Separate #918 audit ·
Traceability matrix
All 74 focused tests passed and the code graph was updated. The
commit hook passed build, lint and 18,322 tests.
Deterministic CI for
4fe9a40e8·Final SHA checks
Partial common Git diagnostic v1
The versioned runner uses the corrected common Git adapter and preserves
the frozen pilots. Its simulated verifier received the decisive fragment
on all ten original #913 requests, including the six partial responses.
Both calls respected their complete budgets. The largest second packet
was 12,712 bytes. The mutation ports recorded zero write attempts.
Runner · Ten simulated controls
The frozen dry-run matrix used #913 as the known regression and #880 as
the reserved TypeScript pair. It records all 72 slots, with 68 completed,
four failed, zero unmetered attempts and zero GitHub write attempts.
The closed-session gate rejected one unexpected MCP event on Luna.
The journal preserves the event type and integrity errors.
Preregistration ·
Raw trial journal · Comparative report
Neither profile meets the reserved gate for full-review evaluation.
On #880, Luna recorded zero decisive recoveries and citations, and two
correct on-demand verdicts. Sol recovered and cited two decisive receipts
and returned one correct on-demand verdict. All selected anchors were
exact. For the known #913 regression, Sol recovered and cited all six
decisive receipts but returned only three correct verdicts.
Per-profile advancement ·
Traceability
The separate #918 audit shows that the reviewed fixed-schedule creation
and state-change commands start active and reject retirement as a
destination. The SQLite result is conditional on the seeded persisted row
and retained slot. Auditor-selected fragments demonstrate bounded packet
construction. This evidence stays outside the model matrix.
Separate reachability audit
The 71 focused tests, freeze checks and Graphify update completed.
The deterministic CI Check was dispatched on this head. Automatic
Copilot and Setup Platform Smoke checks remain unrun because of
[skip ci]. This PR remains draft and production activation is disabled.Deterministic CI Check ·
Checks for
5aed48f77Bounded Git packing and T2 packet audit
On the pinned #913 tree, adding the broader
taskQuantity(lookup made thefrozen adapter lose a valid declaration receipt. The successor bounds
each match window before merging and retains valid receipts when auxiliary
lookups exceed a budget. Integrity failures still withhold the result.
All ten recorded requests return the decisive source, compared with one
before. Six responses retain partial per-query outcomes.
Regression tests ·
Ten request results
The three historical Sol T2 prompts match the recorded hashes. The missing
source links were the concrete slot read, persisted state decoding and the
returned action branch. A separate source-only simulation with
auditor-selected ranges delivered those links in all three complete
packets. The largest used 15,329 of 15,500 bytes. The packet proves the
read path from a valid persisted retired row that still owns its slot.
The public transition to that state and automated discovery of the added
ranges remain unproved. SQLite execution stays with the evaluator.
Audit and conclusions ·
Historical and revised T2 packets ·
Evaluator-only observations
All 12 original #918 requests kept the chain, anchor and valid receipts
within the complete packet limits. The simulated runner recorded zero
write attempts. The 71 focused tests and Graphify update completed.
The frozen pilot checksums still verify. This iteration made zero model
calls. The report defines the checks for a new reserved non-Python pair
and leaves the run decision pending review.
12 complete packet measurements ·
Simulated runner
The deterministic CI Check was dispatched for this head. Automatic
Copilot checks and Setup Platform Smoke remain unrun because of
[skip ci]. This PR remains draft and production activation remainsdisabled.
Deterministic CI Check ·
Checks for
e99e87efbModule bindings and the reserved TypeScript diagnostic
At
580811b61, Python constructedAlphaDatabaseafterBetaDatabase = AlphaDatabasebut the resolver suppliedBetaRepo.active_key.The corrected prototype follows the direct alias and cites the binding.
A dynamic reassignment is unresolved and the simulated runner supplies
no effective implementation receipt. All 12 original #918 requests
retained the SQLite chain, anchor and valid receipts within budget.
Regression ·
12 deterministic controls ·
Simulated runner controls
The preregistration was committed before measurement. The dry run used
#918 as a known regression and #913 as the reserved TypeScript pair,
with common Git retrieval only for #913. All 72 planned slots have recorded
outcomes. There were 62 completed, eight expired and two failed slots,
37 unmetered attempts and zero write attempts.
Preregistered commit ·
Protocol · Raw journal ·
Report
Neither profile meets the threshold for full-review evaluation. For the
six on-demand #913 slots per profile, Luna retrieved decisive evidence once
and Sol did not retrieve it. Neither profile cited it or returned a correct
verdict. The selected anchors were exact in all six slots for each model.
The common adapter hit its fragment byte limit in nine of the 12 slots.
Per-profile scoring and limits ·
27-issue traceability
All 66 focused tests, specification validation and Graphify completed.
The deterministic CI Check was dispatched for the exact head. The automatic
Commit, Pull Request and Branch Sync workflows,
Copilot / Verificationand Setup Platform Smoke are unrun for this head because of
[skip ci].This PR remains draft and production activation remains disabled.
Deterministic CI Check ·
Checks for
d10251508Effective entry origins and language-independent retrieval
The pinned regression at
2d1d92c22ignored the reachablewire(get_alpha())branch and reportedBetaRepo.active_key.The corrected prototype traces the actual value at the argument use.
It reports
unresolvedwhen any relevant origin is unproved andambiguousfor competing proved origins. A unique proved origin candiffer from the Python annotation.
Executable regression ·
Baseline observation ·
Resolver tests
All 12 original #918 requests retained a sufficient chain to the SQLite
implementation in their original order, with the anchor and receipt
bindings intact. Each replay checked four entry origins. SQLite returned
zero actions on T1 and seven on T2 for both date-only and timed schedules.
The successor runner delivered the causal packets, exercised common Git
retrieval and exposed unresolved or ambiguous cases without an effective
implementation receipt. The runner exercised all rejection paths with
zero write attempts and zero real model calls.
12 replay records ·
SQLite controls ·
Runner tests ·
Simulated exchanges ·
Report and reproduction
The owning SDD separates fragment provenance from effective-route
attribution and requires a reserved non-Python pair in the next diagnostic.
EV-07 compares both models and qualifies each proposed profile independently
with explicit maintainer approval before enablement. The full-review and
174-case corpus thresholds remain in force. The traceability matrix
separates the SQLite control, replay, simulated delivery and pending model
evaluation.
SDD amendment ·
27-issue traceability
All 63 focused tests, specification validation, the frozen preflight and
Graphify completed. The deterministic CI Check was dispatched for the exact
head. The automatic Commit, Pull Request and Branch Sync workflows,
Copilot / Verificationand Setup Platform Smoke are unrun for this headbecause of
[skip ci]. The PR remains draft and production activationremains disabled.
Deterministic CI Check ·
Checks for
580811b61Call-site attribution and simulated causal runner
The resolver at
232b8eb35attributed a later assignment toInspection(store)and selected
BetaRepo.active_key. The corrected prototype evaluates theassignment at the argument use. The late assignment is unresolved, a
dominating prior assignment resolves, and competing branches are ambiguous.
Executable baseline reproduction ·
Baseline observation ·
Resolver tests
The successor runner exercised both calls with a simulated verifier. It
delivered the same initial evidence plus five bound causal receipts for
each tree, preserved the anchor and kept the combined packet within
budget. It rejected a second request, a foreign receipt and an oversized
packet. Legacy typed retrieval remains available. The tests recorded zero
write attempts and zero real model calls.
Runner integration test ·
Packets delivered to the simulated transport
The separate replay attested sufficient source chains for all 12 original
#918 requests. SQLite returned zero actions on T1 and seven on T2 for both
date-only and timed schedules. The report includes the reproduction commands.
Report ·
Replay journal ·
SQLite controls
All 56 focused tests passed locally, and the frozen runner preflight and
Graphify update completed. The commit uses
[skip ci]to avoid automaticmodel workflows. Automatic PR and commit checks including
Copilot / Verificationand Setup Platform Smoke remain unrun for thishead. The deterministic CI Check was dispatched for the exact SHA.
This PR remains draft and production activation remains disabled.
Deterministic CI Check ·
Checks for
2d1d92c22Deterministic causal replay for #918
All 12 original requests returned
search-file-budgetatf1b782117.All 12 returned a sufficient source chain through the effective SQLite adapter
after the correction. The exact request, anchor, operation and pinned Git tree
were retained. The largest request opened 37 of 80 files and completed within
the four-second limit. The persisted SQLite control refuted the retired-schedule
premise on T1 and reached the fixed action branch on T2 for both date-only and
timed cases. The replay and tests invoked zero models.
Report and reproducible commands ·
Before · After with bound receipts ·
Focused tests · SQLite controls
The push omitted automatic model workflows. The deterministic CI workflow was
dispatched on the same head. This pull request stays draft and production
activation stays disabled.
Manual CI Check ·
Checks at
232b8eb35Bounded tree retrieval diagnostic
The prototype now requires membership in the same contiguous diff block
before relocating a candidate. The closed verifier cannot change the frozen
anchor. One typed request can resolve an exact filename or literal within a
bounded pinned Git scope and return complementary receipt-bound fragments.
The offline #869 and #875 controls passed before any measured call.
All 72 replay slots and all provider attempts are retained. The held-out
#918 decision separates decisive retrieval, citation and correct metered
verdicts across the three arms.
The PR is draft and production activation is disabled.
Design freeze ·
Preregistration commit ·
Protocol ·
Deterministic tests ·
Runner parity test ·
Attempt journal ·
Report ·
Reproduction ·
Checks at
f1b782117On-demand evidence diagnostic
The application owns one typed follow-up and validates the final citations before
writes. It normalizes eligible anchors on the pinned diff before freezing the
candidate. The owning SDD defines independent qualification and explicit
maintainer approval for each profile. Intact mixed reviews can publish
confirmed findings while incomplete verification blocks clean approval.
Owning SDD ·
Reconciliation SDD ·
Framed review SDD
The frozen replay completed 72 slots and 100 provider calls. Two slots failed
response validation. Both models returned zero decisive citations for the
held-out #869 pair. Luna scored 1/6 on demand, 2/6 on the repeat control and 1/6
on the fixed packet. Sol scored 0/6 on all three. The measured time and token
ceilings held. Neither profile earned progression to full-review evaluation.
Production remains disabled and this pull request is draft.
Preregistration commit ·
Protocol · Manifest ·
Attempt journal · Report ·
Reproduction ·
27-issue matrix
The specification and catalog validators, focused pilot and approval suites,
local control probes and Graphify update passed.
Copilot / Verification ·
CI Check ·
Platform smoke ·
Checks at
e477e0e4bExpanded v4 pilot
Activation remains disabled. The 504 preregistered slots include 475 completions, 4 failures and 25 aborts. Replay resumed from 207 saved slots with the same frozen inputs. The independent Sol source supplement completed all 18 slots.
The baseline missed the preregistered reproduction threshold in full review. Incomplete comparisons, missed positive exposures and unmetered calls also prevent qualification. The separate 174-case detection corpus remains a requirement. The replay recovered 25 Luna Source/CI slots after verifier timeouts, and full review recovered three. In the Sol supplement, the added exact-head source excerpts changed nine inconclusive mutant findings to confirmed and retained all nine refutations on the originals.
Final report and ledgers · Sol source supplement · Preregistered protocol · Current checks
Local checks passed for the 12 verifier-policy and adapter tests, 42 dry-run preflights, 18 predecessor prompt hashes, 134 evaluator tests, and the specification, documentation, workflow, build synchronization and evidence checksums.
The repository build and lint passed. The first test run passed 919 suites. The two suites that require loopback passed when rerun with loopback access.
Bounded v3 retest
Activation remains gated. The 216 preregistered slots include 161 completions, 12 failures and 43 aborts. The experimental arms now share a bounded diff projection and closed citation schema. The source/CI arm also supplies the unchanged pytest caller and the exact-head restoration test. The current arm keeps the production detector and literal verifier.
The evidence arm detected all nine positive exposures per model. Luna's six lost positives expired in the verifier before a completed provider turn. Sol left three inconclusive, and one confirmed pytest finding used a neighboring line. The observed overhead is lower, but incomplete attempts, positive preservation, exact anchors and baseline reproduction still prevent qualification. The unchanged corpus and production activation remain gated.
Preregistration commit · Protocol · Manifest · Results, ledgers and reproduction · 27-issue matrix
Verification at
864bbbac95d632818554303f78a2d47467912589Passed Copilot / Verification · Passed CI Check · Current platform checks · Passed preregistration verification
Earlier v2 pilot outcome
Do not advance to activation. Recorded 216 primary attempts and 144 more across the #859 and #861 expansions. The primary matrix retained 50 failures and one abort. End-to-end, the source-and-CI arm retained only one of nine positive controls per model, exceeded the input-token budget and still lacked sufficient historical baseline reproduction after expansion. Production policy binding and receipt emission remain gated.
Pilot protocol · Manifest · Comparison and reproduction · Measured ledger · 27-issue matrix
Verification at
5bf303fcdf854c6aa0bcd0457316a4656be56c82validate:build.0b984e8verified the SDD receipt and completed the progress assessment. The next official run also completed the assessment at1c85dd51. At the final head, the official check succeeded after reconciling the same SDD receipt and completing all four assessment batches.Passed Copilot / Verification check · Official assessment logs · Passed CI Check · Final Setup Platform Smoke · Verified pilot commit · Final PR checks · Verified scope recovery