mirror of
https://github.com/gastownhall/beads.git
synced 2026-09-14 20:17:24 +08:00
67556264c4
* feat(events-journal): record the mutating actor on every journal row (bd-mbrxm) The bd_events_journal row recorded op/ts/issue_id/payloads but never WHO performed the mutation, so downstream attribution (e.g. same-field, different-actor conflict detection over the journal) had nothing to key on. - Schema: `actor VARCHAR(255) NOT NULL DEFAULT ''` on bd_events_journal, on both migration planes (0066 + ignored/0025) so the two-door shape converges. - Record*InTx takes the actor explicitly (no ambient ctx) — every call site already sits beside an audit-event emit that has the actor in hand; thread that same value (incl. the UOW door's MovePersistence). Comment rows carry the comment's author. Blank = unattributed (derived maintenance, deletes — follow-up bd-zxt49 — and pre-column rows); never user attribution. - `bd events tail/export` JSON gains an additive, omitempty `actor` field; the wire vocabulary is otherwise untouched (openapi spec, reference doc, CHANGELOG; golden regenerated deliberately). - CLI bundle: direct-DDL override for 0066 in cliCompatibleMigrationSQL — dolt 2.2.0 (CI's pin) no-ops the prepared ALTER (dolthub/dolt#11345), so without it the parity oracle sees actor only on the runtime side. Measured: AllMigrationsSQL() through 2.2.0 lands bd_events_journal WITHOUT actor and 2.3.1 WITH; with the override both land it. String assertions + a requireDoltColumnShape guard pin it without a Dolt binary. Verified (enumerated): go build ./...; gofmt; go vet; migration hygiene (BASE_SHA=07c163df0); internal/storage/schema (string test + CLI-apply test under dolt 2.3.1 AND 2.2.0); internal/storage/domain/...; eventsjournal; journalops; httpapi (wire-tag bijection incl. actor); storage/dolt -run 'Journal|EventsJournal|ActorAttribution' against real dolt; cmd/bd -run Events (golden); storage/uow -p 1 (-timeout 90m): every test green except 3 timeout-shaped reds (ConcurrentInstantiation lock-acquire, EndToEnd 30s init-schema, PreexistingDirty docker reaper) in a /private/tmp worktree under box load 40-68; the same 3 at origin/main in that worktree also red, and at THIS commit in the primary clone all 3 PASS (130s) — box flake, not the diff. * docs(events-journal): align seq:4 example with the actorless golden fixture Maintainer review follow-up on PR #5908 (bd-mbrxm). Both reviewers flagged that the reference JSONL example's seq:4 is_blocked derived-maintenance row carried "actor":"worker-1", contradicting the record-contract field table (derived is_blocked recomputes are actorless) and the golden fixture cmd/bd/testdata/events_journal_records.jsonl, which emits that same seq:4/bd-100 row without an actor. Drop the actor member so the doc example mirrors the fixture byte-for-byte and consumers do not misclassify a system recompute as a user write. The other, optional review nit (the "stray typographic quote" in the insertEventRow doc comment) is intentionally left as-is: that glyph is gofmt's canonical rendering of '' in a Go 1.19+ doc comment (TeX-style quoting turns two ASCII apostrophes into U+201D), so the reviewers' literal '' suggestion is a no-op the enforced pre-commit gofmt reverts on every commit. It is cosmetic and non-gating; the DDL and INSERT are already correct. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Eddie the Engineer <julianknutsen@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>