Skip to content

Commit ceca232

Browse files
authored
Merge pull request #869 from AdaWorldAPI/claude/x265-x266-plans-review-h9osnl
docs(board): file the P1 temporal-horizon defect shipped in #868
2 parents 1bbc890 + 1304679 commit ceca232

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

‎.claude/board/ISSUES.md‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,75 @@
11
# Issues Log — Open + Resolved (double-entry, append-only)
22

3+
## ISS-NO-PER-THREAD-TEMPORAL-PROJECTION-IS-EVER-CONSTRUCTED (2026-07-29) — OPEN, UPSTREAM OF `meta_basin`
4+
5+
> **⊘ RE-GRADED AND RELOCATED (Codex, #869) — my first filing mislocated this.**
6+
> I recorded it as "P1 correctness, shipped in #868". Both halves were wrong:
7+
>
8+
> - **`WitnessLens` is not the defect.** It borrows a caller-supplied
9+
> `&[NodeRow]` and indexes it. Hand it an as-of projection and it reads that
10+
> projection **correctly**. The type is agnostic to which version its rows came
11+
> from — that is a property, not a bug.
12+
> - **#868 did not introduce it.** The gathered `(stream_position, facet)` API it
13+
> replaced had **no version parameter either**. The migration changed nothing
14+
> about temporal behaviour in either direction.
15+
>
16+
> The real gap is a **capability that has never existed anywhere**: nothing
17+
> upstream ever *constructs* a per-thread as-of projection to hand down. Filing
18+
> it against `meta_basin` would have aimed the fix — and its regression test — at
19+
> the wrong component, which is worse than not filing it, because a green test on
20+
> the wrong layer reads as coverage.
21+
>
22+
> **Severity: an unbuilt capability, not a regression.** Nothing that works today
23+
> stops working. It bounds what the substrate can express: while every thread is
24+
> handed the same rows, "corpus-as-of" is inexpressible regardless of how
25+
> `meta_basin` is written.
26+
27+
**The defect (Codex, #868, verified against the code).** `WitnessLens::at(pos)`
28+
always reads the **current snapshot**. `visible(pos)` can only *include or
29+
exclude* an address — it structurally **cannot** select the historical row
30+
revision that `QueryReference::at(v, rung)` + `deinterlace` produce. So when the
31+
standing wave holds threads pinned to different Lance versions:
32+
33+
- a thread whose row was modified after its horizon is graded from the **newer**
34+
register — it reads a future it should not be able to see;
35+
- one invocation shares **one** peer domain, so quorum, trajectory and basin
36+
membership describe a **global snapshot**, not each thread's corpus-as-of view.
37+
38+
**Why no better predicate fixes it.** Include/exclude is the wrong *arity* for
39+
the question. The row bytes are fetched from the wrong version **before** the
40+
predicate is consulted, so no `visible` implementation can recover the right
41+
ones. The input must carry the focal thread's **temporal projection / address
42+
set**, not a spatial filter over the current lens.
43+
44+
**Scope — CORRECTED (Codex, #869). It subsumes nothing.** My first filing claimed
45+
`GradedRow::pos`, the Θ(N·k) peer scan, and `MetaBasin::members` were all
46+
downstream of one cause and could not be fixed separately. That was the same
47+
flattening reflex as the rest of this arc: three things felt like one, so I made
48+
them one.
49+
50+
**`TD-LENS-QUORUM-SCANS-THE-WHOLE-LENS` STAYS OPEN and is NOT superseded.** For a
51+
plain single-version sparse window with `N` corpus rows and `k` visible,
52+
`grade_rows` calls `quorum_mantissa_lens` once per focal and each call scans all
53+
`N` positions — `Θ(N·k)`, measured at 4608 probes for N=512/k=8 against 64
54+
gathered peer comparisons. **Temporal projection does not reduce that by one
55+
probe.** The two are orthogonal: an as-of projection fixes *which rows* a thread
56+
sees; the address list fixes *how many it touches to find its peers*. Declaring
57+
the address-list plan superseded would have closed a measured performance
58+
regression by rhetoric.
59+
60+
**Why the suite is silent.** Every fixture in `meta_basin` builds one snapshot at
61+
one version, so the entire temporal axis is **constant across every comparison**,
62+
including the equivalence test that feeds the *same* fixture to both sides. Third
63+
instance today of `E-THE-EQUALITY-PASSED-WHILE-AN-AXIS-WAS-CONSTANT-1` — and this
64+
one was found by asking a reviewer "what else is constant across my fixtures?"
65+
rather than by the suite. **Any fix must land with a multi-version fixture**, or
66+
the same silence repeats.
67+
68+
**Operator framing that produced it:** ~64k reasoning threads, each temporally
69+
situated, reconciled through `temporal.rs`. The merged code models rows as data
70+
swept at one instant; the substrate is threads reading their own corpus-as-of.
71+
72+
373
## 2026-07-27 — ISS-841-856-NEVER-ANSWERED-REVIEW-COMMENTS — the forensic recovery's full ledger of GitHub review/issue comments across #849–#856 that never received a reply, sorted by whether the underlying finding was fixed anyway
474

575
> Filed by the arc-841-856-postmortem recovery session. Every item below was

0 commit comments

Comments
 (0)