Commit graph

273 commits

Author SHA1 Message Date
Heimdall
58fa80bc5b Make the attempt cookie's deletion Secure so a browser honours it
A __Host- cookie is only removed by a Set-Cookie that is itself Secure. The
hardening test now checks Secure on every header, deletion included, and the
completion tests pin that success and refusal both clear the attempt cookie
with Secure, Path=/ and no Domain.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 11:24:02 +00:00
Heimdall
c757acf525 Make every cookie host-only: __Host- names, Secure, Path=/, no Domain
Session, OAuth correlation, antiforgery, voter and Heimdall attempt cookies all take the
__Host- prefix. The prefix forbids a narrower Path, so the voter (was /mill) and attempt
(was /auth/heimdall) cookies move to Path=/.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:42:43 +00:00
bf8ff62774 Merge pull request 'Estate-rule sim: regenerate stale results, fix weight-floor wording' (#7) from heimdall/stale-estate-numbers into main
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-06 07:50:10 +00:00
Heimdall
b6c1e9af73 Estate-rule sim: regenerate results.md and fix stale half-cap numbers and the "0 below unit" wording
REPORT.md E6 and results.md still held pre-fix numbers (half-cap 0.044/0.222, s max 0.953).
Regenerated with the current sim: s max 0.777; half-cap binding all four 0.000,
Patrons+Minds 0.008, Patrons alone 0.165. Weight is 0 only at amount <= unit/b (run.py,
REPORT.md, SPEC.md); the splitting table no longer prints a cliff "0 (below unit)". Test count 54.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 07:50:04 +00:00
Heimdall
527f96986a Merge remote-tracking branch 'origin/main' into heimdall/stake-vectors
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-06 04:34:57 +00:00
Heimdall
55253c48b4 Estate-rule sim: stake log_weight follows heimdall-stake's log form, no cliff at unit
w = max(0, 1 + log_b(x/unit)); all 14 single and 12 split golden rows now pass.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 04:34:57 +00:00
b3c4821a67 Merge pull request 'Estate-rule sim: pin the stake arm to heimdall-stake golden vectors' (#6) from heimdall/stake-vectors into main
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-06 02:32:24 +00:00
Heimdall
0f985c6003 Estate-rule sim: pin the stake arm to heimdall-stake's golden vectors
Copies CultLib PR #9 (head 84f932ec) tests/vectors/stake_golden.csv unmodified and
checks log_weight and split_weight against all 26 rows. 25 match within rounding;
the one sub-unit row differs by design: the arm's cliff at unit is Libby's
min_amount_per_identity = unit, which the vectors do not set.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 02:32:20 +00:00
10ffad3d21 Merge pull request 'Estate-rule sim: purchased-stake arm (log weight, splitting adversary, half-influence cap)' (#5) from heimdall/estate-sim-purchased-stake into main
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-05 19:29:58 +00:00
Heimdall
081b0fc991 Estate-rule sim: review fixes for the purchased-stake arm
Docstrings state weight is per identity, not sybil-safe, hours unanalysed;
placeholder parameters marked in code; unit x roll sweep with interval;
identity-cost thresholds by bisection (about half the budget, not the
doubling-grid 51-82%); headline numbers pinned in a test; 'log bounds'
test renamed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 19:29:51 +00:00
Heimdall
6e4f94ae27 Estate-rule sim: purchased-stake arm (log weight, hours input, splitting adversary, half-influence cap, E6)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 13:13:43 +00:00
b95234bbef Merge pull request 'Estate-rule sim harness: populism, strategic agents, transitive delegation' (#4) from heimdall/estate-rule-sim into main
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-05 10:59:23 +00:00
a338c594be Merge pull request 'Proposal: charter amendment provision (in-chat charter)' (#3) from heimdall/charter-amendment-proposal into main
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-05 10:59:13 +00:00
5900284742 Merge pull request 'The mouth delivers media events as a typed line' (#2) from heimdall/mouth-media-line into main
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-05 10:58:56 +00:00
Heimdall
5d352c6c20 estate-rule sim: copy-the-ballot strategy and E3f cap sweep
Spec 5b (source: Golz et al. 2018 intro citing Behrens et al. 2014), copier
agents in estatesim.py, E3f alpha x cap x copy sweep with a computed
paired-interval verdict, 10 tests. Result: with copying the cap does not
reduce effective concentration. Earlier results.md sections unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 07:05:15 +00:00
Heimdall
9d032c2dff estate-rule sim report: correct cell counts and cap/appeal claims against results.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 04:22:57 +00:00
Heimdall
70e9cef3d5 estate-rule sim: renewal and peer edges, full results, report
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 04:22:28 +00:00
Heimdall
dda8ee7c58 estate-rule sim harness: stdlib core, runner, tests
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 03:39:53 +00:00
Heimdall
0d52eeaeee estate-rule sim spec rev 2: transitive delegation chains, depth sweep, uncast rules
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 03:39:53 +00:00
Heimdall
a23b6d94f1 docs: estate-rule sim harness spec (populism measure, delegation, strategic agents)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 00:24:58 +00:00
Heimdall
a09746c8f7 Revise charter amendment proposal with settled estate rules
3-of-4 for ordinary rules, all four for a short named entrenched list,
reduction rule with floor/notice/delay, incentive-first framing, Minds
count once with dissent recorded, no notice no approval, freeze risk
stated beside the veto rules. Numbers remain placeholders.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 23:18:07 +00:00
Heimdall
2c37e8a0de docs: charter proposal, fix clause cross-references
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 21:47:52 +00:00
Heimdall
f7770df147 docs: charter amendment provision proposal (in-chat charter)
Draft only; not in force. Does not change the legal entity's statutes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 21:47:45 +00:00
Heimdall
6548ca8385 mouth: deliver media events as a typed line
m.image/m.file/m.audio/m.video reached Personas as a bare filename and
dropped content.url. The delivery text now leads with
[kind filename mime size url], then the caption. Applies to the delivery
and to context lines. Wire v1 is unchanged. Nothing is fetched: a Persona
turn is a tool-less text call.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 18:09:43 +00:00
e396305c19 Merge pull request 'The mouth refuses a Persona send when the room moved past what she held' (#1) from eureka-body/optimistic-send-mouth into main
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
2026-11-03 11:03:11 +00:00
7adc7315a3 send gate: re-check the brake after the gate wait, before the PUT
A send queued at the room gate passed the brake check at entry only, so a
brake placed while it waited still let the PUT through. The check now also
runs inside the gate, just before the PUT, and answers a typed Brake refusal.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 10:37:22 +00:00
Meta Vens
2387cbc7f6 send gate tests: pin the head read's shape
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 11:06:39 +01:00
Meta Vens
981164173f send gate tests: arrival order is the gate's, not the call site's
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 11:02:47 +01:00
Meta Vens
2dd4bd863e persona matrix mouth: send gate tests, the captured #swarm head, v2 golden fixtures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 11:02:07 +01:00
Meta Vens
a76c70cc39 persona matrix mouth: a v2 send is refused if the room moved past her basis; check and PUT are one step per room across every Persona
Removes the bare PUT; the one PUT now lives inside the room gate. v1 stays served unchecked through the same gate.
Wire: chat_send_request.v2 (basis) and chat_send_receipt.v2 (newer); RoomMoved is v2 only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 11:01:44 +01:00
Meta Vens
c29c5d1a4e persona matrix mouth: a delivery's context is read from Matrix, not remembered
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
The per-room in-memory history map is gone: a restart emptied it and /sync resumed from the
cursor, so every room (a DM first) lost its past. When a delivery is built the mouth now reads
the room's timeline from the homeserver as that Persona (GET /messages dir=b, or the thread's
root plus /relations m.thread for a threaded message), keeps m.room.message from everyone
including her own, oldest first, ending before the delivered event. Newest lines are kept to a
16 KiB byte budget (each clipped to limits.contextBytes), at most the 20 lines the delivery
tuple carries. One fetch per room or thread per sync round. A failed fetch gives empty context
and a redacted log line; the delivery still goes out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 05:10:57 +01:00
Meta Vens
98689b787d persona matrix mouth: each Persona's rooms are the shared MATRIX_ROOMS plus her own MATRIX_ROOMS_<SLUG>
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
SLUG is the Persona slug upper-cased with "." and "-" turned into "_". Lists are
deduplicated; an absent variable gives shared rooms only; a malformed project alias,
or two Personas mapping to one variable, is refused at start. The send path's
UnknownRoom check already reads the mouth's own list, so another Persona's project
room is refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 04:12:31 +01:00
Meta Vens
3bff0d779c persona matrix mouth: log the many-peer server's errors and keep serving
Some checks failed
Publish Container / Build and publish Bifrost image (push) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:51:57 +01:00
Meta Vens
b892c64f00 persona matrix mouth: one session per client on the many-peer RUDP server; every request answered on the connection it arrived on
Two Persona turns running at once no longer take each other's session. Requests run in order per client, not across clients.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:51:57 +01:00
Meta Vens
a7621f9eed Research: Discord-like roles on Matrix and the chat client (matrix-roles-from-bifrost-estates)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 19:09:06 +01:00
Meta Vens
ccb0e6b08c Research: email mouth prior art (payment-mints-invite-bifrost-ledger-email-mouth)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 19:09:06 +01:00
Meta Vens
6cf24644bc Research: customer-member onboarding prior art and body facts (customers-get-voting-power-onboarding-owed)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 19:09:05 +01:00
Meta Vens
cc76f0f2d0 mouth-all-personas: one Matrix mouth serves every Persona; deliveries carry mentions and is_direct, refusals are typed; same-server DM invites accepted; the ring is deleted (Persona turns are the heartbeat's) (squash of eureka-body/mouth-all-personas 7b63031..5b628e2; Soul s1-s3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 02:49:59 +01:00
Meta Vens
18bbe6c312 Research: estate tally adds bloc-parliament-at-threshold and operator influence cap (Fork Desk 41)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 22:15:38 +01:00
Meta Vens
1036849534 Research: estate tally note points at its sims/ folder
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 22:07:49 +01:00
Meta Vens
3f241c0fe4 Research: estate tally game theory, power indices and simulations (Fork Desk 39, estate-internal-tally)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 22:07:10 +01:00
Meta Vens
eee86193c0 Research: swarm governance on Bifrost, readiness and prior art (follow-up swarm-governance-on-bifrost)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 21:48:14 +01:00
Meta Vens
7b630312e1 persona-mouth: Matrix ear and mouth for Personas (brake-refusing sends, token only in the Authorization header, cursor after ack, one ring per idle window); delete the Discord posting actuator (squash of eureka-body/persona-mouth 1894f65..ab2bdc6; Soul s1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 19:41:30 +01:00
Meta Vens
1894f653d0 Back-channel logout: members who leave Active are logged out of chat (gamecult-chat cut bifrost-oidc-backchannel-logout r2)
Merges gamecult-chat/bifrost-oidc-backchannel-logout (83daabe..37c8fe1).
gamecult-chat:cut_report:cut-bifrost-oidc-backchannel-logout.h1/h2; Soul s1 and s2 hold. Not deployed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 02:10:34 +01:00
Meta Vens
37c8fe1a72 Logout tests: pin the loop's own tick-failure catch now that subject faults are isolated
A pass that cannot read its subjects (a scope factory failing like a database outage) is logged
by exception type only and retried after the interval, never in a tight loop. The earlier loop
test reached this catch through a per-subject exception, which the isolation now absorbs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 01:57:31 +01:00
Meta Vens
8340ee0e92 Logout reconciler: one subject's unexpected exception does not stop the pass
Caught per subject, logged at error with the subject id and exception type only, authorizations
left valid; cancellation still stops the pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 01:50:54 +01:00
Meta Vens
ec66fba5ca Logout client: no auto-redirect, pin the redirect rule and the 10 s timeout
The named logout HttpClient's primary handler disables auto-redirect, so a 3xx from MAS is a
non-delivery retried like any non-2xx instead of being followed to a final 2xx that revokes.
Pinned through the real DI registration against a real loopback listener answering 302, and
the registered client's Timeout is pinned to exactly 10 s. The unexpected-exception test is
replaced by the isolation test (its fix is the next commit) and the cancellation test stands alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 01:50:53 +01:00
Meta Vens
51fe807b66 Logout loop test: the tick failure is logged by exception type only
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 01:03:02 +01:00
Meta Vens
868b91fefb Logout reconciler: a recovered subject's backoff clears at once, not when it expires
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 00:57:31 +01:00
Meta Vens
af64868326 Logout tests: loop, log content, 2xx range, backoff reset, exception and cancellation paths
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 00:56:18 +01:00