Skip to content

Slice 027: publish the effect catalogue, and make two censuses falsifiable - #86

Merged
HackTuah merged 1 commit into
mainfrom
slice/027-authority-census-published
Sep 24, 2026
Merged

HackTuah merged 1 commit into
mainfrom
slice/027-authority-census-published

Conversation

@HackTuah

Copy link
Copy Markdown
Member

From the male CNS connectome research report of 2026-09-13, implemented where it fits: A2 (a small enumerable population carries all authority to act), A5 (the compass tracks state and does not command) and A8 (a closed, versioned, publicly checkable catalogue).

This slice changes nothing about what the tree permits. Two of its three claims were already true and neither was checked. It makes existing claims falsifiable.

What it adds

docs/effects-catalog.md, generated from the configured core tools and their behaviour callbacks: one row per tool with the risk tier, the effect class, whether the name is in the closed external-effect catalogue, whether it can escalate, and the module. The version is a SHA-256 over its own rows, so two trees with the same effect surface carry the same version.

mix trinity.effects.catalog --check is step 3 of scripts/prod_check.sh, which the gate runs. It is proven to fail, not assumed to: changing one cell of the committed artifact turns the release check red, and restoring it turns it green.

--write and --check refuse outside MIX_ENV=prod. The first generated artifact was built under :test and named test scaffolding beside fs_read, five entries longer than production. A gate running in :test would have compared a test surface against a production one and failed forever, and the obvious fix would have been to commit the test surface as though it were the product.

The effects census carries a reason per allowed caller, not a bare list of two paths, and a test refuses a reason too short to be one.

A new census asserts no module in permissions, effects or authority reads session state. The distinction is the point: a session id is a scope key and narrows a grant; what the session has been saying is state and would steer a decision. Every message is a place an injected instruction can sit, so a gate that reads conversation state is one an attacker can argue with, and the argument need not convince a person, only move one boolean.

Two things the tree caught

The planted reader justified itself immediately: the census's first regex excluded a dot before Sessions and could not see the fully qualified call the plant makes. Without the plant it would have reported the decision path clean while measuring nothing.

Slice 020's census then caught this work. The new task's moduledoc named a test tool as an example, and nothing under lib/ may reference test scaffolding. The census is right and the example was not worth it.

Verification

mix gate
Result: 683 passed, 18 excluded
trinity.coverage: 090 80.31% vs 080 80.31%: OK

🤖 Generated with Claude Code

…fiable

From the male CNS connectome research report, implemented where it fits: A2 (a
small enumerable population carries all authority to act), A5 (the compass tracks
state and does not command) and A8 (a closed, versioned, publicly checkable
catalogue). The fit judgment for all nine motifs, including the two declined, is
recorded privately.

This slice changes nothing about what the tree permits. Two of its three claims
were already true and neither was checked, which is the shape of the work: it
makes existing claims falsifiable.

docs/effects-catalog.md is generated from the configured core tools and their
behaviour callbacks, one row each with the risk tier, the effect class, whether
the name is in the closed external-effect catalogue, and whether the tool can
escalate. Its version is a SHA-256 over its own rows, so two trees with the same
effect surface carry the same version and nobody types a number. The check runs
inside scripts/prod_check.sh, which the gate runs, and it is proven to fail:
changing one cell of the committed artifact turns the release check red.

The artifact is a claim about what ships, so --write and --check refuse outside
MIX_ENV=prod. The first generated catalogue was built under test and named the
test scaffolding beside fs_read, five entries longer than production. A gate
running in test would have compared a test surface against a production one and
failed forever, and the obvious way to make that pass would have been to commit
the test surface as though it were the product.

The effects census now carries a reason per allowed caller rather than a bare list
of two paths, and a test refuses a reason too short to be one. A third caller
should have something to argue against.

A second census asserts that no module in permissions, effects or authority reads
session state. The distinction it holds is the point: a session id is a scope key
and narrows a grant, while what the session has been saying is state and would
steer a decision. Every message is a place an injected instruction can sit, so a
gate that reads conversation state is a gate an attacker can argue with, and the
argument need not convince a person, only move one boolean.

The planted reader justified itself immediately. The census's first regex excluded
a dot before Sessions and so could not see the fully qualified call the plant
makes; without the plant it would have reported the decision path clean while
measuring nothing.

Slice 020's census then caught this work: the new task's moduledoc named a test
tool as an example, and nothing under lib/ may reference test scaffolding. The
census is right and the example was not worth it.

mix gate: 683 passed, 18 excluded; coverage 80.31%, unchanged.

Signed-off-by: Ayla Croft <aylacroft@proton.me>
@HackTuah
HackTuah merged commit be75fbd into main Sep 24, 2026
8 checks passed
@HackTuah
HackTuah deleted the slice/027-authority-census-published branch September 24, 2026 14:13
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