Skip to content

Main drift-gate red: home Lane D's plan-doc cross-links in the .dag authorities - #6503

Merged
briansrls merged 3 commits into
mainfrom
fix/plan-doc-authority-links
Jul 11, 2026
Merged

briansrls merged 3 commits into
mainfrom
fix/plan-doc-authority-links

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Main has been red on generated_artifact_drift_gate_passes since #6474 (Lane D) hand-added the provisioning-window design cross-links to two generated plan docs (emission-ingestion-inverse.md, shell-emission-model.md) without backing rows — the gate correctly refuses a doc its .dag authority doesn't derive. The red was masked behind the s1/ci_deploy/witness-pin floor reds and surfaced as the sole remaining failure once #6498/#6500/#6501 cleared them (batch-3 generated_artifact_drift_gate_passes returned Bool(false) on main runs 29165555785 / 29167030699).

Fix preserves Lane D's intent instead of regen-deleting it: the two link sentences move into the .dag doc authorities (dag/gunbc/plans/emission_ingestion_inverse.dag, dag/gunbc/plans/shell_emission_model.dag), from which main_wet now regenerates the checked-in docs byte-identically (zero doc diff after regen — the pair is consistent).

Receipts (by execution on this head, clean checkout): main_wet regen → no doc changes; generated_artifact_drift_gate_passes false → true.

🤖 Generated with Claude Code

…uthorities

generated_artifact_drift_gate_passes has been red on main since #6474
(Lane D) hand-added the provisioning-window design links directly to the
GENERATED docs/plans/emission-ingestion-inverse.md and
docs/plans/shell-emission-model.md without the backing rows - the gate
correctly refuses a doc that its .dag authority does not derive (the red
was masked behind the s1/ci_deploy/witness-pin floor reds until
#6498/#6500/#6501 cleared them). Fix keeps Lane D's intent: the two link
sentences move into dag/gunbc/plans/{emission_ingestion_inverse,
shell_emission_model}.dag, from which main_wet now regenerates the
checked-in docs byte-identically (zero doc diff after regen).
generated_artifact_drift_gate_passes: false -> true by execution on this
head.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…it-2 on plan-artifact diffs)

The plan-artifact-only floor shortcut invoked claim_executor with
gunbc-run-style --entry/--function flags it does not parse - the arm
died 'unknown argument: --entry' exit 2 on the FIRST docs-only diff to
reach it (this PR's own run 29167744076; latent since the arm landed).
The gate also cannot run standalone: dag_compile_clean_gate_passes only
CONSUMES the executor's in-run whole-tree --target dag compile receipt
(standalone gunbc-run invocation refuses, proven by execution).

Fix: the shortcut is now claim_executor --plan-entry ci_floor_plan.dag
--plan-function gunbc_ci_plan_artifact_batches, where the new plan fn is
batch 1 of the existing floor schedule (the compile-clean anchor - the
plan's one structural fact) - same executor path, no parallel gate
runner. claim_executor arms the compile-clean lazy install for this plan
name alongside gunbc_ci_floor_batches. Shortcut witness repinned to the
plan-path invoke; ci.yml regenerated.

Receipts by execution: RED = run 29167744076 exit 2 + standalone refusal;
GREEN = local run of the exact new invoke (whole-tree compile receipt
ok=true, 1/1 node pass, exit 0); ci_spec_witnesses true; drift gate true.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor Author

The CI failure on 2d6c323 was not the drift fix — it exposed a second latent main bug, fixed in 45f2203976: the docs-only floor shortcut (which this PR's plan-artifact-only diff is the first to trigger) invoked claim_executor with --entry/--function flags it doesn't parse → unknown argument: --entry, exit 2. The gate also can't run standalone — dag_compile_clean_gate_passes only consumes the executor's in-run whole-tree --target dag compile receipt (standalone gunbc run invocation refuses, proven by execution).

Fix routes the shortcut through the executor plan path: new gunbc_ci_plan_artifact_batches = batch 1 of the existing floor schedule (the compile-clean anchor), claim_executor arms the compile-clean lazy install for that plan name, shortcut witness repinned, ci.yml regenerated. Receipts in the commit message (RED = this PR's run 29167744076 + standalone refusal; GREEN = exact new invoke locally, compile receipt ok=true, exit 0; ci_spec_witnesses true; drift gate true).

This PR now carries both halves needed to get main green: the drift-gate fix and the shortcut fix its diff-class exercises. — sent from eager-gull-872

@gunbai-bot

gunbai-bot Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor Author

One note on the review remark that gunbc_ci_plan_artifact_plan_spawn_width is unused: it is consumed at runtime, not by a static reference — claim_executor::spawn_width_function_name derives the name from the plan-function string (strip _batches, append _plan_spawn_width) and evaluates it in the plan graph; the local GREEN receipt ran at spawn_width=4 through exactly that path. Deleting it as dead would make the shortcut plan fall back to serial. — sent from eager-gull-872

…val, skip-masked)

claim_executor derives the spawn-width fn name from the plan-function
string (strip _batches, append _plan_spawn_width) and the eval is FATAL
when the fn is absent. ci_regen (#6393) and the falsifier got theirs;
gunbc_ci_emit_determinism_plan_spawn_width was never authored when #6472
split the job - and every green since was an affected-set SKIP, so the
job died at spawn-width eval ('no main function found', exit 1) on the
first diff to touch ci_floor_plan.dag and actually execute it (this
PR's run). Delegates to gunbc_ci_plan_spawn_width like the regen
variant. Receipt by execution: the emit-determinism plan now prints
spawn_width=4 from the derived name and enters its batch walk.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor Author

The emit_determinism failure was main-latent bug #3 in this PR's path, fixed in 14d367ad34: the job's plan spawn-width fn (gunbc_ci_emit_determinism_plan_spawn_width) was never authored when #6472 split the job — claim_executor derives that name from the plan-function string and the eval is fatal when absent (no main function found, exit 1). ci_regen (#6393) and the falsifier got their delegating fns; this one was missed, and every green since the split was an affected-set skip — this PR's diff is the first to touch ci_floor_plan.dag and actually execute the job. Receipt by execution: the emit-determinism plan now prints spawn_width=4 from …gunbc_ci_emit_determinism_plan_spawn_width and enters its batch walk locally.

This PR is now three serially-exposed main fixes: drift gate → docs-only shortcut → emit-determinism spawn-width. Each was masked by the one before it. — sent from eager-gull-872

@briansrls
briansrls merged commit 5cfe0c1 into main Jul 11, 2026
3 checks passed
@briansrls
briansrls deleted the fix/plan-doc-authority-links branch July 11, 2026 22:08
gunbai-bot Bot pushed a commit that referenced this pull request Jul 11, 2026
…d authorities

This branch's earlier regen ran while the .dag plan authorities lacked
the link rows (pre-#6503), so it had written the docs linkless; the
merge kept that side while main brought the link rows. main_wet now
re-derives the linked docs - pair consistent, drift gate green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Jul 12, 2026
… cost/routing work (#6489)

* witness-cost-locality lens v0: one typed verdict for the two ambient-coupling axes (receipt-only)

One law: witness cost must be denominated in its subject (the DESIGN 5
denomination law). Two detectable projections at module grain:
DataBreadth (closure reaches an ambient-read carrier: filesystem_read
callers + the decl_facts reflection home) and LayerDepth (closure spans
>=2 compiler pipeline stages - the round-trip shape). Verdict algebra +
census receipt + precision-frontier disclosures as data; six fixture
witnesses incl. the single-stage boundary and a red control (law
perturbed to >=1 flips single_stage_closure_stays_local red - receipted).

Census 2026-07-11 over the 732-entry roster: Local 483 / LayerDepth 229 /
DataBreadth 9 / both 11; derives the operator-ruled-offline enforcement
rows and the execution/ exclusions; falsified two naive laws (decl_facts
reflection invisible to filesystem_read grep; hermetic fixture rows
over-flagged - the declared InputEnvelope is the override authority).
LayerDepth is receipt-only until fn-grain call-graph reachability lands
(ci_yaml counter-receipt: stage-type imports are not stage execution).

Dissolve-on: fn-grain reachability + InputEnvelope declarations wired
into floor admission; the witness_exclusion hand-rows and this v0
roster retire together.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Add the required construction_justification row (cursor review)

WallAfterGrounding dissolving to SingleAuthority: the verdict is
validation-tier until fn-grain reachability + InputEnvelope declarations
let floor admission consume it, at which point non-Local rows are
structurally absent from the per-PR plan (the single authority) and the
lens dissolves per its precision-frontier note.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [ITERATION-ONLY - REVERT BEFORE MERGE] Route CI to ubicloud runners

Self-hosted fleet has no free slots (operator, 2026-07-11); route this
PR's iteration to ubicloud-standard-16-arm so the lens work is not
gated on fleet capacity. Same move as the #6107 -> #6111 precedent.

gunbc_ci_runner_spec() returns the ubicloud label; the fleet
derivation is preserved untouched as gunbc_ci_runner_spec_fleet_derived()
and ubicloud_iteration_routing_note carries the revert obligation.
Workflows regenerated from the authority via main_wet (drift gate
stays coherent): runs-on [ubicloud-standard-16-arm] at ci.yml
build_release/floor/emit-determinism and falsifier.yml.

Revert = git revert this single commit + regen (or just revert; the
regenerated ci.yml/falsifier.yml are included here).

* Closure facts + per-PR admission law: the transitive-carrier case becomes provable, and verdict x envelope decides the lane

Extends the v0 lens with the fact half its census note promised:

- ModuleImportFact + import_closure: module-grain closure over declared
  import facts, the |E|-sweeps fixpoint shape sanctioned by
  v2.lens.affected_set (pass + frontier-stability + doubled-facts fuel,
  early-stable). Terminates on cyclic FACT rows - the substrate refuses
  cyclic imports, but the fold must not trust its input.
- witness_cost_locality_from_facts: closes over the facts so the
  transitive carrier (the enforcement_live falsification - the corpus
  read two hops away) is provable in fixtures, not just prose.
- WitnessInputEnvelope + per_pr_admission: the admission matrix
  (verdict x declared envelope), fail-closed with
  declaration-wins-when-stricter. DeclaredCorpusInput always routes to
  the scheduled lane; DeclaredBoundedFixture is the hermetic override
  (reachability over-approximates; the scheduled falsifier lane is its
  audit); EnvelopeUndeclared admits only Local - the
  refused_undeclared_when_envelope_unknown shape from InputEnvelope P0.
  RouteScheduledLane is a typed routing verdict, never a silent drop.

Witnesses (7 new, 13 total, all green by execution; the suite itself
stays Local-class: 393ms resolve, 0ms eval, fixture-only):
- two-hop transitive carrier couples on DataBreadth; severing the mid
  hop flips it Local (the discriminating pair)
- cyclic facts terminate and still reach the carrier
- admission matrix cells incl. the RED control: undeclared + coupled
  never rides the continuous floor

* Resolve the cargo binary at toolchain-pin time; stop baking the fleet's shim path into the build line

The build line invoked "$CARGO_HOME/bin/cargo" - a fleet fact fused
into the job model. On a runner image whose rustup pre-exists (ubicloud,
GitHub-hosted), setup-rust-toolchain never runs rustup-init, so no shim
lands under the isolated $CARGO_HOME and the build dies with "No such
file or directory" (run 29161556017). The isolated RUSTUP_HOME/CARGO_HOME
env still governs whichever shim exists - only the shim's LOCATION is
realization-specific.

Fix: the pin step (already the "make the isolated toolchain invocable"
step, name unchanged so the cost-floor roster keeps resolving; no new
run-step so the raw-script count pin holds) resolves CARGO_BIN once -
isolated shim if present, else PATH - and refuses loudly when neither
exists (fail-closed, DESIGN 5). ci_release_build_line invokes
"$CARGO_BIN"; the retry escalations' env-prefix composition is
unchanged since it stays one word. Falsifier inherits via the shared
prelude. Workflows regenerated via main_wet.

witness_rustup_run_plain_not_quoted repinned as
witness_rustup_run_block_scalar_not_quoted: the pin step is now
multi-line so its run correctly serializes as a block scalar; the
property the witness guards (quote-laden content never YAML-escaped,
negative control kept) is unchanged. ci_yaml_serializer_keystone_holds
green by execution; 18-entry consumer sweep green except 3 witnesses
red on unedited baseline too (pre-existing/environmental).

* [ITERATION-ONLY - REVERT BEFORE MERGE] Reconcile the runner seam witness with the ubicloud override

Cursor catch (review on the folded #6490, restated on #6489): the
routing override left ci_runner_seam_holds red - it pinned
gunbc_ci_runner_spec() to the fleet derivation and the yaml to
[self-hosted, linux, arm64].

Reconciliation, discriminating in both directions during the window:
the fleet-derivation witnesses repoint to
gunbc_ci_runner_spec_fleet_derived() (the derivation authority stays
proven and un-drifted), the live-spec witnesses pin the override label
exactly (drift of the override itself is caught), and the
workflow==live-spec seam witness is unchanged. ci_runner_seam_iteration_note
carries the revert obligation; this commit reverts together with the
routing commit (3f203d8). ci_runner_seam_holds green by execution.

* Revert the iteration-only ubicloud routing (operator go 2026-07-11: iteration window closed, focus on merge)

Restores gunbc_ci_runner_spec() to the fleet derivation as the single
runner authority and the seam witnesses to pinning it (reverts
3f203d8 + 36e4cd3 as one motion); workflows regenerated via
main_wet back to [self-hosted, linux, arm64]. The CARGO_BIN
resolution (a03142d) stays - fleet-neutral portability fix, proven
by execution on both runner classes (fleet floors unchanged; ubicloud
build green run 29162064482). ci_runner_seam_holds and the serializer
keystone green by execution on the reverted head.

What the iteration window bought, for the record: the CARGO_BIN
portability bug (fixed), the 12.5-min full floor + 13.5GiB-uncapped
counterfactual receipt that pinned the fleet wedge on the memory.high
throttle (now fixed at the budget edge in #6495), and the surfacing of
the #6459 batch-2 panic (fixed in #6493).

* Runner offers modeled + one selection authority: labels, memory regime, and budgets project from the selected target

Operator asks 2026-07-11: model the runner rows (github, ubicloud;
fleet existed) and make the mappings clear - then "stay on ubicloud
for this change; self host runners are still contended."

extdeps (cited, zero fabrication):
- extdeps.cloud.ubicloud: the 10 documented runner shapes
  (runner-types.md anchor; arm 3GB/vCPU, x64 4GB/vCPU kept as vendor
  facts; the standard-16-arm observed MemTotal receipt recorded
  SEPARATELY from the catalog claim, discrepancy noted not reconciled)
- extdeps.github.hosted_runners: the Ubuntu family with repository
  VISIBILITY as a first-class axis (public 4vCPU/16GB vs private
  2vCPU/8GB for the same label - folding it away would be a
  state-space conflation); version-pinned labels, ubuntu-latest alias
  deliberately not a row

gunbc.ci_runner_target (the missing edge the iteration window proved):
- CiRunnerTarget = FleetSelfHosted | UbicloudRunner{row} |
  GithubHostedRunner{row}; selected_ci_runner_target() is THE switch
- projections: runs-on spec (fleet stays DERIVED from the fleet offer;
  cloud rows carry the provider's cited token), memory regime
  (SlotCarved{desired} with the 15GiB throttle line vs
  WholeMachine{ram}), RAM-speed budget (fleet -> slot ceiling;
  cloud -> catalog ram)
- ci_workflow, falsifier_workflow, floor budget, falsifier width all
  read the projections: flipping the selection row moved runs-on AND
  CARGO_BUILD_JOBS (4 -> 11, from the 48GB row) AND floor width in one
  regen - the propagation the label-only model could not do
- selection = ubicloud-standard-16-arm (operator routing, fleet
  contended); flip back = FleetSelfHosted + regen, nothing else moves
- falsifier now rides the selected shape too: its pinned fleet-slot
  capacity deficit witness stays parameterized on the FLEET ceiling
  (the deficit is a slot fact), while on 48GB its envelope fits with
  3x headroom - the nightly's dissolve-on path

Witnesses: ci_runner_target_witnesses (fleet-derivation identity,
ubicloud/github label projections, both regimes, cited arm ratio held
across the family, visibility-axis discrimination) + seam witnesses
repinned to the selection authority with the fleet derivation kept
live for the flip back.

* Width-fit witness measures against the machine the plan runs on (the selected target budget), not the fleet slot unconditionally

* Regen after folding the runner-offer selection into this branch (ubicloud labels + JOBS=11 + CARGO_BIN compose)

* Resolve the cargo binary at toolchain-pin time; stop baking the fleet's shim path into the build line

The build line invoked "$CARGO_HOME/bin/cargo" - a fleet fact fused
into the job model. On a runner image whose rustup pre-exists (ubicloud,
GitHub-hosted), setup-rust-toolchain never runs rustup-init, so no shim
lands under the isolated $CARGO_HOME and the build dies with "No such
file or directory" (run 29161556017). The isolated RUSTUP_HOME/CARGO_HOME
env still governs whichever shim exists - only the shim's LOCATION is
realization-specific.

Fix: the pin step (already the "make the isolated toolchain invocable"
step, name unchanged so the cost-floor roster keeps resolving; no new
run-step so the raw-script count pin holds) resolves CARGO_BIN once -
isolated shim if present, else PATH - and refuses loudly when neither
exists (fail-closed, DESIGN 5). ci_release_build_line invokes
"$CARGO_BIN"; the retry escalations' env-prefix composition is
unchanged since it stays one word. Falsifier inherits via the shared
prelude. Workflows regenerated via main_wet.

witness_rustup_run_plain_not_quoted repinned as
witness_rustup_run_block_scalar_not_quoted: the pin step is now
multi-line so its run correctly serializes as a block scalar; the
property the witness guards (quote-laden content never YAML-escaped,
negative control kept) is unchanged. ci_yaml_serializer_keystone_holds
green by execution; 18-entry consumer sweep green except 3 witnesses
red on unedited baseline too (pre-existing/environmental).

* Unbreak the post-merge-wave floor: absent declared roots skip loudly, the split-spanning gate universe, and the disposition-marker adjacency pin

Three content reds every completed floor now hits, all proven on clean
main (the 60m-timeout and batch-2-panic masks are gone, so the content
layer behind them is finally visible):

1. anchor_source_root panicked mid-floor on "dag/compiler" (run for
   PR #6497, cli_run.rs:365) - a DECLARED root from the
   medium-structure roster that does not exist on disk yet
   (modeled-before-implemented). The layer walk's own is_dir guard
   proves absence is a legitimate skip state there, but the anchorer
   panicked before the guard could run. New non-panicking
   try_anchor_source_root for declared-root walks: absence skips with
   a counted [layer-import] line (loud, never silent); CLI-provided
   roots keep the strict panicking contract.

2. affected_set_universe_gate_processes_match_declared_gates compared
   the Gate coproduct's 10 arms against gunbc_ci_gates - the ci JOB's
   slice (7) since the #6472 job split. The witness now unions
   floor+regen+emit_determinism (the same union its sibling
   witness_gate_roster_matches_coproduct_arms already used); probe
   receipt: the three slices partition the 10 arms exactly.

3. witness_floor_disposition_marker_initialized_before_docs_only_branch
   (landed in today's wave) pinned the stamp DIRECTLY adjacent to the
   docs-only branch, but the emitted script has a blank line between
   them - red on clean main from its first run. The pin now matches
   the emitted adjacency (stamp, blank, _ci_changed) and still proves
   the ordering it exists for.

Receipts: ci_spec_witnesses, all 4 affected_set_universe witnesses,
and the layering clean-tree witness green by execution with the fixed
binary. Remaining known main reds (predate today, tracked separately):
s1_closure_parses_holds (#6459 wrapper-retained diagnostic arm),
ci_deploy_witnesses.

* GithubHostedRunner projects the hosted scalar form (cursor catch)

Ground GithubHostedRunnerCatalogRow.runs_on_label in the actions grammar's
RunnerLabel closed vocabulary (extended with the cited ubuntu-24.04-arm /
ubuntu-slim spellings; runner_label_string stays the single spelling
authority) and route the GithubHostedRunner target through HostedRunner,
whose serialization is the scalar runs-on form GitHub uses for hosted
labels. A labels-list projection would have emitted the self-hosted
label-matching form. Witness repinned to the HostedRunner variant plus a
by-execution runner_yaml discrimination (scalar hosted vs flow-list
label-routed). Ubicloud stays SelfHosted label routing (provider tokens,
proven live 2026-07-11).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci_deploy witness: repin deploy invoke to the rooted source-root spelling

witness_deploy_run_script_invokes_gunbc_wet pinned the unrooted
'--source-root dag' while gunbc_ci_deploy_invoke emits the rooted
'--source-root "$ROOT/dag"' (witness_layer_source_flags_rooted, #6453)
- red on clean main, the third masked layer of the rooted-argv family
(#6493 repinned the scheduler-argv pair). Proven by execution: suite
false -> true on the repin, conjunct-bisected first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* try_anchor_source_root: seed-retained scaffold receipt (cursor #6489 catch)

Hand-Rust expansion now carries the DESIGN §7 shape the same file
requires: authority rows (cli_run_source_root_anchor_scaffold sibling of
the workspace-root scaffold, bind to the declaration), named dissolve-on
(roots walk GENERATED via cli-run-reconcile-defork Chunk F, absence a
typed roster-layer diagnostic; or 5-dissolve-patches), checkable receipt
anchor + counted loc delta, scaffold witnesses green by execution, and a
discriminating unit pair (declared-present -> Some, declared-absent ->
None).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* s1_closure floor panic: wrapper-retained diagnostics must inhabit the Diagnostics coproduct

body_lower_wrapper_retained_shell constructed Accepted with a RAW
NonEmptyDiagnostics in the diagnostics field where the Diagnostics
coproduct (None | Some) is declared - the first downstream match over
Diagnostics (diagnostics_merge in the normalize child fold) panicked
non-exhaustive on every file with a wrapper-retained fn body, killing
the s1_closure witness whenever the affected set selected it. Fix wraps
the singleton in Some. Reproduced red (exact CI panic) and green by
execution via s1_file_parses on dag/std/error_primitives.dag; new
witness pins the shape and returns false (no panic) on the raw form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Post-merge regen: plan docs re-derive the Lane D links from the merged authorities

This branch's earlier regen ran while the .dag plan authorities lacked
the link rows (pre-#6503), so it had written the docs linkless; the
merge kept that side while main brought the link rows. main_wet now
re-derives the linked docs - pair consistent, drift gate green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Two latent fleet-lane witness reds, first executed by this head's wider selection

Both red on clean main by direct execution, latent behind affected-set
skips and the batch-2 red era:

host_standup_spine: the spine gained the P0:host-identity-converge step
in #6253 (11 steps) while spine_step_tag matched exactly 10 phases with
no catchall - non-exhaustive panic on Assimilation{HostIdentityConverge}
whenever executed. Witness now describes the 11-step spine (tag arm +
ordinal shift + length/ledger pins 10->11, gap count 4 unchanged,
fn renamed ten->eleven to keep the name truthful).

fleet_show_effective_read: declared_runner_count() derives from
pool_budget / slot cap, so the #6495 re-carve (24->16GiB) moved it
10->5 and the 2026-07-03 width fixtures went stale. The parse-typing
witness now pins the literal it parses (a parse fixture must not depend
on a live-derived count - that fusion is how this went latent-red); the
srv1 convergence witness flips to assert the REAL fact, drift (the hosts
still run pre-carve width - the same oversubscription the falsifier
exit-137 receipts located), with a dissolve-on for a post-re-carve
readback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant