Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .claude/board/AGENT_LOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,26 @@
## 2026-09-30 — 5+3 council: cypher-mask multiplicity contract (D-CMM-0..3)

- Plan: `.claude/plans/cypher-mask-multiplicity-contract-v1.md` (v1 → v2 → ratified v3).
- The 5: prior-art-savant, iron-rule-savant, runtime-archaeologist, cascade-impact-savant, creative-explorer-savant.
Key findings:
- `Frontier` name collision (`nars/tactics.rs:151`).
- Rule 5 needs girth / directed-only.
- The DAG fixture cannot tell walks from trails.
- A fourth consumer kind (grouped) was missing.
- The census already over-counts Full.
- The 3: overclaim-auditor, dilution-collapse-sentinel, firewall-warden.
- BLOCKs:
- `Grouped` conflated two carriers;
- `SetOnly` over-claimed for earlier variables (`count(DISTINCT b)` 3 vs 4);
- unguarded `Serialize`;
- gate gaps.
- All resolved in v3: five carrier kinds, `!Serialize` guard test, strict G1b.
- Measured:
- G1a 4/3, 4/3; G1b DataFusion = 5 (walks), as pre-registered.
- G2: 4 disables red-then-green.
- Census Full 117 → 70.
- Also: the Phase-0 commit's model-naming trailer was removed (own branch, pre-PR).

## 2026-09-29 — D-LXC-1 plan rewritten with Read (orchestrator, no agents, no code)

- Operator-directed. The council run below read source with shell
Expand Down
14 changes: 14 additions & 0 deletions .claude/board/INTEGRATION_PLANS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
## 2026-09-30 — cypher-mask-multiplicity-contract-v1 — a mask is the support of a frontier, never its bag → `.claude/plans/cypher-mask-multiplicity-contract-v1.md`

**Status:** RATIFIED v3 (5+3 council) + PR A shipped (classifier + tests +
census consumer). Corrects `cypher-mask-lowering-v1` (below): `count(*)`,
`sum`, `avg`, `RETURN <var>` after a hop are bag-sensitive, and a forward hop
chain is the exact support of the TERMINAL variable only. Five carrier kinds
(`ConsumerSemantics`); only `TerminalSet` lowers in v1. DataFusion counts
walks, not trails (measured 5 vs 4 on a cycle) — recorded OPEN.

**Correction to the 2026-09-14 entry below:** its tally "35 [G] · 9 [H] ·
9 [GRACE]" was already superseded by the council regrade to **31 [G] · 13 [H] ·
9 [GRACE]** (stated in the PR2 entry further down). Both are grades over a
single population; eleven rows now carry a post-hop multiplicity qualifier.

## 2026-09-29 (2) — deepnsm-v2-lexical-evidence-consumer-v1 rewritten against the DeepNSM → DeepNSM-v2 migration → `.claude/plans/deepnsm-v2-lexical-evidence-consumer-v1.md`

**Status:** PROPOSAL (D-LXC-1..10). No code authorized. Supersedes entry (1)
Expand Down
15 changes: 15 additions & 0 deletions .claude/board/STATUS_BOARD.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## D-CMM — Cypher-mask multiplicity contract (2026-09-30)

Plan: `.claude/plans/cypher-mask-multiplicity-contract-v1.md`. Entry: `entries/2026-09-30-cypher-mask-is-support-not-bag.md`.

| D-id | scope | status | gate / falsifier |
|---|---|---|---|
| **D-CMM-0** | correct `cypher-mask-lowering-v1` rows T-1..T-7, T-11, R-6..R-8, §4.1, §4.6, §7 oracles, tally qualifier | In PR | contract §5 G6 |
| **D-CMM-1** | `LogicalOperator::consumer_semantics` + `ConsumerSemantics` (5 kinds, not `Serialize`) | In PR | `logical_plan.rs` unit tests; 4 disables red-then-green |
| **D-CMM-2** | DataFusion bag pins: DAG 4/3, 4/3; cycle walk count 5 | In PR | `tests/test_datafusion_varlength_complex.rs` |
| **D-CMM-3** | W0-b census consumes the classifier | In PR | Full 117 → 70 on 310 |
| **D-CMM-4** | count-lane (plus-times) hop for `TerminalCount`/`EarlierCount` | Queued | gated on a consumer + contract §3.2 R4 exactness |
| **D-CMM-5** | DataFusion walk-vs-trail divergence on cycles | Reclassified: DataFusion, Ladybug and SQL joins all compute WALK, which v1 adopts; TRAIL is a separate mode (contract §7.1-§7.2) | grace ruling: not fixed |
| **D-CMM-6** | footnote `lance-graph-as-the-modelgraph-v1.md` §15 Full fraction | Queued | — |
| **D-CMM-7** | carrier-sufficiency table + exhaustive enumerator (`.claude/tools/carrier_sufficiency.py`) | In PR | contract §7.3; every "no" prints a witness |

## D-LXC — DeepNSM-v2 lexical-evidence consumer + candidate next parts (2026-09-29)

Plan: `.claude/plans/deepnsm-v2-lexical-evidence-consumer-v1.md`. Convergence brief: `.claude/prompts/deepnsm-v2-lexical-consumer-converge.md`.
Expand Down
55 changes: 55 additions & 0 deletions .claude/board/entries/2026-09-30-cypher-mask-is-support-not-bag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# A Boolean mask is the support of a frontier, never its bag (2026-09-30)

**Status:** MEASURED + TEST-PINNED. Plan: `.claude/plans/cypher-mask-multiplicity-contract-v1.md` (ratified v3).

**Finding.** `cypher-mask-lowering-v1` lowered `count(*)` to the popcount of the final mask. After a hop, Cypher's bag semantics count one row per binding (path), not one per node.

| query on KNOWS = {1→2, 1→3, 2→3, 3→4, 4→5} | DataFusion | mask chain |
|---|---|---|
| `(a)->(b)->(c) RETURN count(*)` | 4 | 3 |
| `count(DISTINCT c.id)` | 3 | 3 |
| `*1..2` from id 1, `count(*)` | 4 | 3 |
| `count(DISTINCT b)` over the 2-hop | 3 | forward `dst₁` = 4 |

The last row is the second defect: a forward hop chain is the exact support of the TERMINAL variable only.

**Divergence recorded OPEN.** On KNOWS = {1→2, 2→1, 2→2}, DataFusion's 2-hop `count(*)` is **5**, the walk count. Cypher's relationship uniqueness gives 4, the trail count. DataFusion is in grace, so this is not fixed.

**Code.** `LogicalOperator::consumer_semantics()` (`logical_plan.rs`) returns one of five carrier kinds: `TerminalSet`, `EarlierSet`, `TerminalCount`, `EarlierCount`, `Bindings`. It is not `Serialize`, and a guard test enforces that.

The G2 disables each went red-then-green:
- force sensitivity to false;
- force the focus to the terminal;
- drop the cross-variable filter;
- let `Join` through.

**Census (W0-b), debug 0.** 310 classified.

| | before | after |
|---|---|---|
| Full | 117 | 70 |
| Split | 193 | 240 |

New reasons, by query count:

| reason | queries |
|---|---|
| Bindings | 90 |
| TerminalCount | 35 |
| EarlierCount | 9 |
| EarlierSet | 7 |

The value-DISTINCT T-12 reason moved 7 → 6.

After the chain-linearity fix (Codex P2 on #1305), the census reads 313 queries. The three new classifier-test queries join the corpus as `Bindings`. Full is unchanged at 70, so no existing query was reclassified.

**OPEN.**
- `lance-graph-as-the-modelgraph-v1.md` §15 still quotes the pre-contract Full fraction (37.3 %). It needs a footnote.
- No count-lane operator exists. `Weighted` lowering is gated on the exactness conditions in contract §3.2 R4.

**Amendment (same day, before merge).** Contract §7.
- v1 semantics is WALK: DataFusion, Ladybug (`PathSemantic::WALK` default, no `r1 <> r2` in `rewriteMatchPattern`) and SQL joins all compute it. D-CMM-5 is reclassified from "DataFusion divergence" to "TRAIL is a separate mode".
- Walks and trails also diverge on an acyclic graph when the pattern changes direction: `(a)->(b)<-(c)` on {1→2} gives `count(DISTINCT c)` 1 as a walk, 0 as a trail.
- MEASURED carrier sufficiency (`python3 .claude/tools/carrier_sufficiency.py`): node support answers only Exists/Support under WALK; per-node counts add Count/CountBy of the current and later nodes; the last hop's edge population adds the previous node; nothing per-node or per-edge answers a TRAIL question two hops on (two parallel self-loops plus 1→0: 3-hop trail count 0 vs 2 with equal per-edge trail counts).
- The mask-RISC survival rule stays; §7.4 states the condition under which a later PR may relax it.

3 changes: 2 additions & 1 deletion .claude/board/entries/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ index row, (3) no duplicate entry id. Checks 1 and 2 are deliberately
opposite directions; the stranding this convention prevents shows up in
exactly one of them, never both.

176 entries, 2026-08-06 .. 2026-09-29.
177 entries, 2026-08-06 .. 2026-09-30.

| date | entry id | finding | file |
|---|---|---|---|
| 2026-09-30 | `cypher-mask-is-support-not-bag` | | [2026-09-30-cypher-mask-is-support-not-bag.md](2026-09-30-cypher-mask-is-support-not-bag.md) |
| 2026-09-29 | `deepnsm-v2-counted-pick-tag-deltas` | | [2026-09-29-deepnsm-v2-counted-pick-tag-deltas.md](2026-09-29-deepnsm-v2-counted-pick-tag-deltas.md) |
| 2026-09-26 | `deepnsm-v2-lexical-evidence-survives-routing` | | [2026-09-26-deepnsm-v2-lexical-evidence-survives-routing.md](2026-09-26-deepnsm-v2-lexical-evidence-survives-routing.md) |
| 2026-09-25 | `window-scheduling-and-two-level-ternlog` | | [2026-09-25-window-scheduling-and-two-level-ternlog.md](2026-09-25-window-scheduling-and-two-level-ternlog.md) |
Expand Down
Loading
Loading