Commit Graph

2342 Commits

Author SHA1 Message Date
Ed Langley fb3358a0ff Merge pull request #291 from fiddlerwoaroof/fold-memo/metf-opbo
Land #258 268 to main (merged into stale bases)
2026-09-24 02:40:11 -07:00
Edward Langley 3f98a17cd5 Merge gh/main (220abc61) into fix/gk51-non-item-record-projection
resolve.rs, `reopened_at`: #227/#272 made the editable arm a
`match writes { true => awaiting_seed, false => opened_on(state, ..) }`.
Kept that new shape and re-applied this branch's declining
`NonItem => SetStatus(non_item_refusal(..))` arm ahead of it, so a
non-item cell still reopens no editor whether or not the frame writes.
`uneditable`'s NonItem arm merged cleanly and is unchanged. Both guard
tests pass; the rival (NonItem folded into the editable arm) fails
an_advance_in_the_browser_re_opens_no_editor_on_a_non_item_cell.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:24:15 -07:00
Edward Langley 4fe8c0dc7b Merge gh/main (220abc61) into fix/cota-assume-unchanged
context/test-evidence/tooling.md: both sides appended at the same point
(this branch's cota entry; gh/main's checkers-test and later entries).
Both kept.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:21:29 -07:00
Edward Langley 37ff61f9de Merge #274's head (bce496b7, gh/main 220abc61) into fix/joed-waiting-commit-keeps-text
Conflicts, all in resolve.rs:
- commit_value and rename_coordinate: joed's `Step::Local(commands)`
  return, plus #227's success-path `cleared(&edit_mode)` and
  `advanced(.., writes)`. The waiting, `Gone` and 3h9w declines all
  return (as `Step::Declined`) before any clear. That is the joed
  ordering constraint.
- `STILL_WAITING` and `cleared` kept side by side.

Fault injected: a waiting decline that also clears the buffer fails
a_commit_that_waits_for_the_host_keeps_the_typed_text,
a_value_commit_before_the_host_answers_the_last_one_waits_out_loud and
a_rename_that_waits_for_the_host_keeps_the_typed_text.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:21:24 -07:00
Edward Langley e14537973f Merge gh/main (220abc61) into wave/tej1-browser-delete-formula
context/test-evidence/command.md: both sides inserted entries at the
same point (this branch's remove_formula_of_a_missing_formula_is_a_refusal;
gh/main's fy9o entries from #227). Both kept.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:17:41 -07:00
Edward Langley bce496b715 Merge #251's head (3f5f90a5, gh/main 220abc61) into fix/8xq0-editor-commits-opened-record
This branch carries #282 and #286 (5m9z/7mro). The other side now
carries #227 and #272 (fy9o/p6v6). This applies the #227 x #295 recipe
(resolve-b/fy9o-with-295, 3918b126) on top of 8xq0's captured-target
commit.

- client.rs: `settle_awaited_seed()` then `settle_declined_editor()`.
  One `settle_awaited_seed`, which needs both no unanswered write and a
  projected cell (`projected_seed`).
- resolve.rs:
  - `opened_on(state, ..)` and `seeded` from p6v6. 8xq0's
    `opened_at_cursor` is kept.
  - 8xq0's `written` over the captured `OpenedCell` and `still_waiting`
    are kept, and fy9o's `cleared` is added. The position-based
    `written` and `record_at_cursor` from the other side are dropped,
    because 8xq0 replaced them.
  - `commit_value` and `rename_coordinate`: `cleared` after
    `ChangeMode(Normal)`, after every decline's early return (joed).
    `advanced(.., writes)`.
  - `reopened_at(.., writes)`: `declined_at` first, then
    `awaiting_seed` after a write or on an unprojected landing, else
    `opened_on(state, ..)`. One `awaiting_seed`.
  - The capture still reads through `projected_at` (`cell_at_cursor`),
    and `refused_here`'s 3h9w arm is kept (`state.opened.is_some()`).
- lockstep: #286's `sent` renamed `sent_to_host` (E0428). The held-cell
  test delivers its held replies before it reads an awaiting editor.
- Ids for the three p6v6 fixture cells that had none.
- context/test-evidence/clients.md: both sides kept, plus the held-cell
  amendment.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:17:16 -07:00
Edward Langley fa080f481f Merge gh/main (220abc61) into fix/a61f-aopa-test-doors
context/test-evidence/clients.md: both sides appended at the same point;
both kept.

resolve.rs merged cleanly. Since improvise-3uzg (#272), an editor
reopened after a write waits for the host's seed, and only the send door
records the frame as awaiting that answer. Two tests assumed the answer
without stating it:
- the end of enter_commits_the_cell_advances_and_re_enters_editing
  folded through `ClientState::fold` (a tenth host-door site). It now
  folds through `fold_outgoing` and then calls `accepted()`;
- the_editor_an_advance_reopens_starts_untouched already used
  `press_folded`, so it failed after the merge. It now calls `accepted()`
  after Enter.
Rival: `OpenedEditor::awaiting()` built with `touched: true` fails both.
The aopa evidence entry records it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:14:43 -07:00
Edward Langley eded3179bc Merge fix/8wy9-restore-rebuild (b32a7690) into fix/3til-restore-order 2026-09-24 02:12:01 -07:00
Edward Langley 3f5f90a5c9 Merge #221's head (c7b5b825, gh/main 220abc61) into fix/20ek-milr-rename-races
Conflicts:
- resolve.rs: milr's `claimed` and fy9o's `cleared` sit side by side.
  Both functions kept. `rename_coordinate` keeps milr's `Opened` arms. The
  waiting and `Gone` declines return before #221's success-path
  `cleared` (the joed constraint).
- context/test-evidence/clients.md: both sides kept.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:11:18 -07:00
Edward Langley 044e8d2d8d Merge fix/xd3q-reset-clobbers-pipelined-placement (d0e36142) into fix/1x9h-browser-refusal-stands 2026-09-24 02:07:46 -07:00
Edward Langley c7b5b825e8 Merge gh/main (220abc61, #227+#272, #297) into fix/fdk1-coordinate-rename
Conflicts:
- client.rs accepted(): both settles, in `fold`'s order:
  settle_editor (fy9o/p6v6 awaited seed), settle_opened (fdk1 capture),
  then the revision bump.
- resolve.rs edit_or_drill: a Coordinate opens like a Record, through
  p6v6's `opened_on(state, ..)`, which waits while a write is unanswered.
- resolve.rs rename_coordinate: fy9o unwelded `clear-buffer` from the
  commit keys, so the rename clears its own buffer on the success path,
  after ChangeMode(Normal). It passes `advanced(.., writes)`, where
  `writes` is whether the frame composed the rename. The waiting decline
  still returns before any clear (the joed constraint).
- resolve.rs reopened_at: the decline arm first (Coordinate { .. }), then
  `awaiting_seed` after a write, else `opened_on(state, ..)`.
- lockstep.rs: both sides' new tests kept.
- context/test-evidence/clients.md: both sides kept.
- browser_round_trip `a_second_rename_after_a_reorder_renames_the_row_the_host_shows`:
  the reopened editor is now seeded from the answered cell. The test
  asserts that seed, then clears it before typing. Evidence amended.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:07:26 -07:00
Edward Langley 1c6600c3e7 Merge gh/main (220abc61) into fix/oplp-followups
context/test-evidence/clients.md: both sides inserted entries at the
same point (this branch's two tile-select lockstep entries; gh/main's
fy9o/5wai entries from #227). Both kept.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:05:49 -07:00
Edward Langley d0e36142ff Merge fix/hv0r-jpba-relays (37dbf02e) into fix/xd3q-reset-clobbers-pipelined-placement
# Conflicts:
#	context/test-evidence/clients.md
2026-09-24 02:04:55 -07:00
Edward Langley 941eb0fd8e Merge commit '9a0d1ba7' into rb-245 2026-09-24 02:03:28 -07:00
Edward Langley 9a0d1ba77a Merge gh/main (220abc61) into tooling/dak5-ci-suites
#297's rulings kept: no bash floor, no find_modern_bash probe in
checkers.sh (it runs suites under the dev shell's $BASH), and no
toolchain-policing step in the build job. This branch's CI table kept:
ci_suites, --ci, --would-run, and the --ci steps in ci.yml (build, js, kb),
which replace gh/main's hand-listed kb, --self-test and remaining-checkers
steps. The kb row already runs every suite those steps named.
check-ci-graph passes on the merged ci.yml.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 02:00:44 -07:00
Edward Langley 37dbf02e4e Merge gh/main (220abc61) into fix/hv0r-jpba-relays
# Conflicts:
#	context/test-evidence/clients.md
#	crates/improvise-protocol/src/client.rs
2026-09-24 02:00:09 -07:00
Edward Langley 65d6a3e163 Merge gh/main (220abc61, #227+#272, #297) into fix/7mro-projected-reads
Applies the #227 x #295 resolution recipe from resolve-b/fy9o-with-295
(3918b126). The tree equals `merge-tree 3918b126 220abc61`, which
merges cleanly, because main moved past #227 only in tooling files.

- client.rs: `settle_awaited_seed()` then `settle_declined_editor()`.
  One `settle_awaited_seed`, which needs both no unanswered write and a
  projected cell (`projected_seed`).
- resolve.rs `reopened_at(.., writes)`: the decline arm first, then
  `awaiting_seed` after a write, or when the landing is unprojected,
  else `opened_on(state, ..)`. One `awaiting_seed`.
- lockstep: #286's `sent` renamed `sent_to_host` (E0428).
- Ids for the three p6v6 fixture cells that had none.
- `a_held_cell_is_read_at_its_position_and_not_its_cache_index` delivers
  its held replies before it reads an awaiting editor. Evidence amended.
- `cleared` stays on commit's success path only (the joed constraint).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 01:58:59 -07:00
Ed Langley 3e41772921 Merge branch 'main' into fix/e265-levelled-groups 2026-09-24 01:57:38 -07:00
Ed Langley b32a769044 Merge branch 'main' into fix/8wy9-restore-rebuild 2026-09-24 01:57:34 -07:00
Ed Langley 3c5135402d Merge branch 'main' into test/4h8a-sfwy-guards 2026-09-24 01:57:32 -07:00
Ed Langley f0d68b9d99 Merge branch 'main' into fold-memo/metf-opbo 2026-09-24 01:57:25 -07:00
Ed Langley 088d469fbb Merge branch 'main' into fix/oyaa-host-list-complete 2026-09-24 01:57:22 -07:00
Ed Langley ff7ea6d706 Merge branch 'main' into fix/qnry-ybum-clamps 2026-09-24 01:57:19 -07:00
Ed Langley 8f218644fe Merge branch 'main' into fix/3j70-config-witness 2026-09-24 01:57:16 -07:00
Ed Langley 32b64f18e2 Merge branch 'main' into fix/qz9p-drill-refusal 2026-09-24 01:57:13 -07:00
Ed Langley a6b5acc24d Merge branch 'main' into fix/i3o5b-panel-dispatch-refuse 2026-09-24 01:57:10 -07:00
Ed Langley 220abc61dd Merge pull request #297 from fiddlerwoaroof/fix/nixos-bin-paths
ci: take bash and tools from the .#ci dev shell; no hard-coded paths or version policing (improvise-3uow)
2026-09-24 01:56:36 -07:00
Edward Langley c29e32f1bb pr-reviews-test: delete the fake clock's untested date pass-through
Copilot on #297: `pr-reviews` only calls `date +%s`, so the REAL_DATE
pass-through never ran. It is deleted rather than tested. The fake now refuses
any other arguments with exit 2, so a new `date` call shows up as a failure.

Rival: with pr-reviews calling `date -u +%s`, "a review arriving on the third
poll is seen" and "--wait keeps polling until its deadline" fail (23/25).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-24 01:38:37 -07:00
Ed Langley 0d1f0c9eb5 Merge pull request #227 from fiddlerwoaroof/fix/fy9o-reopened-editor-reseeded
A reopened cell editor shows the cell it landed on (improvise-fy9o), stacked on #205
2026-09-24 00:56:10 -07:00
Edward Langley cfa8bf1e0a Refuse a frame whose level names no category; lend the open-run stack
Two ChatGPT Codex findings on the #250 stack.

- #250, P2 (improvise-e265): a FrameGroup.level from the wire sized the
  open-run stack in AxisFrame::groups, so a huge level drove a huge
  allocation. AxisFrame now deserializes through UncheckedAxisFrame and
  refuses any group or GroupEnd level not below cats.len(), naming it.
  context/code/protocol.md §3b.
- #273, P3 (improvise-0r01): the lazy open_runs still cloned a stack per
  skipped row under .nth(idx). walk_open_runs lends one stack to a visitor
  that can stop the walk, so a lookup copies nothing for earlier rows.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:41:48 -07:00
Edward Langley 754add31e2 ci: take bash and tools from the .#ci dev shell; stop policing versions
This follows the user's rulings: CI should not care which bash or which
standard utilities it runs, and jobs take what the ci dev shell provides.

- checkers.sh: remove find_modern_bash, the 5.1 floor (improvise-fd0j) and
  exit 3. Suites run under $BASH with PATH unchanged.
- checkers-test.sh: remove sections 2, 5 and 5b (the fake bashes and utilbin).
  They existed only to pin the floor.
- scripts/kb: drop the BSD `stat -f` fallback. kb needs the dev shell for tpl,
  and that shell's stat is GNU.
- ci.yml: remove every `shell: bash` override, so every step runs in the dev
  shell. Remove the web-toolchain version probe and the Playwright
  version/browser probe. The shell's PLAYWRIGHT_BROWSERS_PATH pins the
  browsers. npm ci stays because @playwright/test is not nix-provided.
- flake.nix: update the comments that promised those CI checks.

Reasoning: context/code/tooling.md section 5. Evidence:
context/test-evidence/tooling.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:32:54 -07:00
Edward Langley e44b1491ca Merge gh/main (cc95cfbf) into fix/e265-levelled-groups
# Conflicts:
#	context/test-evidence/command.md
#	context/test-evidence/core.md
2026-09-23 23:26:55 -07:00
Edward Langley 8308cb8b7e Merge fix/8wy9-restore-rebuild (3edb6302) into fix/3til-restore-order
# Conflicts:
#	context/test-evidence/command.md
2026-09-23 23:24:28 -07:00
Edward Langley 68f32a8a55 pr-reviews-test: resolve sleep and date from PATH, not /bin (improvise-3uow)
On the NixOS runners /bin holds only sh. With no /bin/sleep, the watchdog in
bounded_reviews exits at once and wins the `wait -n`, so every --wait case
reports 124. Both tools are now resolved with `type -P` before any case stubs
PATH.

Red: with both paths pointed at /nonexistent/, the suite fails 25 of 25.
Rival: REAL_SLEEP=/nonexistent/sleep fails 25 of 25 again. The date
pass-through has no discriminating rival, because pr-reviews only calls
`date +%s`. Evidence: context/test-evidence/tooling.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:23:46 -07:00
Edward Langley 3edb63022c Merge gh/main (cc95cfbf) into fix/8wy9-restore-rebuild
# Conflicts:
#	context/test-evidence/command.md
2026-09-23 23:22:07 -07:00
Edward Langley e64e8f14ee test: a non-item cell re-opens no editor, on either end
The merge with #277 gave `uneditable` and `reopened_at` a declining NonItem
arm. These tests fail if either arm is moved to the editable branch.
Rivals and results are in context/test-evidence/command.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:21:37 -07:00
Edward Langley d94dad4046 Merge #228 (0588d433) into fix/zs2r-harness-lock-gate
ci.yml: this branch's check-harness-lock --allow-network step is kept, ahead
of main's nix-build clippy and test steps that #228's merge brought in.
test-evidence/tooling.md: both EOF appends kept, no heading lost (42 = union).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:19:47 -07:00
Edward Langley 1629944eac Merge gh/main into fix/gk51-non-item-record-projection (#292)
Conflicts:
- cmd/core.rs committable_cell_key: took main's form, which asks
  `uneditable` (#277), and gave `uneditable` a declining NonItem arm.
  That keeps this branch's refusal of a commit on a non-item cell.
- resolve.rs reopened_at (auto-merged, non-exhaustive after the merge):
  a declining NonItem arm, the sentence `i` already says.
  The #277 review asked for both arms to decline, never to open.
- tests/shipped_documents_load.rs: kept both, this branch's
  every_record_a_shipped_document_projects_is_writable and main's git()
  helper.
- context/test-evidence/{command,core}.md: both sides appended at EOF; kept
  both, the branch's first.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:19:46 -07:00
Edward Langley 86afdb0a36 Merge gh/main (cc95cfbf) into test/4h8a-sfwy-guards
# Conflicts:
#	context/test-evidence/command.md
#	context/test-evidence/core.md
2026-09-23 23:19:23 -07:00
Edward Langley 024aa2d301 Merge commit 'cc95cfbf' into docs/sboz-stable-identities 2026-09-23 23:18:39 -07:00
Ed Langley cc95cfbfdd Merge pull request #296 from fiddlerwoaroof/fix/checkers-bash-floor-ci
checkers-test: run section 5b on the hermetic utilbin PATH (unbreaks KB job)
2026-09-23 23:17:35 -07:00
Edward Langley 0588d433ca Merge gh/main (666de199) into tooling/dak5-ci-suites
ci.yml: main's NixOS-runner rewrite, with this branch's --ci build and --ci kb
steps. Main's separate `checkers.sh kb` step is dropped (the kb row runs it),
and so is the `nix shell nixpkgs#trealla` wrapper (the dev shell supplies tpl).
test-evidence/tooling.md: both EOF appends kept, no heading lost (41 = union).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:15:11 -07:00
Edward Langley 0b645a8f0e Merge fix/xd3q-reset-clobbers-pipelined-placement (75ce4230) into fix/1x9h-browser-refusal-stands 2026-09-23 23:15:08 -07:00
Edward Langley 4989bd55f7 checkers-test: run section 5b on the hermetic utilbin PATH
Section 5b (the bash 5.1 floor, #237) was written on a branch cut before the
NixOS-runner change (af44653f). That change moved section 5 off /usr/bin:/bin,
because on NixOS that path holds only env and sh. The two merged with no
conflict. On NixOS the runner then dies on `dirname` with exit 1, which turned
the KB job red on every PR at 666de199.

5b now uses utilbin too, and utilbin gains head and env for the 5.1 control.
Evidence and rivals: context/test-evidence/tooling.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:14:30 -07:00
Edward Langley 901f7fadc5 check-ci-graph: a defaults: run: shell: no longer disqualifies a step (the user's ruling)
Main's PR #287 added a workflow-level defaults shell, and the refusal made every
suite read as unrun. The two cases that pinned it are deleted; one shows a step
under workflow and job defaults is counted.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:13:36 -07:00
Edward Langley ef30dcd941 Merge gh/main (666de199) into fix/7mro-projected-reads
Conflicts:
- context/test-evidence/clients.md: both sides' entries kept.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:12:35 -07:00
Edward Langley 75ce42309a Merge fix/hv0r-jpba-relays (361ba50e) into fix/xd3q-reset-clobbers-pipelined-placement
# Conflicts:
#	context/test-evidence/clients.md
#	context/test-evidence/command.md
2026-09-23 23:11:00 -07:00
Edward Langley d6f74847f8 Merge gh/main into fold-memo/metf-opbo (#291)
One conflict, context/test-evidence/command.md: both sides appended at EOF.
Kept both entries, the branch's first.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:10:49 -07:00
Edward Langley 271f34978b Merge gh/main (666de199) into fix/fy9o-reopened-editor-reseeded
This head already carries #272 (p6v6), merged at d9c65181.

Conflicts:
- resolve.rs advanced: main's `reopened_at` (decline an aggregate or a
  formula's result) now takes this branch's `writes` and answers the
  decline arm first, then `awaiting_seed` or `opened_on(state, ..)`, as
  the #282 review prescribed for this combination.
- context/test-evidence/{clients,command}.md: both sides' entries kept.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
2026-09-23 23:07:51 -07:00
Edward Langley 361ba50e6c Merge gh/main (666de199) into fix/hv0r-jpba-relays
# Conflicts:
#	context/test-evidence/clients.md
#	context/test-evidence/command.md
2026-09-23 23:07:10 -07:00