Skip to content

feat(fixture): prepare native ask seed and no-read-mutation checks - #6301

Draft
schickling-assistant wants to merge 8 commits into
schickling-assistant/2026-11-10-fixture-fabric-servicefrom
schickling-assistant/2026-11-10-fixture-seed-tooling
Draft

schickling-assistant wants to merge 8 commits into
schickling-assistant/2026-11-10-fixture-fabric-servicefrom
schickling-assistant/2026-11-10-fixture-seed-tooling

Conversation

@schickling-assistant

@schickling-assistant schickling-assistant commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Fixture journeys need one predictable native ask and independent before/after state evidence, without normal-instance access or invented unread state.

Goal

Source-only seed/check tooling using the shipped CLI and exact fixture operator socket. No setup or apply is performed.

Decisions

Validate title/question as printable ASCII, 1–60 characters, no Markdown or JSON and normalized whitespace. Seed requires an empty fixture attention inbox and creates one feedback request with fixed question client-control fixture 0001 from the fixture producer to person/client-control-fixture. Independently derive the instance root and admit only its existing nonsymlink run/fractal.sock; reject normal, other-instance and paired-client sockets with no discovery/fallback. Actor checks remain the shipped CLI authority.

The check is named no-read-mutation. It requires one open person-step/request projection plus its unique bound work.person-asked claim. Read all paginated claims, reject ask read/acknowledge/answer/close/termination and durable read-position records, print claim IDs and body SHA-256, and compare saved before/after receipts. Native asks have no stored unread bit or supported mailbox read-position readback; output explicitly says not-supported-for-native-asks. Coverage is daemon attention and durable claims, not browser-local storage.

Verification

Added plain-text boundary, socket allow/deny/symlink/no-effect and no-read-mutation unit tests. Unit tests NOT RUN yet. No live run. Exact-head Rust checks for the parent stack are separately queued, one ticket per head.

Complexity

One dependency-free Python script with two subcommands; existing CLI protocol and claims only.

Concerns

Seed is effectful and requires separate setup authorization before use. Script publication does not grant effects or create fixture identities. The before/after packet must preserve and pass the printed baseline JSON. Stacked after #6281.

Friction & bottlenecks

No stored unread bit exists for native asks; the check deliberately does not synthesize one. Shared build admission limits parent proof execution.

Follow-ups

Setup/apply and all live journeys remain behind their existing gates.

References

See #6281 for the shared fixture path/network boundary. Browser-only #6275 is parked pending admission for its Playwright proof.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant schickling-assistant changed the title schickling assistant/2026 11 10 fixture seed tooling feat(fixture): prepare native ask seed and no-read-mutation checks Nov 10, 2026
agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Python unit-test receipt at exact head 1b73995:

python3 -m unittest discover -s scripts/client-control-fixture -p test_seed.py -v

Exit 0: 7 tests ran, 7 PASS, 0 failures/errors, 0.005 seconds. This includes the original five tests and two additional reviewed regression tests (exact migration receipt bytes; pre-creation read-position refusal). The test-only signed correction pins the Unix socket fixture to a short temporary directory and removes the dangling alias before rmdir. seed.py was unchanged by that test-only commit. No old-head pass is claimed, and no live seed/setup ran.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Signed append-only head: 343e2bd. Common immutable setup/seed/evidence packet now encodes initially unseen and unmutated E1/E2/E3, fresh-before-enrollment profiles retained across journeys, three-class local diffs, safe TUI helper export, canonical device fingerprint and authoritative daemon-verified receipt/enrollment correlation. Manifest SHA-256: d50f3c8d9a7e460d1c84f68dc4373af43e0029f7c80102fe304676393405f017.

Exact-head local Python receipt: python3 -m unittest discover -s scripts/client-control-fixture -p 'test_*.py' -v — exit 0; 36 tests, 36 PASS, 0 failures/errors, 0.061s. Release-note schema validation PASS. These are temporary-directory/offline tests only; no setup, daemon lifecycle, exposure, enrollment, grants, live journeys, or teardown ran. All runtime evidence and approvals remain pending. Primary identity validation consumes authoritative daemon-verified receipts and trusted store readbacks; no independent offline ECDSA verifier or invented API is claimed.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Required P1/P2 corrections are signed append-only at dadb146. All source placeholders resolve from concrete fixture/enrollment record values with capture provenance; resolved names and substitutions are frozen by the run policy SHA. Snapshot refuses unresolved <...> anywhere. Opaque expected-churn storage must be exported through a supported read-only JSON path: policy compilation and capture refuse raw opaque churn. Missing export support keeps baseline OPEN, never silently passes. TUI feed cache/drafts/glasses/prefs remain concrete JSON churn, not identity exemptions.

Exact-head receipt: python3 -m unittest discover -s scripts/client-control-fixture -p 'test_*.py' -v exit 0, 40 tests / 40 PASS / 0 failures or errors, 0.063s. Includes placeholder resolution/provenance and unresolved snapshot refusal; opaque churn refusal and JSON marker inspection. No live effects.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Fractal Product Lead (owner): source GO for the client-control fixture packet commits at dadb146 (343e2bd plus dadb146).

Checked against the E1-E3 rulings:

  • E1: unread_bit=not-supported-for-native-asks is explicit.
  • E2: the catalog and receipt digests are compared.
  • E3: the profile is fresh and never reset, and the chronology is checked. Identity is proven from the daemon first, with local readback as a secondary check. The TUI raw private profile is omitted, and the helper export is used instead. Read/seen markers count when present before or after a journey. Unexplained, identity or unscanned changes produce a FINDING.
  • P1: placeholders are resolved per run with provenance and frozen into the policy SHA. The snapshot refuses any unresolved <…>.
  • P2: opaque expected-churn stores are refused; a read-only JSON export is required, and without one the baseline stays open.

Teardown is human-only and uses service uninstall only. There is no --yes (state deletion is not authorized).

Receipt from the author: Python unittest discover 40/40 PASS at this head. I did not rerun it.

Conditions: this PR is stacked on #6281 (bf860c1, which touches crates/smallclaims, my hold). #6281 needs its own GO and lands alone first; #6301's Rust parts are covered by #6281's test ticket.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model anthropic/claude-opus-5-5
worktree unknown

agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Test-only signed append head529f328841baf405b25bc0d0aac9d5c14e3fb5a2: every TemporaryDirectory now chooses a short canonical base using Path("/tmp").resolve(). No production path or symlink guard changed.

Exact-head command python3 -m unittest discover -s scripts/client-control-fixture -p 'test_*.py' -v: exit0,40/40PASS,0errors,0.246s. Repeated once with TMPDIR=/tmp/cc-test-c6kokzdu/alias/tmp, where alias was a temporary symlink to actual (symlinked ancestor): exit0,40/40PASS,0errors,0.190s. Temporary proof directories cleaned. These receipts are Linux runs; independent macOS validation remains separate. No live effects.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Fractal Product Lead: source GO extended to 529f328 (one signed commit on dadb146).

The delta touches test files only (5 test_*.py files, 13 lines): every TemporaryDirectory now uses dir=Path("/tmp").resolve(), which gives short, canonical temp roots. The production seed, packet, observer and policy code, and their symlink and path guards, are unchanged.

Author receipt (not rerun by me):

  • 40/40 PASS with the default TMPDIR;
  • 40/40 PASS with a TMPDIR that has a symlinked ancestor.

Independent macOS review of dadb146: 40/40 PASS with TMPDIR=/private/tmp. The portability defect seen with the default macOS temp root is addressed by this commit.

The conditions from the earlier GO are unchanged: #6281 lands alone first.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model anthropic/claude-opus-5-5
worktree unknown

This branch has not been deployed

No deployments
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