Commit graph Bifrost/docs
Author SHA1 Message Date
425af74500 Passkeys: WebAuthn enrolment under a fresh sign-in, 48 h cooling-off, assertion proof at unlink (#85)
Delta Soul clean at 73f97ed (no blocking findings; one Low: challenge check and spend not atomic).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-14 00:37:56 +00:00
Heimdall
18f1ec6aca Linked accounts: drop the list after an unlink with an uncertain end; Google never mints; docs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 20:23:54 +00:00
Heimdall
8e65f56b0c Linked accounts: never guess a proof provider; require stepUpRequested; no-store on completion
With no current list the proof goes only through a provider the member names, never the
session's sign-in provider: a sign-in through an unlinked provider makes Heimdall mint an
orphan account holding that login. Link buttons need a current list. The unlink completion
must say a step-up was requested. POST /auth/heimdall/complete answers no-store. The fake
Heimdall now models orphan minting, derives step_up_at from the start's stepUp flag, and
enforces the app secret, sign_in-only, unsupported-provider and 600 s rules.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 20:08:07 +00:00
Heimdall
b65bec65ce Linked accounts: docs, README line, proof-provider and no-store tests
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 19:43:59 +00:00
9a716cfd7e Merge pull request 'Feedback receiver design (records, session check, delivery, erase redaction)' (#10) from heimdall/feedback-receiver into main 2026-11-13 03:28:42 +00:00
ae0037c159 Merge pull request 'Guest accounts design (role field, invite, grants, leave and erase)' (#9) from heimdall/bifrost-guest-accounts into main 2026-11-13 03:28:41 +00:00
Heimdall
96665a778b docs(feedback-receiver): drop stale draft marker; steward merges the design
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 03:28:33 +00:00
Heimdall
3b0a614ee9 docs(feedback-receiver): steward rulings: Ratatoskr client (2a, shared client, own audience) and explicit short token lifetimes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 22:47:05 +00:00
Heimdall
d29f8014f9 docs(guest-accounts): steward rulings: stored Role, form-posted invite code (no token in a URL), provider lists narrowed to the intersection, no collector member_id for guests
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 22:46:53 +00:00
Heimdall
25ce117f16 docs(feedback-receiver): re-read references at main e58e953
Docs only. Mouth line numbers (shifted by about 100 lines of mouth code), bridge.md, packages.lock.json refs refreshed; Heimdall PR #6 is merged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 22:44:54 +00:00
Heimdall
f04b20feed docs(guest-accounts): re-read references at main e58e953; OIDC chat tier is already any non-Suspended account, owed change is Left/Erased
Docs only. Refreshes stale file and line references, drops the claim that OIDC must move to Status == Active (main already admits any non-Suspended account with a live training-notice receipt), names the new IsActiveMember callers, and updates the provider-list and Heimdall PR #6 notes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 22:44:53 +00:00
Heimdall
1771f15789 Soul fixes: deploy doc says production refuses a blank secret; name the echo test for what it checks
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 19:27:57 +00:00
Heimdall
1739d5552a Refuse production startup when the Heimdall app secret is blank
A missing secret silently switched Discord and Patreon member sign-in off.
Outside Development and Testing the validator now fails naming
Heimdall:AppSecretFile and Heimdall:AppSecret, never a value.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 19:23:43 +00:00
Heimdall
280d843aeb AppSecretFile: pin the deprecation at Warning level, say trailing newlines
Soul pass on 25b9cc16: the warning level was unpinned (a Trace demotion passed) and the docs said one newline where the code trims all.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 13:46:24 +00:00
Heimdall
25b9cc1683 Document Heimdall__AppSecretFile and the AppSecret deprecation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 13:24:59 +00:00
420a4dbf85 Mouth: follow upgrades only a plain basis; @room keeps room (#76) 2026-11-12 12:28:39 +00:00
afafff18bd Mouth: basis "follow" for engagement peers (CHAT_FOLLOW, default off) (#74) 2026-11-12 12:21:31 +00:00
Heimdall
e639e13a8b docs: feedback receiver: C# CultCache runtime fit, two-lock restore rule, gaps owed to Libby
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:55:12 +00:00
Heimdall
46cf7d4492 docs: feedback receiver: store path /var/lib/gamecult/bifrost/feedback-receiver, C# in the Bifrost app, HTTPS probe result
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:52:09 +00:00
Heimdall
a3bab9b8e5 docs: feedback receiver: fold Eureka's forks 2-5 decisions (client_credentials, HTTPS carrier, withhold edges, 56-day retention); private_key_jwt/Ed25519 finding
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:48:47 +00:00
Heimdall
beafbe18e2 docs: feedback receiver: Meta's rulings of 2026-11-12 (erase redaction, training-notice receipt, host withhold, Mind OIDC audience); token section and mouth citations re-read against main b1725a1
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:42:21 +00:00
Heimdall
8a3262b3e8 docs: feedback receiver: re-verify the mouth facts against main 55b74275
The mouth moved since bf8ff62: the pending answer is chat_pending.v2 with a
twelve-field delivery, a chat ack now posts a public m.read receipt and
releases stored images, and presence follows the brake. Update the line
references and the gaps, and record why a feedback ack must be its own kind.
No design change; the OIDC and account files are unchanged on main.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:39:30 +00:00
Heimdall
ee88bc709d docs: feedback receiver: cite Ratatoskr PR #24 at b146000d, route 2 claims check, CultCache file, erase and backup rules
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:39:30 +00:00
Heimdall
abeb8a1d5f docs: feedback receiver: correct mouth line references
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:39:30 +00:00
Heimdall
6c4c9c00f9 docs: feedback receiver design (draft, do not merge)
Design for the receiver half of Ratatoskr's Mind feedback pages: records, session
check, account-kind lookup, delivery as quoted data, erase redaction and gaps.
Design only; nothing implemented.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 10:39:30 +00:00
b1725a106f docs: sealed-motion Mind key path is /var/lib/mind-<persona>; register only after a Persona-shell self-test (#32) 2026-11-12 10:31:05 +00:00
d26aa50041 Docs: desk feed visibility is Huginn's door policy; cite the written door spec (#69) 2026-11-12 10:17:33 +00:00
d4365a8364 Mouth: fetch one named event's image for its Persona, store it, post an inert receipt (CHAT_FETCH, off by default) (#73)
A Persona's Mind shell holds no Matrix token, so the mouth now keeps one named image for her: it reads her live membership and the room's full state, takes content.url from the fetched event only, checks info.sha256 against the hash it computed, stores the bytes in her image store and posts the inert org.gamecult.file_received receipt as her own user. Behind CHAT_FETCH (exactly 1), off by default; an off mouth answers the kind as UnknownKind. Not deployed by this merge.

Shipper: Eureka. Reviewed by Heimdall against cut-mouth-fetch-attachment.r7 (bundle 3a6b45d, then delta d4bccd4: one log line per fetch with a fixed cause=, event-id percent-encoding pinned, doc-only change to docs/bridge.md).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 00:59:28 +00:00
0d820fdc00 Mouth: id shape on every delivery field, mentions bounded in bytes, round cap counts every target GET (#72) 2026-11-11 21:06:13 +00:00
7231cdb977 Mouth: reply_to lows after #64 (round cap defers, 60 s excerpt, wider scrub, id shape) (#68) 2026-11-11 20:05:46 +00:00
f6a826b6e7 Desk feed design: per-Mind open forks, read-only (decisions in PR #37 section 14) (#67) 2026-11-11 17:06:45 +00:00
6acb4980b8 docs: how a Ratatoskr voting module authenticates to Bifrost (design) (#37) 2026-11-11 17:06:31 +00:00
e8e8fcc178 Docs: no refresh token, MAS skips userinfo; withdrawal stops new tokens, open sessions run to expiry (#66) 2026-11-11 16:48:27 +00:00
1da912d5e9 Members: approve refuses no-membership/unknown accounts; neutral text for legacy suspensions (#65) 2026-11-11 16:39:48 +00:00
e12b8e2298 Mouth: v4 fixes after Soul pass (target cache, scrub, read cap) (#64) 2026-11-11 16:17:09 +00:00
dc35c4a254 Mouth: chat_pending.v4 reply_to (flag, default off) (#63) 2026-11-11 16:06:28 +00:00
ab89556101 Chat sign-in needs a live consent receipt; notice frozen as version 1 (#59) 2026-11-11 14:32:06 +00:00
7813426e6d Drop HTMX (unpkg, no integrity); guard against third-party assets (#61) 2026-11-11 14:12:51 +00:00
70a2038435 Suspension gaps: bootstrap, demotion, members-page notices, admin-only reason (#60) 2026-11-11 14:12:47 +00:00
1571bf3e32 Consent: optional at registration, a consent page, CSRF-guarded accept/withdraw, notice v2 (#58) 2026-11-11 12:11:02 +00:00
028bc2fdf6 Registration: sign-up form with proof-of-work and a no-JS time-lock fallback (#56) 2026-11-11 11:17:25 +00:00
b2e0bb2514 Mouth: tail_gaps on chat_pending.v3, the rooms whose tail is incomplete (#57) 2026-11-11 11:07:35 +00:00
09addd83d8 Docs: proposed training notice v2 and consent-flow gaps (#55) 2026-11-11 10:32:18 +00:00
33be966b7d Registration gates: proof-of-work CAPTCHA and training-notice consent receipt (#54) 2026-11-11 10:15:46 +00:00
e8722d0abf Mouth: room tail on chat_pending.v3 (#51) 2026-11-11 08:15:38 +00:00
24f3deb88e OIDC issuer: chat tier for accounts without Active membership (#52) 2026-11-11 08:13:09 +00:00
5201508bdc OIDC issuer: address budget, token-row cap, scheduled prune, marker brake (#50) 2026-11-11 08:12:48 +00:00
be44a09d52 OIDC: refuse reserved localparts at authorize; gap list in oidc-issuer.md (#49) 2026-11-11 06:39:35 +00:00
1d0548313c Mouth: addressing facts on deliveries (chat_pending.v3 basis and form) (#48) 2026-11-11 06:26:30 +00:00
12a153f66f Mill votes: ranked, paged read and not-yet-voted-by-this-network filter (#41) 2026-11-10 21:06:56 +00:00