Skip to content

Commit 31571a5

Browse files
committed
docs(plan): align Inc 0 / Inc 2 / thesis / F3 with the 5+3 verdict (one contract)
PR #542 review: the body sections still named the pre-verdict contract while the verdict below corrected it. Brought onto one contract: - Inc 0 key->row: NiblePath::from_guid_prefix(&guid) + NodeGuid::local_key + MailboxSoaView::row_for_local_key (from_guid_prefix is on NiblePath, not NodeGuid). - Inc 0 edge-rep: classid-resolved (EdgeCodecFlavor) EdgeBlock XOR CausalEdge64, never guessed by availability (verdict 4b). - thesis + Inc 2 legality: mailbox-cycle = KanbanColumn::can_transition_to; domain-board = classid->ClassView; board mutation routes through the DO-arm commit gate, not raw MATCH...SET (verdict 4a/4d). - F3 folds in the all-guard-classes gate (was F6 in the verdict). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
1 parent dd731bd commit 31571a5

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

.claude/plans/cypher-kanban-ast-unification-v1.md

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ Board ⇄ graph mapping (no new types):
2424
- **column / phase → state** (a `Column` node via `:IN` edge, or a `classid`/property)
2525
- **move → edge rewrite** (`(c)-[:IN]->(Doing)``(c)-[:IN]->(Done)`)
2626
- **dependency / blocks → edge**; **WIP limit → a Cypher `count` guard**; **swimlane → basin/label**
27-
- **`KanbanColumn::can_transition_to` → the graph schema** (which edges are legal)
27+
- **legal moves → the graph schema:** mailbox-lifecycle legality stays with
28+
`KanbanColumn::can_transition_to`; domain-board legality resolves via
29+
`classid → ClassView` (NOT `KanbanColumn` — see verdict §4a)
2830

2931
The `KanbanColumn` cognitive cycle is the *mailbox* instantiation; an odoo project
3032
board / woa work-order board / q2 case board are *domain* instantiations —
@@ -46,10 +48,13 @@ board / woa work-order board / q2 case board are *domain* instantiations —
4648

4749
### Inc 0 — `Backend::MailboxSoa` router variant
4850
`graph_router::Backend` gains a `MailboxSoa` variant whose scan:
49-
- resolves **key → row** via `NodeGuid::{from_guid_prefix, local_key}` (no guid
50-
value-column — the key IS the address),
51-
- follows edges by **`EdgeBlock` slot deref** (byte → neighbor `local_key`) and/or
52-
`MailboxSoaView::edges_raw` (`CausalEdge64`),
51+
- resolves **key → row** via `NiblePath::from_guid_prefix(&guid)` + `NodeGuid::local_key`
52+
+ `MailboxSoaView::row_for_local_key` (no guid value-column — the key IS the address;
53+
`from_guid_prefix` is on `NiblePath`, not `NodeGuid` — see verdict §2),
54+
- follows edges via the **`classid`-resolved** representation (verdict §4b) —
55+
`EdgeBlock` slot deref (adjacency, byte → neighbor `local_key`) **XOR**
56+
`MailboxSoaView::edges_raw` (`CausalEdge64`, causal), selected by the class's
57+
`EdgeCodecFlavor`/`ReadMode`, never guessed by availability,
5358
- a Cypher `MATCH (n:Label)` lowers to a **classid prefix route**; `(a)-[r]->(b)`
5459
to an **edge-slot deref** — both zero-value-decode.
5560
Additive to the existing 3-backend router (DataFusion / Blasgraph / Palette); no
@@ -62,9 +67,11 @@ the AST, gated per the #540 process-not-switch invariant.
6267

6368
### Inc 2 — kanban-board-as-Cypher over the GUID substrate
6469
Express board ops as Cypher patterns dispatched through the planner with
65-
thinking-styles/MUL: a move = a Cypher edge-rewrite → IR → style/MUL plan →
66-
`ExecTarget`; a query (cards-in-column / blocked / WIP-count) = a Cypher `MATCH`.
67-
The transition-legality (`KanbanColumn::can_transition_to`) is the schema guard.
70+
thinking-styles/MUL: a move = a Cypher edge-rewrite **routed through the DO arm**
71+
(`ActionInvocation` commit gate: def-match → RBAC → state-guard → MUL — NOT a raw
72+
`MATCH…SET`, see verdict §4d); a query (cards-in-column / blocked / WIP-count) =
73+
a Cypher `MATCH`. Legality is `classid → ClassView`-resolved for a domain board;
74+
`KanbanColumn::can_transition_to` governs only the mailbox cognitive cycle.
6875

6976
### Inc 3 — q2 consumer wiring (the rewire)
7077
q2 (Palantir-Gotham/neo4j-aspiring) cases = a **domain `classid` + edge schema**
@@ -78,8 +85,11 @@ traversal is Cypher over `Backend::MailboxSoa`.
7885
the same node set as the DataFusion backend on the same data (backend parity).
7986
- **F2 (zero-decode):** a 1-hop traversal touches only key + `EdgeBlock` bytes,
8087
never the 480 B value slab (assert via a value-access counter / borrow check).
81-
- **F3 (board legality):** an illegal kanban move (`!can_transition_to`) is
82-
rejected at plan time, not after the edge rewrite.
88+
- **F3 (board legality, all guard classes — was F6 in the verdict):** an illegal
89+
domain-board move (rejected by the `classid → ClassView` schema) **and** any
90+
DO-arm guard failure (RBAC / state-guard / MUL) are rejected at plan time, not
91+
after the edge rewrite. (Mailbox-cycle legality is the separate
92+
`KanbanColumn::can_transition_to` check.)
8393
- **F4 (gate isolation):** with `lite-unified` OFF, behaviour is byte-identical to
8494
today (datafusion path); the SurrealQL lowering is unreachable.
8595
- **F5 (no new layer):** the unification adds ONE router variant + ONE lowering

0 commit comments

Comments
 (0)