Commit graph Bifrost/docs
Author SHA1 Message Date
Meta Vens
e0640bdaa0 Docs: Bifrost issues GameCult identity, Heimdall authenticates; oidc-issuer.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 18:35:34 +02:00
Meta Vens
e77d6220de Concept Mill votes target: re-verified body facts, authority map, cut order
Imagination pass that admitted cut specs 0a through 7. Facts re-probed at
Bifrost bf83a93 and on the host; the from-memory prior-art list is replaced
by a citation of docs/research/anonymous-vote-stuffing-prior-art.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:16:45 +02:00
Meta Vens
bf83a9321b Research: prior art on anonymous-vote stuffing defences
Served concept-mill-votes Cut 4 (anti-stuffing defence). Facts with source
pointers on PoW captchas, device cookies, network buckets, ePrivacy status of
anti-abuse cookies, and after-the-fact purge at HN, Stack Exchange and Reddit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:01:18 +02:00
Meta Vens
20d5efa9c6 Concept Mill votes: target and body facts
The Imagination map of 2026-10-08, committed as the target document of the
concept-mill-votes campaign. Typed invariants, rulings and cut specs live in
the eureka mind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 04:55:42 +02:00
Meta Vens
0312e8bbac Watchdog notice reader: a future stamp is eligible now; no production clock seam
A failed entry stamped ahead of the clock (host clock stepped forward then
corrected) is eligible now instead of waiting out the skew; the next attempt
rewrites the stamp. The WATCHDOG_NOTICE_NOW_MS env var is deleted: the reader
reads Date.now(), and tests fix it with a --import preload (tests/fake-clock.mjs).
The unknown-entry tests now rerun far past the backoff so a retried unknown fails.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 02:19:01 +02:00
Meta Vens
69e12e3867 Watchdog notice reader: a failed send is retried forever with capped backoff
Ruling notice-retry-policy. The five-attempt cap and its terminal
"exhausted" state are gone. A failed entry is eligible again once
min(2^(attempts-1), 60) minutes have passed since its last journal
update; a run inside the delay skips it without spawning the bridge.
Every attempt keeps the same nonce. The exit status is non-zero while
any entry is unknown or has failed 3 or more times, and retries go on.
status shows nextEligibleAt for failed entries.

The clock is one now() that WATCHDOG_NOTICE_NOW_MS can override, like
the bridge timeout override, so tests drive the backoff without sleeping.
The process summary field "exhausted" is renamed "failing". A journal
entry whose updatedAt is not a date is now refused as
journal-entry-invalid, since the delay is measured from it.

All commits build.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 01:48:44 +02:00
Meta Vens
ff087a554b Watchdog notice reader: pin timeout, spawn-error, 5xx/429 and guard behaviour; say what non-2xx is
Tests only, plus wording. No change to what the reader or bridge does.

- A spawn timeout and a spawn error (ENOBUFS from a bridge that floods
  stdout) record unknown, are never re-posted, and block the closure.
  WATCHDOG_NOTICE_BRIDGE_TIMEOUT_MS overrides the 60 s timeout so the test
  reaches that branch; the default is unchanged.
- A 500/502/503/429 answer to the message POST exits 75 from the bridge, and
  through the reader is retried with the same nonce until it completes.
- allowed_mentions {parse: []} is asserted in the posted body; status exits
  non-zero while an entry is unknown and zero when none is.
- The bridge comment and docs/watchdog-notice.md no longer call a non-2xx
  answer "definite": it is retried with the same nonce, relying on
  enforce_nonce inside Discord's window, and may double-send if Discord acted
  on a 5xx outside it.

Builds. Two tests fail on Windows (SIGKILL status), as before; they pass on
Yggdrasil.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 22:56:27 +02:00
Meta Vens
1f001e11d2 Watchdog notice reader: the journal owns "sent"; only exit 75 is retried
Fix batch for Soul pass s1 (spec r3):
- Delete prune-on-absence and its test. Absence from Idunn's store no longer
  deletes a journal entry, so an empty or restored store never re-sends.
- discord-dm exits 75 only when no message can have been sent (arguments,
  token, DM channel open, non-2xx on the message POST). The reader records
  failed for 75 only; any other non-success without a message id is unknown
  and is never re-posted.
- Subject grammar is Idunn's require_id; the notice puts it in backticks.
- Times are bounded to the Date range; notice text is built before the
  running entry is written.

Builds and passes on Linux. On Windows the two tests that SIGKILL the reader
cannot pass (process.kill does not deliver a signal there).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 21:54:23 +02:00
Meta Vens
417454c28f Watchdog notice reader: Idunn incidents become owner DMs through Bifrost's own journal
tools/watchdog-notice.mjs is a one-shot reader. It reads Idunn's incident
store unlocked with SingleFileMessagePackBackingStore.pullAll, sends one opening
and one closing DM per incident through bifrost-bridge.mjs, and keeps a
bifrost.watchdog_notice_execution.v1 journal: a running entry becomes unknown
and is never re-posted, a failed one is retried with the same nonce up to five
times, terminal entries are pruned once Idunn retires the incident. The exit
status is the delivery-failure signal.

discord-dm accepts --nonce (at most 25 chars) and sends nonce with
enforce_nonce so a retry inside Discord's window returns the original message.

The tests run the CLI against the store bytes Idunn wrote (fixture from
GameCult/Idunn 7f7528b3) with a counting bridge double, and once through the
real bridge with fetch stubbed. docs/watchdog-notice.md states the CultLib
>= 8cb3b728 floor.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 21:15:18 +02:00
Meta Vens
8b9ab65b3f Delete Epiphany operator bridge 2026-08-22 06:16:39 +02:00
Meta Vens
548dd9397f Own native Persona Discord transport 2026-07-22 00:34:04 +01:00
Meta Vens
671168fefc Sign Persona feedback provider health 2026-07-19 21:41:50 +01:00
Meta Vens
6491f449cf Unify Epiphany operator request v1 2026-07-19 18:43:49 +01:00
Meta Vens
dabf7aa320 Align Epiphany operator bridge v1 2026-07-19 15:09:26 +01:00
Meta Vens
e0e612c69c Complete authenticated Epiphany operator bridge 2026-07-19 13:12:04 +01:00
Meta Vens
82dd058d42 Add signed Epiphany operator admission boundary 2026-07-19 12:00:50 +01:00
Meta Vens
c65cbfa527 Gate organizational Persona feedback 2026-07-18 20:32:10 +01:00
Meta Vens
cde3a78874 Move public crossings onto typed Bifrost transport 2026-07-15 22:16:07 +01:00
Meta Vens
2a382fb4a8 Publish Bifrost provider respect to Odin 2026-06-23 23:09:16 +01:00
Meta Vens
f1f91713ad Add generic outside-world bridge request 2026-06-22 15:49:11 +01:00
Meta Vens
675c475752 Gate future public bridge surfaces 2026-06-22 15:42:43 +01:00
Meta Vens
23c02be2a6 Add native Bifrost identity registration 2026-06-22 15:07:22 +01:00
Meta Vens
445c27978b Gate public bridge actions on Bifrost identity 2026-06-22 14:54:14 +01:00
Meta Vens
c533a7f98c Record Epiphany bridge provenance 2026-06-22 14:26:53 +01:00
Meta Vens
861dff3ed7 Add Stripe patronage checkout integration 2026-06-22 14:08:35 +01:00
Meta Vens
ba01b78d68 Fix Bifrost bridge runtime and fixture env isolation 2026-06-22 14:03:07 +01:00
Meta Vens
0c53f70e25 Require approved governance before github bridge 2026-06-17 12:27:22 +01:00
Meta Vens
a22092feff Require receipts for non-github bridge activity 2026-06-17 12:06:20 +01:00
Meta Vens
f32c9127a0 Validate bridge provenance against bifrost state 2026-06-17 11:38:34 +01:00
Meta Vens
f58a0cbc1b Validate runtime receipt linkage 2026-06-17 11:22:29 +01:00
Meta Vens
f702a708d9 Restrict runtime receipts to bridge token 2026-06-17 10:51:02 +01:00
Meta Vens
4468591d6c Tighten dispatched gh gate parsing 2026-06-17 10:34:38 +01:00
Meta Vens
1fdf6b8a87 Harden dispatched app-server sandbox defaults 2026-06-17 10:08:16 +01:00
Meta Vens
390dcf16d2 Scrub ambient GitHub auth from dispatch turns 2026-06-17 09:13:26 +01:00
Meta Vens
f0661a8995 Lock recovery hatches in dispatched turns 2026-06-17 08:38:21 +01:00
Meta Vens
6579c6004d Gate transport snapshot imports 2026-06-17 08:22:30 +01:00
Meta Vens
01bc5558af Gate dispatched GitHub CLI mutations 2026-06-17 07:53:38 +01:00
Meta Vens
d93267eb47 Enforce bridge-owned GitHub pushes in dispatch turns 2026-06-17 06:51:08 +01:00
Meta Vens
70f323c7db Use concrete GitHub comment receipts 2026-06-17 06:28:10 +01:00
Meta Vens
793a910886 Fail closed when agent receipts cannot be recorded 2026-06-17 05:56:25 +01:00
Meta Vens
cab9d22f78 Receipt governance activity in Bifrost 2026-06-17 05:21:29 +01:00
Meta Vens
118a3efc74 Receipt agent transport lifecycle in Bifrost 2026-06-17 04:49:22 +01:00
Meta Vens
2281b0e63d Gate GitHub bridge actions and receipt agent runs 2026-06-17 04:03:14 +01:00
Meta Vens
7354d482e8 Start Eve governance surface migration 2026-06-09 20:27:46 +01:00
Meta Vens
634f187453 Document Heimdall Patreon support sync 2026-06-09 20:22:58 +01:00
Meta Vens
bb1b1056be Add Heimdall patron support intake 2026-06-09 17:16:27 +01:00
Meta Vens
ba09539561 Add patron support derived voting tiers 2026-06-09 16:28:30 +01:00
Meta Vens
35dd658185 Prepare Bifrost Reddit organizing bridge 2026-06-09 15:22:00 +01:00
Meta Vens
30da090cb0 Rename repo face references to persona 2026-06-09 14:40:26 +01:00
Meta Vens
5a1a9098de Publish semantic Bifrost CultMesh addresses 2026-06-04 23:22:56 +01:00