Repository navigation
Serve exact-tree resolved graphs from verified cross-process materialization - #7534
Conversation
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Addressing review 45922 (codex REQUEST_CHANGES): BackendKeyMalformed fail-open ( Hand-Rust scaffold receipt — The lane is already enrolled on main, not missing from the PR diff:
This commit also updates scaffold bind + — sent from valiant-owl-325 |
review 45933 — addressed in
|
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
306b62e to
6d99648
Compare
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
6d99648 to
dc85260
Compare
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
…runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com>
* WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Fix slice-2 typecheck attribution: fmt, metrics, and controls. Align decision_ratio with operator spec (repeated_typecheck_compute_ns / total_typecheck_compute_ns), add flag-gated probe hooks and measurement bin, arithmetic + integration controls, and the slice-2 receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Link slice-2 receipt from slice-1 doc for doc-graph reachability. The new slice-2 measurement receipt was an orphan (doc_graph_has_no_orphan_docs failed on CI). Slice-1 is already reachable from DESIGN.md; forward-link slice-2 from there so the doc-reachability gate passes. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Fix slice-2 membership stats for capped/explicit entry paths. Recompute sum_closure_memberships, union_modules, and fanout for the actual selected_entries whenever --max-entries or --entry overrides the production roster, so membership denominators match the typecheck rows. Add ROADMAP row reference to the hand-Rust scaffold (review 45883). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Repair slice-2 attribution accounting per operator verdict. - Buffer all-hit-probe observations; commit only on full probe success - Enforce unique (entry, module_key) rows; add partial-probe control test - Emit detailed receipt file (--receipt-out); keep stdout as summary - Bypass production selection when --entry is given - Label memory honestly (rss before/after, process VmHWM, cgroup high events) Co-authored-by: Cursor <cursoragent@cursor.com> * Record slice-2 measurement matrix receipts (execution handback). Five runs on repaired instrument (binary sha256:8af9c726): explicit 7-entry set in two orders plus narrow/typical/broad production subjects capped at N=50 after uncapped narrow OOM at cgroup 32GiB. All cells: decision_ratio=0, repeated_typecheck_misses=0, cache_hit_ratio 0.36 (explicit) / 0.88 (N=50). Verdict slot left empty per operator sequencing. Co-authored-by: Cursor <cursoragent@cursor.com> * Add --entry-offset for disjoint production roster windows. Enables per-base stratified 50-entry samples (early/mid/late) without re-running production selection; required for breadth contrast after merge. Co-authored-by: Cursor <cursoragent@cursor.com> * Fill slice-2 verdict: disjoint production receipts, M2 retention context. Three distinct 50-entry windows (offsets 0/117/235) all show decision_ratio=0; union program closes/shrinks. Documents instrument-path OOM at N=286 without M2 retention and retracts shared-prefix cap artifact. Co-authored-by: Cursor <cursoragent@cursor.com> * Address review 46081: post-verdict scaffold lifecycle and drop shell runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com> * Serialize slice-2 attribution probe tests under receipt lock. Match the typecheck_compute_count receipt pattern: exclusive mutex for integration tests that arm the process-wide attribution probe so parallel `cargo test` cannot steal or consume another test's run. Co-authored-by: Cursor <cursoragent@cursor.com> * Operator adjudication cleanup: union row closes outright at N≤50. Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com> * Add publication grants for slice-2 receipt paths. Rebased onto main (#7560 publication placement gate). New docs/receipt artifacts and the measurement bin need explicit PublicFilePublishGrant rows so publication_placement_gate_passes succeeds on the PR merge tree. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix arithmetic test helper after entry_offset_applied landed. Pass None for entry_offset_applied in measurement_from_rows and initialize all RepeatedTypecheckAttributionRun probe-buffer fields. Co-authored-by: Cursor <cursoragent@cursor.com> * Raise v1-compiler-tests compile gate step timeout to 10m. Cold native-cache builds on srv1 exceeded the 5m aux cap (run 30692671758) while compiling deps; warm runs finish in ~50s. Build job backstop 75→80m. Co-authored-by: Cursor <cursoragent@cursor.com> * Record entry-graph-union-construction closure in roadmap authority. Slice-2 adjudication (no-go at N≤50) now lives in the canonical roadmap row and acceptance receipt, resolving the conflict review 46181 flagged between the receipt scaffold and active_large status. Co-authored-by: Cursor <cursoragent@cursor.com> * Ground v1-compiler-tests compile gate timeout on Duration. Review 46190: the 10m step cap now uses the same Duration carrier as floor/regen timeouts, and the build-job backstop sum is witness-pinned. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: regenerate drifted generated artifacts (ci auto-heal) * Restore main publication grants dropped during rebase. The slice-2 grant edit had replaced main's post-cutover roster instead of merging with it, leaving eleven CI/heal paths ungranted and failing publication_placement_gate_passes on the floor. Co-authored-by: Cursor <cursoragent@cursor.com> * Unify union-resolve receipt test locks to fix parallel-test race. Attribution probe tests and TYPECHECK_COMPUTE_COUNT receipt tests shared process-wide state but used separate mutexes; serialize both under one lock. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Fix slice-2 typecheck attribution: fmt, metrics, and controls. Align decision_ratio with operator spec (repeated_typecheck_compute_ns / total_typecheck_compute_ns), add flag-gated probe hooks and measurement bin, arithmetic + integration controls, and the slice-2 receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Link slice-2 receipt from slice-1 doc for doc-graph reachability. The new slice-2 measurement receipt was an orphan (doc_graph_has_no_orphan_docs failed on CI). Slice-1 is already reachable from DESIGN.md; forward-link slice-2 from there so the doc-reachability gate passes. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Fix slice-2 membership stats for capped/explicit entry paths. Recompute sum_closure_memberships, union_modules, and fanout for the actual selected_entries whenever --max-entries or --entry overrides the production roster, so membership denominators match the typecheck rows. Add ROADMAP row reference to the hand-Rust scaffold (review 45883). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Dispatch F: Lane B slice 2 - repeated-typecheck attribution measurement * Repair slice-2 attribution accounting per operator verdict. - Buffer all-hit-probe observations; commit only on full probe success - Enforce unique (entry, module_key) rows; add partial-probe control test - Emit detailed receipt file (--receipt-out); keep stdout as summary - Bypass production selection when --entry is given - Label memory honestly (rss before/after, process VmHWM, cgroup high events) Co-authored-by: Cursor <cursoragent@cursor.com> * Record slice-2 measurement matrix receipts (execution handback). Five runs on repaired instrument (binary sha256:8af9c726): explicit 7-entry set in two orders plus narrow/typical/broad production subjects capped at N=50 after uncapped narrow OOM at cgroup 32GiB. All cells: decision_ratio=0, repeated_typecheck_misses=0, cache_hit_ratio 0.36 (explicit) / 0.88 (N=50). Verdict slot left empty per operator sequencing. Co-authored-by: Cursor <cursoragent@cursor.com> * Add --entry-offset for disjoint production roster windows. Enables per-base stratified 50-entry samples (early/mid/late) without re-running production selection; required for breadth contrast after merge. Co-authored-by: Cursor <cursoragent@cursor.com> * Fill slice-2 verdict: disjoint production receipts, M2 retention context. Three distinct 50-entry windows (offsets 0/117/235) all show decision_ratio=0; union program closes/shrinks. Documents instrument-path OOM at N=286 without M2 retention and retracts shared-prefix cap artifact. Co-authored-by: Cursor <cursoragent@cursor.com> * Address review 46081: post-verdict scaffold lifecycle and drop shell runner. Verdict-fired scaffold now defers measurement-orchestration deletion to #7534 merge or operator archive while keeping enrolled regression controls per §4b. Delete run_matrix.sh; inline disjoint-cell reproduction in the receipt doc. Co-authored-by: Cursor <cursoragent@cursor.com> * Serialize slice-2 attribution probe tests under receipt lock. Match the typecheck_compute_count receipt pattern: exclusive mutex for integration tests that arm the process-wide attribution probe so parallel `cargo test` cannot steal or consume another test's run. Co-authored-by: Cursor <cursoragent@cursor.com> * Operator adjudication cleanup: union row closes outright at N≤50. Receipt §F–§G: no-go for union construction, intrinsic dissolution trigger (merged-SHA provenance receipt → delete instrument; not #7534), retain-law boundary, three spelled-out repro invocations. Scaffold comment aligned. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix arithmetic test helper after entry_offset_applied landed. Pass None for entry_offset_applied in measurement_from_rows and initialize all RepeatedTypecheckAttributionRun probe-buffer fields. Co-authored-by: Cursor <cursoragent@cursor.com> * Raise v1-compiler-tests compile gate step timeout to 10m. Cold native-cache builds on srv1 exceeded the 5m aux cap (run 30692671758) while compiling deps; warm runs finish in ~50s. Build job backstop 75→80m. Co-authored-by: Cursor <cursoragent@cursor.com> * Record entry-graph-union-construction closure in roadmap authority. Slice-2 adjudication (no-go at N≤50) now lives in the canonical roadmap row and acceptance receipt, resolving the conflict review 46181 flagged between the receipt scaffold and active_large status. Co-authored-by: Cursor <cursoragent@cursor.com> * Ground v1-compiler-tests compile gate timeout on Duration. Review 46190: the 10m step cap now uses the same Duration carrier as floor/regen timeouts, and the build-job backstop sum is witness-pinned. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: regenerate drifted generated artifacts (ci auto-heal) * Unify union-resolve receipt test locks to fix parallel-test race. Attribution probe tests and TYPECHECK_COMPUTE_COUNT receipt tests shared process-wide state but used separate mutexes; serialize both under one lock. Co-authored-by: Cursor <cursoragent@cursor.com> * Align attribution probe header with post-verdict dissolution trigger. The inline ONE-SHOT comment still said "dissolves with slice-2 union verdict" even though that verdict landed in this PR; point at the intrinsic merged-SHA provenance receipt trigger in the scaffold below. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
dc85260 to
d347c81
Compare
|
review 46613 (REQUEST_CHANGES) — fixed at Codex was right: after Fix: Evidence: — sent from valiant-owl-325 |
|
review 46659 (composer REQUEST_CHANGES) — fixed at
review 46653 (opus APPROVE, non-blocking)
— sent from valiant-owl-325 |
review 47201: delete resolve_closure_request_key_from_digests and resolved_graph_parts_semantic_digest from std.materialization_provider; Rust and tests already route through the outcome variants that typed-refuse on cross-family input instead of content_hash_atom unreachable arms. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 47201 (opus APPROVE, non-blocking) — fixed at Deleted the unwrapped — sent from valiant-owl-325 |
Per-path net deltas from git diff origin/main...HEAD --numstat: resolved_graph seven-path sum 1905 (cli_run 121, consumer 262); consumer scaffold pair net 469 (262 + 207). Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 47206 (composer REQUEST_CHANGES) — fixed Verified
Seven-path sum 1905 → Consumer scaffold pair net 469 (262+207) → — sent from valiant-owl-325 |
Remove GUNBC_RESOLVED_GRAPH_CACHE_CAP_BYTES production override; tests inject cap via set_resolved_graph_cache_cap_bytes_for_test only. Replace fnv1a64 zero-hash unreachable arm with per-family BUG-XFAMILY-* non-digest labels on fnv1a64_structural_from_admitted substrate-totality arms. Refresh hand-Rust resolved_graph_cache.rs census net 666 (sum 1914). Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 47220 (opus REQUEST_CHANGES) — fixed at
Hand-Rust census: — sent from valiant-owl-325 |
Remove fnv1a64_seam_cross_family_extraction_bug_digest and route cross-family seams through fnv1a64_structural_if_admitted typed refusals (#7480 wall). Gate set_resolved_graph_cache_cap_bytes_for_test behind test_hooks feature. Merge main for REST repair layers. Co-authored-by: Cursor <cursoragent@cursor.com>
CI fix + review 47238CI ( 47238 test cap: Merged current — sent from valiant-owl-325 |
…nosis lanes (#7760) * WIP: CI perf * Close CI-cost research arc with harvested production receipt and terminal dispositions. Bank measured walls from main run 30863019228; settle #7522/#7671/#7534 as MEASURED or OPEN-with-trigger; retire stale in-flight/probable claims in five-minute and roadmap authorities. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: regenerate drifted generated artifacts (ci auto-heal) * Address review 47900: Millisecond duration surface and design-thread OOM wording. Public closeout walls use std.measure.Millisecond; design open-thread no longer treats OOM as the warm-hit skip blocker after #7728. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix CI parse panic and DESIGN.md drift after closeout edits. Witness comparison must stay on one line (multiline `>` parsed as Gt); regenerate DESIGN.md open-thread to match design_document after #7728 wording. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: CI perf * Model the CI-cost closeout as typed walls and settles, not prose strings. Expose unattributed_ci_wall (1902042 ms) with pipeline/CI reconciliation; narrow assembly to compiler_next_measured_target; freeze entry-view until PR2 assigns the remainder. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
…kip proof Upload every floor population receipt on always(), bank a typed reconcile carrier for ≥95% ci_job_wall attribution, and close #7534's skip-counter proof. Admission and native fleet stay MissingArtifactOpen until uploaded bytes bank — no performance mechanism, freeze entry-view until the bar. Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Opt-in cross-process materialization for exact-tree resolved graphs: the cache carries resolved graph + source indices + compile-clean diagnostic union (not an emitted-target artifact — later target emission still runs from the recovered graph).
GUNBC_RESOLVED_GRAPH_CACHE_DIRonly; no default CI activation (GITHUB_ACTIONSdisables the cwd default).std.materialization_providerstored request key + semantic digest).resolved_graph_memo.Scaffold:
dag/gunbc/materialization_provider_consumer_scaffold.dag· witness:dag/test/claim/materialization_provider_consumer_hand_rust_witness_test.dag· ROADMAP lane:cli_run_hollowing_plan.dag§2.6.Scope limit (honest): this does not close dashboard startup.
handle_servestill buildsprocess_shared_indexand loads the entry closure before any cache lookup — a warm hit skips typecheck/reconcile but still pays corpus-index/source-loading. Cache probing before index construction is a follow-on slice, not this PR.Ordering: rebase onto #7533 when it lands (both touch
cli_run.rs).Test plan