Repository navigation
fix(code-index): fence stale progress boundaries - #4800
ScriptedAlchemy wants to merge 28 commits into
Conversation
|
Refs #4508 Reject foreign daemon, producer and sealed-source identity reports, even after a verified SQLite staging restart clears committed counters. Add a nonzero regression for the production progress authority.
|
Taking the #4508 producer implementation on this existing branch, starting from exact head 29c1258. File ownership for this pass: pre-seal capture/parse observation and its separately typed attempt authority, native graph writer progress, and the corresponding freshness/status consumers and regressions. Maintenance/sweep owners: please do not duplicate or rewrite this work; preserve all commits and use expected-head nonforce fast forwards. #4616 owns sealed-store reader/receipt/retention changes; I will keep graph writer changes separate and reconcile any overlap against the exact current heads. Existing boundary tests are not completion evidence. Refs #4508; no closure/merge claim, and #4776/Kev stays draft and #4763 stays read-only. |
|
Published commit Source changes
Verification performedThe original source was reconstructed byte-exactly and matched GitHub blob Still required: run Backend capture/parse and direct-seal/fallback graph producers remain owned by the active implementation pass above; this commit does not touch those files or claim to complete them. Refs #4508 only. Keep the issue/PR open pending full acceptance; #4776/Kev and #4763 remain untouched. |
Keep active polling for in-flight rebuilds and lexical artifact restores, even when the serving envelope or previous generation is already ready. Do not render an in-flight build without a report as an idle pipeline. Add polling regressions and DOM transition coverage for unreported work, committed progress, completion, and bounded artifact restoration. Refs #4508
Carry daemon/producer epochs, generation, last-progress time, committed text counters and blocked reason into MCP search and graph-read summaries. Distinguish absent progress from reported zero work without inventing pre-seal authority. Add nonzero rendering regressions for repeated reads, blocked recovery and restart/remount epoch scope. Refs #4508. Producer instrumentation and cold/restart end-to-end acceptance remain incomplete; no Bazel execution is claimed.
|
Published 0fc10fe as a non-force fast-forward with expected head 9f3bfe0, preserving the concurrent dashboard commit and all earlier commits. This is a narrow production MCP propagation fix, NOT completion of #4508. Search and graph-read summaries previously dropped the daemon's progress authority, epoch, last-work timestamp, committed counters and blocked reason. They now carry generation + daemon/producer incarnation, progress epoch, the original last_progress_micros, committed TEXT artifact counts/bytes and the typed blocked reason. Text counters are explicitly labelled as text, not native graph writes. An in-flight rebuild without a producer report renders progress=unreported rather than inventing a pre-seal generation/count/clock. Four new tests exercise the actual search_freshness/freshness_lines renderers with nonzero counters: cold_unreported_work_has_no_fabricated_progress_authority; repeated_reads_do_not_turn_elapsed_time_into_progress; blocked_and_recovered_reports_preserve_work_and_name_the_real_phase; restart_and_remount_keep_epoch_scope_visible. Existing coverage and restore/park tests are retained. These are renderer regressions, not cold-build/restart end-to-end proofs. Validation: diff inspected against exact parent; no Rust build/test/check/codegen has been run locally. This session has no Bazel/Bazelisk executable or checkout-capable network path (git fails proxy DNS), and the public download path also failed. No Cargo, alternate Rust toolchain invocation, generated-contract hand edits, infrastructure changes, or test bypasses were used. Exact-head native CI run 42439812291 is queued; no pass is claimed. Independent PR-maintenance review requested for 0fc10fe, especially text-vs-graph attribution, owner-scoped epochs, absence of read-time clock fabrication, and the renderer assertions. Keep this PR unmerged: separately typed pre-seal capture/parse production instrumentation, direct native graph durable-write instrumentation, and cold/interrupted/restarted end-to-end acceptance are still unfinished. The earlier unreferenced producer-draft commit 95aac68 is incomplete and must not be adopted; no producer draft was pushed onto this branch. Refs #4508. #4776/Kev remains draft; #4763 untouched. |
Refs #4508. Keep pre-seal work under separately typed attempt authority, not a fictional sealed generation. Capture on clean-HEAD and dirty paths; instrument actual staged parser-backed file work; reject stale, duplicate and delayed callbacks. Durable native-graph work, codegen/wire and restart e2e remain open.
|
Published
Not claimed: no local Rust/Bazel execution (this environment lacks Bazel/Bazelisk and checkout-capable network); exact-head CI run 42447419869 was queued at last check. The attempt slot is not yet surfaced through the freshness wire, CLI/MCP or dashboard. Native durable graph writer/page progress and end-to-end restart/resume, stalled and blocked/recovered transitions are still required, as are hosted Bazel tests and independent review. Do not treat these three tests as #4508 completion. #4776 remains draft; #4763 was untouched. |
…ied compact segment Refs #4508. Distinguish real WAL-settled page transactions from adopted receipts; direct seal is one compact artifact, not invented durable pages. Add nonzero persistent write/replay/close-reopen regression. Status wiring and restart E2E remain open.
|
Follow-up producer commit This targets the actual native graph writers, not
This is real producer instrumentation, not yet the progress-status pipeline. Neither the native events nor the new separately typed pre-seal attempt slot are wired to freshness/CLI/MCP/dashboard yet. No local Bazel/Rust test has been executed; wait for an actual exact-head hosted run, not queued/skipped jobs. Full cold + restart/resume, stalled, blocked/recovered end-to-end evidence remains required. Refs #4508, not Fixes; keep PR and issue open, and do not touch #4776 or release #4763. |
Refs #4508. A concurrent verified segment may be adopted after a losing staging install; only the writer that actually installed a new directory emits the native durable-segment event. Add real sealed-container collision, cleanup, and verified-reopen regression. Status wiring and interrupted-restart acceptance remain open.
|
Published follow-up b329b67 on this same PR with a checked non-force fast-forward from exact parent Native writer correctness: the compact sealed-store path previously emitted Scope coordination: this touches only the native compact writer-install/reporting block of Not acceptance: no local Bazel/Bazelisk or checkout-capable path; no Rust compile/format/test result claimed. Exact-head CI 42450800548 was queued when last sampled. Pre-seal typed attempt and native durable events still require daemon → CLI/MCP/dashboard status wiring and real cold/interrupted-restart/stall/blocked/recovered end-to-end tests. Keep #4508 and this PR open. #4776/Kev remains draft; #4763 untouched. |
Newly confirmed CI blocker — exact #4800 head
|
Refs #4508 Carry the real capture and parse attempt across the mounted scheduler, canonical status wire, CLI wait display and MCP search. Preserve attempt owner, epoch and work timestamp independently of sealed generation data. Add nonzero wire and renderer regressions. No generated-contract edits.
|
Published I also checked master, current root AGENTS.md (repository tree contains no nested AGENTS.md), paginated issue comments, PR discussion, reviews (none), the exact earlier CI jobs, and competing #4508 PRs. The preexisting immutable 88-character Independent review requested on the public wire change, whether pre-seal attempt expiration correctly fences old owners, correct graph-vs-text attribution, and all fully mounted paths. #4616/#4804 reader-retention ownership is untouched; #4776/Kev remains draft and #4763 release remains read-only. Do not merge or close on this partial evidence. |
|
Continuing #4508 on exact head 2dc0150. Taking the CLI first-generation wait implementation and its behavioral tests: the live wait currently resets its stall timer merely because rebuild_in_flight/Restoring/Verifying stays true, even when all producer counters are frozen. I am replacing that activity-as-progress inference with observed work tracking, retaining typed refusals and leaving daemon work running when the client stops waiting. Maintenance/sweep owners: preserve these edits and all existing commits; no duplicate/rewrite/force update. Native graph callback/status integration and Bazel-generated dashboard contracts remain separate unfinished acceptance, not made complete by this slice. #4804 owns sealed receipt/retention hunks, #4796 owns graph source reader work; neither is changed by this CLI slice. Refs #4508 only; #4776 remains held draft and #4763 read-only. |
|
Refs #4508 — preserving the active #4800 branch by expected-head non-force fast-forwards only. Published after 2dc0150:
Independent review flag for omitted dashboard generated decoder is valid and unresolved; Rust-owned contracts must be regenerated and checked using Bazel, not manually patched. The prior immutable 88-character commit subject in de2d613 still blocks repository commitlint; under the explicit no-rewrite/no-duplicate/no-bypass instruction it cannot be repaired by another additive commit. No Bazel/Bazelisk or network checkout here, so no local Rust build/test/codegen passes are claimed. Exact-head CI on c56d895: https://github.com/ScriptedAlchemy/tracedecay/actions/runs/42463162959 (queued at this check). Native graph page/compact-segment writes are currently real low-level production events, but their typed owner-scoped daemon -> CLI/MCP/dashboard freshness propagation and the cold/restart/stall/blocked/recovered end-to-end qualification remain unfinished. Keep #4508 open, keep this PR unmerged pending proven acceptance. Please review the new retained-source guard and CLI stall behavior against any concurrent sweep edits; protected draft #4776 and release #4763 remain untouched. |
Refs #4508 Import the production phase type and require actual capture, parse or text counters to advance before renewing init --wait's silence window. Keep independent producer watermarks and reject retired-owner reports. Empty retries, phase-only changes, blocked/recovered metadata and adopted restart counters are not new work. Preserve uninstrumented graph phases as unknown rather than reporting a fabricated writer stall. Add six nonzero behavioral regressions, including three tests through the real wait loop, and strengthen the existing empty-retry expectation. No Bazel execution or complete cold/restart acceptance is claimed.
|
Published bc417b9 with a non-force expected-head fast-forward from c56d895. Preserved all four concurrent commits (including retained-capture guard ownership), and changed only crates/tracedecay-cli/src/commands/index.rs. The uploaded blob exactly matches the locally reviewed 1699838bfaf5b4d1ed61cdf3599a9d665beafb2a. Production repair: the concurrent CLI code used CodeIndexBuildPhaseV1 without a production import; that import is restored. More importantly, comparing the whole epoch/timestamp marker renewed init --wait on metadata alone. The wait now advances on real capture/parse counts or text-work counters, retaining independent watermarks and rejecting retired-daemon reports. Empty retries, phase entry with zero work, blocked/recovered metadata and adopting unchanged counters after restart do not renew the deadline. Actual resumed work does. Uninstrumented native graph/index/verification phases remain unknown, not fabricated writer-stall evidence. Six new regressions use nonzero observations. Three drive the actual hold_until_first_generation loop through canonical serialized status: frozen counters with newer epoch/time must refuse before an arranged later Ready; empty retries after captured work must refuse; actual capture -> parse -> text commits must keep waiting until the reached proof. Three exercise deterministic clock boundaries for blocked/recovered metadata, delayed capture callbacks, and daemon restart adoption. The peer retry test is strengthened to require positive resumed work, not merely a new attempt ID. Existing tests and timeout budgets are preserved. Independent review requested on bc417b9, specifically work-vs-publication epochs, the coverage gaps, restart adoption and all six new tests. Required native target: bazel test //crates/tracedecay-cli:tracedecay_unit_test --test_output=errors. No Rust build/test/check/codegen ran locally: Bazel is absent and checkout DNS failed; no Cargo or alternate Rust checker was used. No native pass or end-to-end daemon/restart proof is claimed. This remains Refs #4508, not completion: native write observations still need typed status propagation, generated dashboard contracts need Bazel regeneration, and full cold/interrupted/restarted acceptance remains outstanding. The immutable de2d613 commitlint blocker remains; history and gate policy were not changed. #4776 and #4763 untouched. |
Refs #4508 Record actual completed compact builder windows during cold native graph publication. Distinguish accepted in-memory rows from durable page and verified segment commits; do not emit status-poll heartbeats. Add a nonzero real-manifest regression covering monotonic entity/relation windows and cancellation without a fabricated completed window. This remains only operator tracing; owner-scoped status propagation, Bazel verification and full cold/restart acceptance are still required.
|
Refs #4508 — published commit Actual native direct-seal producer improvement: the cold dependency-free manifest writer now reports bounded, nonzero A new production-writer regression exercises a real 1,101-entity/1,143-relation manifest on a one-worker pool, requires multiple monotone accepted windows and exact final counts, and injects an actual cancellation in the second entity window to require only the first 512-row observation (no relation/full-generation fabrication). Only Not acceptance yet: these real writer events are still operator tracing, not an owner-scoped daemon freshness authority; |
Refs #4508 Provide an explicit graph publication observer and emit authenticated native page completion only after the real transaction settles. Replayed receipts do not count as work. Preserve graph operation context across commit grants. Add a nonzero real-persistent-stage regression. Status bridging remains open.
Refs #4508 Report accepted direct-seal encoding windows as non-durable physical work. Report only installed and digest-verified native compact segments as durable. Replay adoption and losing installs must not claim fresh writes. Add a real writer/reopen regression and correct the test module import boundary. Graph-status and daemon propagation remain incomplete.
Refs #4508 Bind real native graph page and compact writer events to one leased worktree publication attempt. Preserve physical encoding separately from durable stage-page receipts and digest-verified compact installs; carry owner-scoped work epochs and original timestamps through daemon freshness, CLI wait and MCP summaries. Add nonzero slot and wire regressions. Dashboard generated contracts and full Bazel restart acceptance remain open.
|
Refs #4508 — published This fixes the previously unconsumed native graph observer port, not another read-side phase projection. During actual daemon graph publication, both the pre-decode sealed build and fallback activation now create a generation/digest/daemon-incarnation/producer-incarnation/attempt-sequence bound observer. The existing graph-db writer invokes it for real accepted compact encoding windows (physical, not durable), actually receipted native stage-page writes, and installed/reopened digest-verified native compact segments. The adapter threads the callback from the mounted worktree through CodeGraphSeatLeaseV1 into the real GraphPublicationOperationContextV1. A retired/restarted attempt cannot overwrite the successor; duplicate/out-of-order/zero-work events cannot refresh the original work timestamp. Native graph progress is a separate typed authority, not text committed page counts. The daemon lock-independent freshness reader publishes these owner-scoped native work counts/epoch/time, and the CLI init --wait and MCP graph/search summaries consume them. init --wait now measures native graph work only after an actual observed callback and cannot infer a stall from a phase label alone. New nonzero Rust regressions cover real-vs-durable attribution, replay deduplication, restarts/stale attempts, generation identity, wire roundtrip, CLI stall evidence and MCP rendering. These tests are published source, NOT Bazel-executed. No native test pass or independent human review is claimed; please review observer lifecycle, count monotonicity, and callback propagation. Exact-head CI #42474443677 was queued at inspection. This is still PARTIAL acceptance. Rust-generated dashboard contracts/decoders and actual React display must be regenerated using Bazel (never hand edited), and a cold first-build + interruption/daemon restart + blocked/recovered + stalled/writer-silent end-to-end run is still required. The preexisting immutable 88-character de2d613 commitlint ancestry failure remains a mandatory gate and cannot be corrected by an additive commit without violating no-rewrite/no-duplicate restrictions. Do not merge or close #4508. #4776/#4797 remain draft; release #4763 untouched. |
Refs #4508 Once actual direct-seal encoding windows complete, the single native compact-container write and digest verification have no intermediate progress callbacks. Mark that window unknown rather than timing it out as a stalled publisher. Prefer active native graph work in status output; add a nonzero regression for the final uninstrumented writer phase. Bazel and full daemon restart acceptance remain unverified.
Refs #4508 Carry the immutable manifest relation count on every accepted compact row window, including an actual zero count. The owner-scoped progress snapshot therefore knows relation work remains after entities finish. Do not suspend init --wait stall detection before the first relation window. Preserve unknown final compact container writes as uninstrumented. Strengthen real native writer and progress-slot tests and add an observable frozen-relation-window regression. Bazel tests are pending.
|
Refs #4508 — published Concrete native progress bug fixed: review thread relation encoding stalls go undetected correctly identified that a completed entity stream with Nonzero regressions published: the real native sealed-container observer test requires the bound 9 on both entity and relation observations; the native progress-slot test requires a known 1,143-relation bound even while zero relations are encoded and refuses a mismatching subsequent 9,000-relation callback without renewing progress; a new deterministic These are source assertions, not executed Rust tests. No local Bazel/Bazelisk or checkout-capable DNS is available; no Cargo or stand-alone Rust toolchain was used. New exact-head CI run 42475944328 was queued when checked; the preceding workflow was cancelled, not green. Please independently review the source-bound propagation, zero-relation behavior, and race/stall semantics. |
Refs #4508 The real sealed-graph writer uses a fresh one-shot commit context after journal classification. Preserve its generation-bound native observer there instead of silently discarding compact encoding, durable stage-page, and verified segment observations. Keep the distinct commit probe/grant. Exercise the actual persistent sealed publication path with nonzero native encoding and a verified compact segment, then verify idempotent replay emits no new native work. This is not cold daemon/restart acceptance.
|
Refs #4508 — published Production root cause: the original Falsifiable production regression: Validation status: source and exact commit ancestry reviewed; no Bazel/Rust build, test, format, or codegen ran locally because the container has no Bazel/Bazelisk and cannot resolve the checkout host. Exact-head hosted CI #42481271346 was queued at inspection; no pass is claimed. Independent PR-maintenance review requested especially for second-context observer inheritance and exact native-event behavior. Do not merge or close: dashboard generated contracts/React display, real daemon cold/restart/stall/blocked recovery E2E, current-head nonzero Bazel/native results, and the unchanged historical commitlint blocker are outstanding. Keep #4776/#4797 draft; release #4763 read-only. |
Refs #4508 An initial sealed graph publication can emit a verified native segment, then a decoded-graph activation reopens the same head without writing. Preserve the original real work and timestamp until activation produces a new physical write; reject stale and invalid callbacks on both paths. Exercise the real daemon freshness/search journey through cold generation, graceful restart, and a new post-restart generation. This is not crash or interruption-resume acceptance. Bazel execution and dashboard generation remain required.
Refs #4508 An active native graph attempt with zero actual work used to fall through to an uninstrumented phase and clear the wait silence window forever. Observe its owner as an uncredited zero-work baseline, timing out sustained silence while preserving concurrent real text progress and the monolithic compact-write exception. Add nonzero serialized status wait and deterministic work-handoff regressions. Move the reported inline import to module scope. Bazel/native execution remains unverified.
|
Refs #4508 — published New production no-progress defect repaired: an active native graph attempt whose first encoded-row window or durable staging page never completed had Falsifiable regressions: a real serialized Not verified: No local Bazel/Bazelisk or checkout-capable GitHub DNS path. New source/tests have not compiled or run; exact-head hosted CI is queued. Please independently review first-native-work liveness, the text/native handoff, and actual nonzero Still open: canonical Bazel-generated dashboard schema/SDK/types/decoders and real React rendering, full physical daemon kill/resume/blocked-recovered acceptance, exact-head native tests and independent approval. Immutable ancestor |
Refs #4508 Exercise a real paused first-generation parse through physical daemon status, hard-kill before any seal, then restart and require a verified native graph segment and a readable newly sealed generation. Polling while held must not fabricate a progress epoch. Bazel execution and broader interrupted-stage acceptance remain outstanding.
|
Refs #4508 — published Physical cold-crash/resume regression (source published, not executed): New Verification limit: The integration regression has not been run under Bazel. The authoring runtime has no Bazel/Bazelisk or checkout-capable network path. Exact-head CI #42491276147 is queued; no Rust, native macOS or end-to-end passing result is claimed. Please independently review the new test's physical hold/restart setup and whether the pending native graph attempt survives the correct readiness boundary. The preexisting Still not #4508 completion: dashboard generated schema/types/decoders + real React progress UI need Bazel regeneration; full production blocked/recovered and all-phase stall/restart acceptance, nonzero exact-head tests, and human review remain outstanding. |
Refs #4508 Exercise the real persistent native graph stage, cancelling after the first receipted entity page and reopening the store. Require only the newly committed relation page to emit a write event, then verify the recovered graph digest and silent idempotent replay. Import native work types explicitly in the graph-db test module.
|
Published This is a concrete native-writer restart acceptance repair in Validation: regression source is published, NOT Bazel-executed locally; this runtime still has no Bazel/Bazelisk or checkout-capable GitHub DNS. Exact-head hosted CI was queued at inspection; no native pass, formatting pass, independent approval or full #4508 acceptance is claimed. Please independently inspect post-commit callback semantics, WAL reopen, and two-stage replay correctness. Important remaining acceptance: Bazel-generated dashboard schema/decoder/SDK, React preseal/native graph progress, physical interrupted/recovered end-to-end, blocked/recovered status, and nonzero exact-head Bazel/native CI. Immutable commitlint ancestry blocker is unchanged; no rewrite/bypass/duplicate PR, and no protected #4776/#4797 or release #4763 modifications. |
Refs #4508 Retain actual native progress on query-driven graph activation by binding its observer to the mounted scheduler's incarnation and sealed graph digest. Preserve the distinct write-attempt boundary through activation. Remove unused legacy staging and sealed-container wrappers; call the real observed production implementations from existing tests. Fix the missing stage plan observer initializer and both updated graph activation callers. No assertions, checks, or validation gates are weakened.
|
Refs #4508 — published production/CI repair Fresh hosted Bazel evidence that required repair: On the previous exact
Published solution: Remove both redundant writer wrappers without This is a compilation-path repair and real production observer propagation, not proof of full #4508 acceptance. No local Bazel/Rust tests/codegen were executed (no Bazel checkout/runtime here); current-head CI #42504825853 is pending. Please independently review native progress ownership in ignored-dependency activation, retention of real graph writer callbacks, the removed facades, and the nonzero test execution once CI completes. The historical immutable |
Summary
Refs #4508 — partial correctness repair, not a complete fix. This replaces closed PR #4795 without rewriting, force-pushing, or deleting its branch/history. Repository-gates CI rejected immutable commit
9dca677on that PR because its header is 75 characters (72 maximum). The exact same two source/test file blobs are reapplied as one new ordinary commit from master91c72aba7750a398dd28e83d64bf0c6d6fef4172, with a compliant header.Implementation
Ready.Readytransition to clear a blocked status.Validation gates
No Bazel execution is claimed in this environment; it has no Bazel toolchain or repository checkout. Hosted CI must execute native Rust tests for this exact head (e.g.
bazel test //crates/tracedecay-code-index-runtime:unit_test --test_output=errors) and all applicable gates. The workflow title'snative=nonedenotes no optional dispatch-only macOS/Windows native-target override. The ordinary ready-PR Linux CI still uses Bazel (bazel test --config=ci), and its actual job result must be inspected; neither its presence nor its title proves a Rust test pass. Independent human review is not recorded. Do not merge based on static checks alone.Remaining #4508 scope
Cold pre-seal capture and parse progress are still absent; native graph page/segment publication does not report committed milestones. End-to-end cold + resumed status polling, final phase transitions, and stall/refusal behavior are not proven. Keep issue open, do not mark
Fixes #4508until all acceptance is demonstrated on master. This PR stays distinct from protected draft Kev/decision-model #4776. No release, tags, infrastructure, or credential changes.2026-11-08 identity-fencing follow-up
Commit
8270bfcd81e1adds the missing identity check, including the previously unprotected post-reset window, and a nonzero regression. No Bazel test pass is claimed. Hosted workflow for this exact head is queued.2026-11-08 committed-observation fix
Commit
6dc0f5804450closes a remaining false-progress path:publish_text_progress_boundarycan replay an unchanged durable cursor with only different elapsed time/rates/latency, which previously incrementedprogress_epochand renewedlast_progress_microsdespite no committed work. The shared slot now deduplicates such reports while continuing to publish source scan observations, actual phase/batch boundaries, committed pages, new refusals, and verified Ready recovery. A sixth falsifiable regression was added. No native Bazel pass is claimed. CI for this head is queued. Capture/parse before sealing, committed graph milestones, full cold/restart acceptance, and independent review remain unresolved; this staysRefs #4508, open, and unmerged.