Commit graph

923 commits

Author SHA1 Message Date
173f28b886 Desk door tests: the one-second lower edge allows jiffy granularity (950 ms still kills a 500 ms bound)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 23:38:33 +00:00
ba9b1013ca Desk door fix batch: the binary tests run one at a time and the accept-error probe fails every new descriptor
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 22:22:18 +00:00
4e43e43a26 Desk door fix batch: one deadline per connection (reads and writes spend what is left), the catalog reply bounded by the response limit, the dead index call and answer_ref deleted
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 22:17:04 +00:00
2b6e15de4c Desk door fix batch: failing tests first (one deadline per connection, the exact bounds, the catalog under the response limit; Soul's survivor probes committed)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 22:13:46 +00:00
4437afbc26 Desk door part B: the binary end-to-end (both doors, restart replay, leftover socket, other uid refused and logged, namespace root seen as the real uid)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 21:42:21 +00:00
035a3eaa62 Desk door part A: the oversize-header test fails fast instead of waiting when the bound is gone
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 21:40:52 +00:00
eca3f53c98 Desk door part A: mutation survivors pinned (header-only oversize refusal, four accepts per pass, unprobeable and unreadable socket paths)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 21:09:57 +00:00
e35181b296 Desk door part A: the unix-socket door, peer uid checked before a byte is read, joined to the one serve loop
desk_door.rs owns who may speak, the socket's life and the frame bounds; Daemon::handle_desk owns which Mind method answers (Answer via desk_answer, the replay flag gating index.committed; Forks and Fork refused Unavailable until desk-door-reads). startup returns Started; run takes the door; its five callers pass it or None. desk_wire::answer_ref is the one spelling of a stored answer's ref.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 20:56:51 +00:00
88ca0a0867 Desk door part A: failing tests first (peer check before a byte, bounds, answers over the socket, per-call deciders, interim reads refusal, startup gates)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 20:53:42 +00:00
d38db97823 Merge pull request 'Desk wire, part 2: the envelope (wire names mind/authority/subject/deciders, deciders 1..64 unique, generic cores, schemas)' (#35) from eureka-substrate/desk-wire-envelope into main 2026-11-10 20:47:56 +00:00
14a914a634 Desk wire envelope delta: decode refuses an empty decider list (minItems 1)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 20:44:11 +00:00
0e590f3638 Desk wire envelope delta: failing tests first (empty deciders refused at decode, minItems 1, refusal round trip)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 20:43:31 +00:00
a19fc5b494 Desk wire envelope: DeskRequest with Libby's wire names, deciders per call (max 64), generic envelope cores, desk schemas
envelope.rs cores are generic over service id, schema and payload; the mind's five functions and the desk's five instantiate them. desk_answer's attribution parameter is authority. huginn.desk_request.v1 and huginn.desk_response.v1 are derived and pinned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 20:31:21 +00:00
ab1b150d2f Desk wire envelope: failing tests first (deciders 64/65, wire names, no crossing, frame, schemas)
The desk request, response, envelope instantiations and constants do not exist yet; these tests name them and do not compile.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 20:28:16 +00:00
9c28a7a9ef Merge pull request 'Pin the InvitePending notice: a pending invitation is told not to be sent again' (#34) from eureka-body/open-direct-pin-wording into main 2026-11-10 20:26:32 +00:00
63d1825628 Pin the InvitePending notice: tell her not to send another invite
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 20:26:19 +00:00
8fef8bdd9e Merge pull request 'Persona: open_direct, her ask that the mouth open a DM with a person she was shown' (#32) from eureka/persona-open-direct into main 2026-11-10 20:22:48 +00:00
c5a98a2884 Merge pull request 'Desk wire lows: replay gate pinned for stored refusals and revisions; every bad fork id is fork_unknown' (#33) from eureka-substrate/desk-wire-s2-lows into main 2026-11-10 19:57:54 +00:00
7550514dcf Desk wire: any bad fork id is fork_unknown, including the key and campaign the Mind derives from it
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:57:34 +00:00
c64ce59c36 Desk wire tests: a stored refusal and a stored revision replay under an empty decider list
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:56:54 +00:00
664be6e77a Merge pull request 'Desk wire, part 1: Libby's answer documents, the one n<seq> conversion, the projection and Mind::desk_answer' (#31) from eureka-substrate/desk-wire into main 2026-11-10 19:44:17 +00:00
732ed009f2 Persona: pin the schema a Direct session runs under; describe open_direct in the module doc
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:25:06 +00:00
bc6be42ae9 Desk wire tests: the replay's id map is asserted one-to-one
S11 applied with the sequential check off and seen to fail on it. Finding desk-wire-replay-id-map-not-injective.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:23:25 +00:00
fc25fc925b Desk wire tests: a key outside its fork's n<seq> form projects Unavailable; the conversion round-trips over many sequences
Soul's S12 (a second converter that agrees on every legal key) applied and seen to fail. Finding desk-wire-second-converter-evades-grep.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:23:03 +00:00
c23c415166 Desk wire tests: request id, retracts, note, choice and Unavailable pass through as sent
Padded, cased and trailing-junk spellings added to the existing tables; Soul's S1, S8, S9, S10 each applied and seen to fail. Finding desk-wire-pass-through-unpinned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:22:29 +00:00
ba6d90c7ad Desk wire tests: as_of pinned on refused and uncounted answers; the gate tried with a retraction and an illegal form
Kills Soul's S2, S3 and S5 (each applied and seen to fail). Finding desk-wire-asof-and-gate-thinly-pinned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:21:39 +00:00
83107b6f3d Desk wire: an over-long fork id is fork_unknown, pinned by exact field
Her vectors hold no over-long fork id (deviation recorded). Finding desk-wire-long-fork-id-body-invalid.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:20:50 +00:00
a3d788fa72 Desk wire: the nullable keys her schema requires must be sent
Finding desk-wire-required-keys-optional.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:20:10 +00:00
905cdd6793 Desk wire: the showability gate no longer shadows a stored answer's replay
answer_desk's (answerer, request_id) lookup is now bound_answer, pub(crate) in desk.rs, and
Mind::desk_answer asks it so the gate runs only when nothing is stored. Finding
desk-wire-gate-shadows-replay.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:19:16 +00:00
bd53de4ec6 Persona: her reply may carry one open_direct, bounded and sent after the says
Public sessions only; with a person her session was shown (not a Mind, not herself); text 1..4000 bytes; brakes re-read before the open; a refusal or a mouth that does not answer is a notice on her next line, never a failed step. No consent state is kept: the mouth reads it from Matrix.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:58:13 +00:00
4bb5cd6657 Open-direct: the chat wire types and trait method, and the failing Persona tests
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:51:10 +00:00
0a9d69679c Desk wire: repin Libby's vectors to CultLib 6231ecad; replay compares counted_answer_id and the refused target exactly; digest goldens pinned from the file
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:50:19 +00:00
cc5937d37c Open-direct wire: Bifrost's v4 fixtures and the failing codec tests
Fixtures copied byte-for-byte from Bifrost main 73c6f50 (tests/fixtures/persona-chat-v4/), verified equal to the handoff copy.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:47:29 +00:00
75155b3b43 Desk wire tests: a replayed revision keeps its stored word while it counts
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:44:37 +00:00
3936076629 Desk wire: clippy-clean test spelling and the contract named without the card word
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:37:22 +00:00
e84c7130dd Desk wire tests: Libby's 53 replayable scenarios through Mind::desk_answer, with the named target deviation pinned
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:35:21 +00:00
80697c959a Desk wire tests: the showability gate, byte bounds, request id pass-through and closed keys
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:34:54 +00:00
52a18ae3cb Desk wire tests: Libby's request, refusal and answer vectors byte for byte; projection, counts, conversion and refusal mapping
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:34:06 +00:00
2062902c80 Desk wire: Libby's answer documents, the one n<seq> conversion, the projection and Mind::desk_answer
Vendors fork-card-vectors.json at CultLib 8ca1d184 and retires the options-hash file it contains.
answer_desk's dead-code allowance goes: desk_answer is its live caller. No card is built here.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:31:27 +00:00
f0ca504456 Merge pull request 'Desk digest covers the illegal form retracted flag; pin the s4 refusal bounds' (#30) from eureka-substrate/desk-digest-retracted into main 2026-11-10 18:20:45 +00:00
2d99e6ee6c Desk digest covers the illegal form's retracted flag; pin the s4 refusal bounds
body_digest writes retracted for the illegal form only, so forms (i) and
(iii) no longer share a digest; desk_steps refuses a value that is no
illegal form as body invalid. Tests pin the three illegal goldens, the
200-byte target, choice and Refused.retracts bounds, case-sensitive
labels and fork_closed before bad_retraction.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:07:10 +00:00
7ea11b4419 Merge pull request 'Desk answers, Huginn half 1: desk_answer kind and the Mind counting door' (#29) from eureka-substrate/desk-answer-record into main 2026-11-10 17:51:53 +00:00
583d6f52b7 desk: header facts derive whether an answer counts at the read's snapshot; refusals keep what was sent
PipelineFacts::DeskAnswer gains counts, derived through counted_answer over the
read's Docs::at(image, as_of); the stored outcome name stays the write-time record.
DeskOutcome::Refused carries the retraction target as sent; the record's choice is a
Short kept as sent (a choice_invalid choice is no label), and an illegal retraction
form keeps its choice and note. body_sha256 form unchanged. Schemas regenerated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:38:36 +00:00
21674e134a desk: look up the retry before the probe validates
A bound (answerer, request_id) replays its stored outcome without re-running
probe validation; a malformed id binds nothing and still meets the probe.
Comment on the choice bound now says a Short (200 bytes).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:17:51 +00:00
e70a0fe13b huginn-mind: pin the faculty alias values to Faculty's serde names
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:08:40 +00:00
b4845aedcd huginn-mind: illegal retractions and non-label choices are stored refusals; claim_in_future follows the stored received_at
DeskBody::IllegalRetraction stores Refused bad_retraction after steps 4-6 (digest carries the form, so it never replays as a plain answer); a choice is any 1-200 byte text, stored Refused choice_invalid when no option label, grammar or not. claim_in_future compares against the whole-second received_at written to the record.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:08:40 +00:00
3a1677251b huginn-mind: Member and Steward faculties for desk receipts; pin the body digest, lookup position and sub-second claim
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 16:04:06 +00:00
368217a65a huginn-mind: tests for the desk fix batch (decider list, receipt faculty, older cards, times, notes, NFC, request_id Q1-Q6)
Each test was failed by a hand mutant of the rule it pins.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 15:49:53 +00:00
dcc51c170f huginn-mind: desk answers take the decider list as input, store attribution, received_at and request_id
DeskStamp carries answerer, attribution (Operator/Steward/Member per CultLib PR #72) and the decider
list; membership decides rule 5, the attribution never does. answer_desk and DeskStamp are crate-private.
The receipt names the operator only for the operator's account. counted_answer and R1 consider
options_hash. A stored answer keeps received_at, claim_in_future, request_id and a body digest;
the same (answerer, request_id) and body replays the stored outcome and writes nothing, another
body is request_id_conflict. Notes are Words (1..=4000 bytes, not blank); answered_at must be UTC.
The vector file is re-sliced byte for byte from PR #72 head 2dea6c56.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 15:46:02 +00:00
f1691ffc0d huginn-mind: pin that the desk door is refused before references are read
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 15:28:22 +00:00