Skip to content

doctrine: T1 has TWO sibling algebras — syntax vs execution, not selection vs scoring (D-BBB-NARS-1) - #1222

Open
AdaWorldAPI wants to merge 3 commits into
mainfrom
claude/lance-graph-1218-plans-z8hzqr
Open

doctrine: T1 has TWO sibling algebras — syntax vs execution, not selection vs scoring (D-BBB-NARS-1)#1222
AdaWorldAPI wants to merge 3 commits into
mainfrom
claude/lance-graph-1218-plans-z8hzqr

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Operator ruling on the T2/T3 blood-brain barrier, plus the doctrine change it forces. No code.

What was measured, and what was concluded from it

A three-agent audit mapped the barrier across lance-graph, OGAR, lance-graph-java (@ 8720d1d) and r2sleigh (@ 99d2553). On NARS it found: repo-wide grep of lgj returns 3 hits, all prose, all in one unshipped plan; lance_graph_contract::nars is not in the G11 allowlist; the sibling callcenter membrane says it outright — "no VSA / RoleKey / NarsTruth crosses the membrane."

The measurement is right. The conclusion — "NARS is off the ladder entirely; the ladder is selection-shaped and has no tier for scoring" — is wrong twice.

The axis was wrong. Not selection vs scoring: syntax vs execution, which is the axis every other tier is already built on. where() is T2 because Java owns the NAME and T1 owns the op; nothing in that reasoning is specific to populations.

The remedy was wrong. The audit proposed a new bulk verb family — lgj_score_*, ∝n_rows, returning a lane instead of a mask. Rejected. It grows a second semantic API beside plan_eval, and the end state is predictable: where(), hop(), score(), nars_revision(), nars_deduction(), … with Java knowing progressively more about the behavior graph. The membrane starts growing little computational fingers.

The ruling

No sixth tier. T1 was described too narrowly.

T1
├── population algebra          └── epistemic algebra
│     mask                            TruthU8
│     ternlog                         revision
│     eq → mask                       deduction
│     popcount                        abduction

Both are primitive behavior. T2 may name either. T2 may not hand-compose either. T3 may express intent in either. Every existing rule carries over unchanged — kernel-membrane-warden's HAND-COMPOSED verdict covers a T2 spelling revision out of smaller truth ops exactly as it covers the two-AND spelling of AND3. The T2 row is renamed selectionbehavior, which is what it always was.

NARS lowers through the membrane that already exists:

T3  Java / R2IL / low-code
      │  NARS operation NAME + opaque handles
      ▼
T2  plan_eval — the behavior membrane
      │  resolved bulk operation
      ▼
T1  epistemic primitives (beside the population primitives)
      │  substrate-native execution
      ▼
T0  TruthU8 lanes / rows / history / state

T3 may say Truth.Revision(lhs_handle, rhs_handle). It may not know how revision works. Extend the plan language, not the ABI surfacelgj_plan_eval exists precisely so a whole behavioral expression crosses once.

A wording correction the ruling forces

TruthU8 had been called "the canonical wire form." Two different claims were conflated. It is canonical at T0. What crosses is decided separately, and by shape:

shape crosses? as
a truth LITERAL, TruthLiteral(192, 217) yes — meaning the caller supplies; syntax is T3's to state itself
a truth POPULATION, [TruthU8; 65536] never TruthLaneId(u64)

Same rule bbb-warden already applies to masks ("a long[] of selected ids is still a materialised population"), second column. And it lands on the measured Valhalla cliff exactly: flattening stops at an 8-byte payload (VM-confirmed, valhalla-lab/docs/three-truths.md), so the handle flattens and a truth array could never. Valhalla carries the noun; Panama carries the verb; lance-graph owns the reality.

G11: one scalpel cut, never the cupboard

Do not widen the fence to lance_graph_contract::nars merely because it exists. If that module carries arithmetic beside POD types, split a syntax/vocabulary contract out first and admit only that — one commit, all three places ALLOWED is spelled. (lgj's own history has the cautionary case: the fence was prose until 2026-09-03, ISS-LGJ-G11-FENCE-WAS-PROSE.)

The ruling and its falsifier

D-BBB-NARS-1. NARS truth arithmetic remains substrate-owned. G11/T3 may carry only typed NARS syntax and opaque substrate handles. NARS execution is lowered through the existing bulk plan-evaluation membrane; no Java-side arithmetic and no materialized truth population crosses Panama. TruthU8 is the canonical substrate representation, while cross-membrane results are handles. Any required G11 expansion SHALL expose syntax/vocabulary only, never an arithmetic implementation surface.

F-BBB-NARS-1. Fail if Java can implement, inspect, iterate, or reconstruct NARS truth arithmetic without invoking the substrate, or if a truth population crosses G11/Panama other than as an opaque handle.

What lands

  • .claude/knowledge/membrane-tiers.md — T1 row (two sibling algebras), T2 row renamed, new § with the lowering diagram, the plan-language rule, the TruthU8 shape table, the G11 rule, and both D-/F- statements quoted.
  • .claude/board/EPIPHANIES.mdE-T1-HAS-TWO-SIBLING-ALGEBRAS-THE-AXIS-IS-SYNTAX-VS-EXECUTION-1 (operator ruling, BINDING).
  • .claude/board/STATUS_BOARD.md — arc bbb-nars-lowering, D-BBB-NARS-1 (Ruled) / -2 (queued, do not pre-build) / -3 (queued).
  • .claude/agents/bbb-warden.md — the epistemic column, and a fourth verdict ARITHMETIC-SURFACE for a signature that lets T3 implement/inspect/iterate/reconstruct a T1 algebra rather than name it.

The BBB does not move. T3 names / T2 opaque behavior handles / T1 algebra (population ‖ epistemic) / T0 state. No VSA internals, no RoleKey, no NARS arithmetic, no byte positions, no truth arrays, no Java compute path. Only names and capabilities. The widening makes the doctrine more general, not more permissive.

Gates

append_only_gate.py origin/main OK (9 files, none shrank) · citation_decay.py --since origin/main 0 new · supersession index current · no Rust changed, no code changed.

Related

Companion correction on #1221 (2dda2ff): the AND3 epiphany was measured at a stale lgj pin dbac826 and is false at HEAD 8720d1dlgj_hop is one simd_mask_ternlog_assign::<AND3> (exports.rs:1816), shipped 2026-09-04. E-NXG-8 is vindicated and membrane-tiers.md restored there; this PR builds on the restored text.

🤖 Generated with Claude Code

https://claude.ai/code/session_013S6AQs95K3rHymE3kAqZay

…on (D-BBB-NARS-1)

A three-agent audit of the T2/T3 barrier measured NARS truth arithmetic as
absent from the Java side — repo-wide grep of lance-graph-java at `8720d1d`
returns 3 hits, all prose, all in one unshipped plan; `lance_graph_contract::nars`
is not in the G11 allowlist; the sibling callcenter membrane states it outright
("no VSA / RoleKey / NarsTruth crosses the membrane"). The measurement is right.
The conclusion drawn from it — "NARS is off the ladder entirely; the ladder is
selection-shaped and has no tier for scoring" — is wrong twice, and the operator
ruled it so.

**The axis was wrong.** Not selection vs scoring: **syntax vs execution**, which
is the axis every other tier is already built on. `where()` is T2 because Java
owns the NAME and T1 owns the op; nothing in that reasoning is specific to
populations.

**The remedy was wrong.** The audit proposed a new bulk verb family
(`lgj_score_*`) returning a lane instead of a mask. Rejected — it grows a second
semantic API beside `plan_eval` and ends as `where()/hop()/score()/
nars_revision()/…`, with Java knowing progressively more about the behavior
graph. The membrane starts growing little computational fingers. `lgj_plan_eval`
exists precisely so a whole behavioral expression crosses ONCE; NARS becomes
another named plan operation or it is nothing.

**The ruling.** No sixth tier. T1 was described too narrowly: it holds two
sibling primitive algebras — population (`mask`, `ternlog`, `eq → mask`,
`popcount`) and epistemic (`TruthU8`, revision, deduction, abduction). Both are
primitive behavior. T2 may name either, may hand-compose neither; T3 may express
intent in either. Every existing rule carries over unchanged — HAND-COMPOSED
covers a T2 spelling `revision` out of smaller truth ops exactly as it covers
the two-AND spelling of `AND3`. The T2 row is renamed *selection* → *behavior*,
which is what it always was.

**A wording correction the ruling forces.** `TruthU8` had been called "the
canonical wire form" — two claims conflated. It is canonical at T0. What crosses
is decided separately and BY SHAPE: a truth LITERAL (`TruthLiteral(192, 217)`)
is syntax the caller supplies and may cross; a truth POPULATION
(`[TruthU8; 65536]`) never crosses — it becomes `TruthLaneId(u64)`. The same
rule masks already have, second column. It lands on the measured Valhalla cliff
exactly: flattening stops at an 8-byte payload (VM-confirmed), so the handle
flattens and the array could never. Valhalla carries the noun, Panama carries
the verb, lance-graph owns the reality.

**G11 widens by one scalpel cut, never the cupboard.** Do not admit
`lance_graph_contract::nars` because it exists; if it carries arithmetic beside
POD types, split a syntax/vocabulary contract out first and admit only that —
one commit, all three spellings of `ALLOWED`.

Landed: `membrane-tiers.md` (T1/T2 rows, new § with the lowering diagram, the
plan-language rule, the TruthU8 shape table, the G11 rule, D-BBB-NARS-1 +
F-BBB-NARS-1 quoted); EPIPHANIES entry; STATUS_BOARD arc D-BBB-NARS-1..3;
`bbb-warden` gains the epistemic column and a fourth verdict, ARITHMETIC-SURFACE.

The BBB does not move. T3 names / T2 opaque behavior handles / T1 algebra
(population ‖ epistemic) / T0 state. The widening makes the doctrine more
general, not more permissive.

Gates: append-only OK (9 files), citation-decay 0 new, supersession index
current. No code changed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013S6AQs95K3rHymE3kAqZay
@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 159ead70-be52-4f53-a1d3-9cea37d8531d


Comment @coderabbitai help to get the list of available commands.

@cursor

cursor Bot commented Sep 7, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_c64b9969-9b19-4730-9aec-cb632c36bda8)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9c6b7eb294

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude/knowledge/membrane-tiers.md
Comment thread .claude/agents/bbb-warden.md
Comment thread .claude/knowledge/membrane-tiers.md Outdated
AdaWorldAPI and others added 2 commits September 7, 2026 21:47
…s that did not cover it

Three findings, one class — I wrote rules that advertised enforcement which did
not exist. That is the same defect this repo's own history records as the G11
fence being prose until 2026-09-03, and the same one PR #1221 carries a storno
about. Found three times in one commit; fixed in this one.

**1. `kernel-membrane-warden` did not cover truth composition** (Codex P2,
`membrane-tiers.md:64`). The new § claimed its HAND-COMPOSED verdict "covers a
T2 that spells `revision` out of smaller truth ops exactly as it covers `AND3`
as two `mask_and`s." Verified at the source: the card's trigger names
`mask_*`/`eq_*_to_mask`/`ternlog` and "T2 code that composes mask primitives";
method step 2 reads "for every mask/compare/scatter". A T2 hand-composing
`revision` walked straight through the gate the paragraph invoked. Fixed by
making the claim TRUE, not by softening it: the trigger now names both sibling
algebras, and **method step 2b** asks the same question of truth operations —
T2 arithmetic over `frequency`/`confidence`, a `w/(w+1)` discount, a min/max
over two truths, a revision hand-rolled from component `and`/`or` are all
HAND-COMPOSED; reading a `TruthU8`'s two bytes apart to recombine them is
GEOMETRY-LEAK, because the byte split is T0's.

**2. The canonical table contradicted its own shape rule** (Codex P2,
`membrane-tiers.md:22`). The T1 row said it crosses up as "a truth lane" while
the shape table twelve lines down says a truth POPULATION never crosses and
becomes `TruthLaneId`. Both statements standing made a raw `[TruthU8]` boundary
defensible FROM THE CANONICAL TABLE — the worst place for an ambiguity to live.
Now: "a truth lane DESCRIPTOR (`TruthLaneId`) — never the population."

**3. `bbb-warden`'s method could not reach its own new verdict** (Codex P2,
`bbb-warden.md:79`). ARITHMETIC-SURFACE blocks a signature that lets T3
implement, inspect, iterate or reconstruct a T1 algebra — but steps 1-3
enumerate signatures and classify parameter/return SHAPES only. A public helper
with a perfectly legal `TruthLiteral` signature computing revision in its BODY
passes every step while doing exactly what `F-BBB-NARS-1` forbids; so does a
body-only change to a method that already existed. New **method step 4**: read
BODIES (arithmetic over frequency/confidence, a loop over a lane, a local
recombination of a handle's parts) and read what a newly-G11-admitted module
EXPORTS (a POD type is syntax; a function computing a truth FROM truths is an
implementation surface, and admitting the module admits it). The falsifier, not
the signature list, is what the reviewer reasons against.

The doctrine paragraph now carries the correction inline rather than quietly
becoming true, because the general rule is worth more than the three fixes:
**a doctrine sentence that names a gate must cite the step that makes it true.**

Gates: append-only OK (9 files), citation-decay 0 new, supersession index
current. No code changed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013S6AQs95K3rHymE3kAqZay
…G arc

#1221 merged (`f29200f`) and put this PR into conflict. One real conflict, in
`STATUS_BOARD.md`: both sides prepend a new arc block at the top of a
newest-first file. Resolved by keeping both, ordered by recency — the
`bbb-nars-lowering` arc (unmerged, this PR) above `spog-alpha-channel-v1`
(merged 06:31). `EPIPHANIES.md` auto-merged with the T1-sibling-algebras ruling
on top; `membrane-tiers.md` did not conflict at all, because #1221's copy was
byte-identical to `main`'s after the AND3 restore.

Confirmed on the new `main` rather than assumed: the storno commit `2dda2ff` is
in its history, and `membrane-tiers.md:37` reads
"`exports.rs` names `kernels::ternlog::AND3`" — so the doctrine that ships is
the corrected one. The stale claim survives only in #1221's merged PR BODY,
which is prose in the arc record, not a statement the tree makes.

This branch's own D-SPG edits from the earlier integration-update pass are
superseded by #1221's newer, measured rows (D-SPG-2/3 pushed for real, D-SPG-5
split, D-SPG-8 shipped); their version wins, as it should.

Gates against the new base: append-only OK (9 files), citation-decay 0 new,
supersession index current. No code changed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013S6AQs95K3rHymE3kAqZay
@cursor

cursor Bot commented Sep 8, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_f668f240-11d7-4866-8662-cfc0e238c90d)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant