Skip to content

test(tts): refactor harness to pterm + gepeto + 14 review READMEs + TAC rail 6 - #2338

Merged
POWERFULMOVES merged 3 commits into
mainfrom
fix/tts-pterm-gepeto-review-readmes
Aug 2, 2026
Merged

POWERFULMOVES merged 3 commits into
mainfrom
fix/tts-pterm-gepeto-review-readmes

Conversation

@POWERFULMOVES

Copy link
Copy Markdown
Owner

Lane 4 — TTS test harness: pterm + gepeto + review READMEs

Refactors pmoves/tools/test_all_tts_engines.py to use Pinokio's real
pterm CLI surface (no more hand-rolled subprocess wrappers calling
fake subcommands), adds a gepeto-style 1-click launcher, writes 14
per-engine review READMEs + a repo-level README, and codifies the
test+implement protocol as TAC rail 6 (vei.gradio-mcp).

Why this lane

The original _resolve_pterm / _run_pterm / _parse_pterm_status /
pterm_preflight was a 180-line hand-rolled wrapper that called
pterm search and pterm run — subcommands that DO NOT EXIST in the
real pterm CLI — and had a 50-line JSON → key=value → colon-separated-text
fallback parser because pterm's actual output format wasn't known.
This was a wrap-don't-reinvent violation. The real pterm surface
(documented in pmoves/AGENTS.md and the pterm skill):

pterm list                     — discover installed apps (JSON array)
pterm status <id>              — JSON { state, ready, ready_url, path }
pterm start <id>               — daemon: boot the app, returns immediately
pterm running <id>             — JSON { running, ready_url } (truthful poll)
pterm push "msg" --title "..."  — desktop notification
pterm clipboard write "..."    — system clipboard

What ships (3 stacked commits)

  1. P1 4eb8de3f05 (READMEs + gepeto launcher, +1591 lines, 20 files)

    • 14 per-engine review READMEs at pmoves/tools/test_all_tts_engines/engines/*.md
    • Repo-level README at pmoves/tools/test_all_tts_engines/README.md
    • Gepeto launcher at pmoves/tools/test_all_tts_engines/pinokio/ (5 files: install.js, start.js, start-one.js, pinokio.js, pinokio.json)
  2. Functional 7e464c0122 (pterm refactor + TAC rail 6, +337/-164, 2 files)

    • pmoves/tools/test_all_tts_engines.py — REMOVED the 4 hand-rolled functions (180 lines), ADDED pterm_bring_up_tts_studio / pterm_notify / pterm_clipboard_write + thin helpers; main() gains --notify and --clip-report flags
    • pmoves/configs/tac_trees/voice-engines-integration.tac.yaml — bumped to 1.1.0, NEW vei.gradio-mcp rail with 9 children
  3. Docs 5a3ac29f41 (AGNOTE CLAIM + spec doc, +229 lines, 2 files)

    • pmoves/docs/AGENTS/AGNOTE4482PHI.t1.md — new CLAIM entry (Mavis::TTS-PTERM-GEPETO-REVIEW-READMES-CLAIM::2026-08-01)
    • pmoves/docs/specs/tts-pterm-gepeto-review-readmes-2026-08-01.md — 12.8KB cold-read spec

TAC rail 6 — vei.gradio-mcp (9 children)

Child Asserts
harness from gradio_client import Client is present (no mock)
engine-count 14 engines declared in ENGINES (grep for all 14 ids)
per-engine-readmes 14 engines/<id>.md files exist
repo-readme pmoves/tools/test_all_tts_engines/README.md exists
gepeto-launcher 5 gepeto files exist: install.js, start.js, start-one.js, pinokio.js, pinokio.json
pterm-clean Harness uses pterm_bring_up_tts_studio / pterm_notify / pterm_clipboard_write
no-handrolled _resolve_pterm / _run_pterm / _parse_pterm_status / pterm_preflight are GONE
pterm-call-shape All pterm subprocess calls pin encoding="utf-8"
tac-self-ref The rail references itself in the YAML

Validation

Check Status
test_all_tts_engines.py syntax (AST parse)
All 4 gepeto JS files (node --check)
TAC YAML parses
vei.gradio-mcp rail with 9 children
Hand-rolled wrapper GONE (grep)
encoding="utf-8" pinned on pterm subprocess calls
All 14 per-engine READMEs present
Repo-level README + gepeto launcher present

Out of scope

  • The actual TTS test run (this lane is about the harness structure
    • the per-engine READMEs + the gepeto launcher; running it requires
      Ultimate-TTS-Studio up on a GPU node — that's a runtime gate, not
      a structure gate).
  • The p8/pmoves-pinokio fork sync (separate fleet-fork-sync lane).
  • Replacing gradio_client with the MCP SSE bridge tools (a future
    lane, since the flute-gateway already exposes
    tts_list_engines / tts_synthesize etc. via SSE per TAC rail 1
    vei.contract.mcp-tools).

Spec

pmoves/docs/specs/tts-pterm-gepeto-review-readmes-2026-08-01.md
the cold-read doc for a fresh local model that picks this lane up in
a future session.

Trail

Mavis::TTS-PTERM-GEPETO-REVIEW-READMES-CLAIM::2026-08-01 in
pmoves/docs/AGENTS/AGNOTE4482PHI.t1.md. CHIT trail unsigned-local
(no CHIT_PASSPHRASE loaded in Mavis session).

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@POWERFULMOVES, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ff55454b-f5f6-4f54-90bc-79f8d2835cf7

📥 Commits

Reviewing files that changed from the base of the PR and between 08025e7 and ba5a3cc.

📒 Files selected for processing (24)
  • pmoves/configs/tac_trees/voice-engines-integration.tac.yaml
  • pmoves/docs/AGENTS/AGNOTE4482PHI.t1.md
  • pmoves/docs/specs/tts-pterm-gepeto-review-readmes-2026-08-01.md
  • pmoves/tools/test_all_tts_engines.py
  • pmoves/tools/test_all_tts_engines/README.md
  • pmoves/tools/test_all_tts_engines/engines/chatterbox.md
  • pmoves/tools/test_all_tts_engines/engines/chatterbox_multilingual.md
  • pmoves/tools/test_all_tts_engines/engines/chatterbox_turbo.md
  • pmoves/tools/test_all_tts_engines/engines/f5_tts.md
  • pmoves/tools/test_all_tts_engines/engines/fish.md
  • pmoves/tools/test_all_tts_engines/engines/fish_s2.md
  • pmoves/tools/test_all_tts_engines/engines/higgs.md
  • pmoves/tools/test_all_tts_engines/engines/indextts.md
  • pmoves/tools/test_all_tts_engines/engines/indextts2.md
  • pmoves/tools/test_all_tts_engines/engines/kitten_tts.md
  • pmoves/tools/test_all_tts_engines/engines/kokoro.md
  • pmoves/tools/test_all_tts_engines/engines/qwen.md
  • pmoves/tools/test_all_tts_engines/engines/vibevoice.md
  • pmoves/tools/test_all_tts_engines/engines/voxcpm.md
  • pmoves/tools/test_all_tts_engines/pinokio/install.js
  • pmoves/tools/test_all_tts_engines/pinokio/pinokio.js
  • pmoves/tools/test_all_tts_engines/pinokio/pinokio.json
  • pmoves/tools/test_all_tts_engines/pinokio/start-one.js
  • pmoves/tools/test_all_tts_engines/pinokio/start.js

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added docs Documentation config pmoves/config(s)/ changes governance AGNOTE register / agent definitions / damage-control hooks labels Aug 1, 2026
@POWERFULMOVES
POWERFULMOVES force-pushed the fix/tts-pterm-gepeto-review-readmes branch from 5a3ac29 to 4bb52e9 Compare August 1, 2026 22:50

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5a3ac29f41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +41 to +43
methods: {
// Dynamically render the menu based on the current state.
menu: async (kernel, info) => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Export the menu hook at the manifest root

Pinokio discovers the dynamic UI through a top-level menu property, as demonstrated by the existing Ultimate-TTS launcher in pmoves/docs/ARTSTUFF/Ultimate-TTS-Studio.git/pinokio.js. Nesting this hook under methods means opening this newly added launcher never invokes the menu builder, leaving its install and test actions inaccessible.

Useful? React with 👍 / 👎.

Comment on lines +20 to +22
path: "../../..", // pmoves/ (the Python source root)
message: [
"python pmoves/tools/test_all_tts_engines.py --no-play 2>&1 | tee {{cwd}}/logs/api/start.log",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Invoke the harness relative to the configured working directory

For every full launcher run, path: "../../.." already changes the shell directory from .../test_all_tts_engines/pinokio to the repository's pmoves/ directory. The command then resolves pmoves/tools/test_all_tts_engines.py as pmoves/pmoves/tools/test_all_tts_engines.py, which does not exist, so the harness exits before testing any engine; start-one.js contains the same duplicated path.

Useful? React with 👍 / 👎.

Comment on lines +63 to +67
text: "Install (gradio_client)",
method: "shell.run",
params: {
uri: "install.js",
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Launch the installer script instead of passing it to shell.run

When the environment is absent, this menu item invokes shell.run with only an unsupported uri parameter and no message, so selecting Install does not execute install.js. Pinokio launcher menus link to script files with href: "install.js" or invoke them through script.start; without one of those forms, a fresh installation cannot create the environment.

Useful? React with 👍 / 👎.

Comment on lines +44 to +45
// info.exists() — relative to the script root (pmoves/tools/test_all_tts_engines/pinokio/)
const installed = info.exists("venv")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Check for the virtual environment where install.js creates it

After installation, install.js runs with path: "../../.." and venv: "venv", which creates/uses the environment beneath that working directory (pmoves/venv). info.exists("venv") is relative to the launcher directory instead, so it continues to report the app as uninstalled and never exposes the Run actions even after a successful install.

Useful? React with 👍 / 👎.

Comment on lines +348 to +350
action:
type: file_exists
target: "pmoves/tools/test_all_tts_engines/engines/{kitten_tts,kokoro,f5_tts,indextts,indextts2,fish,fish_s2,chatterbox,chatterbox_turbo,chatterbox_multilingual,voxcpm,higgs,qwen,vibevoice}.md"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Split brace-expanded TAC targets into concrete file checks

The repository's tac_runner.py implements file_exists as a literal Path(target).exists() call and performs no shell or brace expansion. Consequently this target—and the analogous launcher target below it—always checks for a filename containing braces and reports the new GRADIO MCP rail as failed even though all listed files exist; use individual nodes or an action type that explicitly supports multiple paths.

Useful? React with 👍 / 👎.

Mavis added 3 commits August 2, 2026 07:00
…(P1)

Lane 4 (refactor test_all_tts_engines.py to use Pinokio's pterm + gepeto).

P1 — pure documentation + launcher scaffold. No code changes to the
harness yet; the functional commit lands the pterm refactor + TAC rail 6.

What's in this commit:

* 14 per-engine review READMEs at
  pmoves/tools/test_all_tts_engines/engines/{kitten_tts,kokoro,f5_tts,
  indextts,indextts2,fish,fish_s2,chatterbox,chatterbox_turbo,
  chatterbox_multilingual,voxcpm,higgs,qwen,vibevoice}.md

  Each README captures the contract an implementer/reviewer needs
  without re-reading launch.py:
    - upstream attribution
    - gradio_client test recipe (copy-pasteable)
    - canonical synth_kwargs (from test_all_tts_engines.py)
    - voice list
    - hardware requirements
    - reviewer checklist
    - common failure modes (symptom / cause / fix)
    - file locations
    - reviewer notes (free-form)

* Repo-level README at pmoves/tools/test_all_tts_engines/README.md:
  - how to actually test (3 recipes: harness, per-engine, gepeto)
  - why pterm + gepeto (vs the hand-rolled wrapper)
  - architecture diagram
  - per-engine README index
  - TAC rail 6 cross-ref
  - "no-mock guarantee" language

* Gepeto launcher at pmoves/tools/test_all_tts_engines/pinokio/:
  - install.js: uv pip install gradio_client
  - start.js: runs the full test suite, pushes pterm notification,
    copies summary to clipboard
  - start-one.js: runs the harness for a single engine
  - pinokio.js: dynamic UI (install when venv missing, "Run all" /
    "Run one" submenu / "Per-engine READMEs" once installed)
  - pinokio.json: metadata (title, description, icon, nvidia gpu)

Per gepeto SKILL.md "Quick scripts" section: this is a script launcher
without a web UI, so it lives in the tools/ tree where Pinokio can
discover it via `pterm start`.

The harness itself is unchanged in this commit — the refactor lands in
the functional commit (`pterm_preflight` is replaced with
`pterm_bring_up_tts_studio` using the real `pterm list` / `pterm status`
/ `pterm start` / `pterm running` subcommands, not the fake
`pterm search` / `pterm run` subcommands the old hand-rolled wrapper
was calling).
…ctional)

Lane 4 — refactor tools/test_all_tts_engines.py to use Pinokio's real
pterm CLI surface (no more hand-rolled subprocess wrappers calling
fake subcommands).

What changed:

* pmoves/tools/test_all_tts_engines.py
  - REMOVED: _resolve_pterm, _run_pterm, _parse_pterm_status,
    pterm_preflight (180 lines of hand-rolled wrapper)
  - ADDED: pterm_bring_up_tts_studio, pterm_notify, pterm_clipboard_write
    + thin helpers _pterm_path, _pterm_call, _pterm_find_tts_app,
    _pterm_wait_ready
  - The old code called `pterm search "ultimate tts"` and `pterm run <id>`,
    which are NOT real pterm subcommands. The refactor uses:
      pterm list                  — discover installed apps (JSON array)
      pterm status <id>           — JSON { state, ready, ready_url }
      pterm start <id>            — daemon: boot the app
      pterm running <id>          — JSON { running, ready_url } (truthful poll)
      pterm push "msg" --title... — desktop notification
      pterm clipboard write "..." — system clipboard
  - The 50-line JSON→key=value→colon-separated-text fallback parser is
    GONE; pterm's output is JSON, we trust it.
  - main() gains --notify and --clip-report flags for direct CLI users
    (the gepeto launcher also wires these via pinokio/start.js).
  - Docstring updated to explain the pterm + gepeto integration.
  - File is now 1013 lines (was 947; the docstring + new pterm code
    more than offset the wrapper removal).

* pmoves/configs/tac_trees/voice-engines-integration.tac.yaml
  - Bumped version 1.0.0 → 1.1.0; description now mentions 6 rails
    (was 4: contract / routing / runbook / license, plus ears as
    rail 5 from earlier; now rail 6 = gradio_mcp)
  - NEW: vei.gradio-mcp rail with 9 children
      1. harness imports real gradio_client
      2. 14 engine entries declared
      3. 14 per-engine review READMEs present
      4. repo-level README present
      5. gepeto launcher present
      6. pterm primitives used (named-function grep)
      7. NO hand-rolled wrapper functions (grep_negative)
      8. encoding="utf-8" pinned on pterm subprocess calls
      9. self-ref (the rail exists and is the source of truth)
  - Header comment updated; cross-ref added to
    pmoves/tools/test_all_tts_engines/

No more hand-rolled pterm wrapper. The harness is now ~50 lines of
clean pterm orchestration + the existing gradio_client logic (which
was fine before — the test surface was always real).

Pair this with P1 (READMEs + gepeto launcher) and the docs commit
(AGNOTE CLAIM) for the full lane.
Lane 4 — close the lane with the trail + the spec doc.

* pmoves/docs/AGENTS/AGNOTE4482PHI.t1.md
  - New CLAIM entry: Mavis::TTS-PTERM-GEPETO-REVIEW-READMES-CLAIM::2026-08-01
  - Captures: root cause (hand-rolled wrapper called fake pterm
    subcommands), what shipped (P1 1591-line READMEs+launcher,
    functional 337-line refactor+TAC rail 6), validation
    (AST/node/YAML/grep checks), out-of-scope (live run requires
    Ultimate-TTS-Studio up on a GPU node), three-body
    (delivery=Mavis, control=DARKXSIDE, memory=this trail+2 commits
    + spec + 19 new files), CHIT unsigned-local.
  - This CLAIM becomes a RELEASE entry on admin-merge.

* pmoves/docs/specs/tts-pterm-gepeto-review-readmes-2026-08-01.md
  - 12.8KB spec covering: TL;DR, root cause, the 3-stacked commit
    breakdown, why pterm+gepeto (and not hand-rolled), architecture
    diagram, TAC rail 6 with 9 children, validation table, out of
    scope, related links.
  - This is the "cold-read" doc for a fresh local model that picks
    up Lane 4 in a future session (per the operator's "second home
    for agents" framing).

Pair this with P1 (4eb8de3) and functional (7e464c0) for the
full lane. Push to origin, open PR, watch CI, on green operator
admin-merges.

CHIT trail unsigned-local (no CHIT_PASSPHRASE in Mavis session).
@POWERFULMOVES
POWERFULMOVES force-pushed the fix/tts-pterm-gepeto-review-readmes branch from 4bb52e9 to ba5a3cc Compare August 2, 2026 11:00
@POWERFULMOVES
POWERFULMOVES merged commit 2f72861 into main Aug 2, 2026
21 checks passed
@POWERFULMOVES
POWERFULMOVES deleted the fix/tts-pterm-gepeto-review-readmes branch August 2, 2026 11:01
POWERFULMOVES added a commit that referenced this pull request Aug 2, 2026
…6-08-02) (#2345)

Backlog cleanup: AGNOTE entries without paired RELEASEs were gappy
because the operator's squash-merges typically close the lane but
the AGNOTE entry for the lane-level RELEASE needs to be added
separately. This commit adds the missing RELEASEs:

  1. Creator Collab Slice 7 Prep SHIPPED + Lane SHIPPED (2026-07-29/30)
     — closes the 2026-07-29T07:00 Slice 7 Prep CLAIM, plus the
     Slice 1/2/4/5 CLAIMs (all absorbed into the operator's
     squash-merge on PR #2293, never got paired RELEASEs). The
     single combined RELEASE names each slice so the trail stays
     legible as a lane-level framing, not 7 fragmented entries.

  2. Lane 3 — supabase-stack-default-up SHIPPED (2026-07-31)
     — closes the 2026-07-31T20:50 Lane 3 CLAIM. Documents the
     squash `13c2878559` on PR #2312, the 4 stacked commits
     (P1 / functional / docs / redo), the 3 layered env_file issues
     + 2 collaterals (kong routes + auth clients) the lane closed,
     the 5 PNG + 5 JSON + summary evidence artifacts.

  3. Lane 4 — TTS test harness: pterm + gepeto SHIPPED (2026-08-01)
     — closes the 2026-08-01T18:30 Lane 4 CLAIM. Documents the
     squash `2f72861d68` on PR #2338, the 3 stacked commits
     (P1 / functional / docs), the wrap-don't-reinvent violation
     that the original hand-rolled pterm wrapper was (called fake
     subcommands `pterm search` and `pterm run` that don't exist in
     the real pterm CLI), the 14 per-engine review READMEs + gepeto
     launcher + TAC rail 6 (vei.gradio-mcp).

  4. Lane 5 — NATS broker deployment: slice 3 + slice 6 streams
     SHIPPED (2026-08-01) — closes the 2026-08-01T20:30 Lane 5 CLAIM.
     Documents the void-publishing bug, the 3 new streams added
     (COMFY_COLLAB, ROOMS, HELPDESK), the silent-discard hazard that
     the `limits` retention choice avoids, the out-of-scope items
     (TOKENISM_ATTRIBUTION migration is operational, not code;
     cross-node NATS mesh is a separate lane; voice subjects are
     a separate voice-fabric lane). The squash is pending — PR #2344
     open, awaiting admin-merge.

All 4 entries are trail-only (no code change). CHIT trail unsigned-local
(no CHIT_PASSPHRASE in Mavis session). The lane-level CLAIM → RELEASE
gaps are now closed; future admin-merges should land the RELEASE
in the same commit that the operator squash-merges.

Co-authored-by: Mavis <Mavis@pmoves.local>
POWERFULMOVES added a commit that referenced this pull request Aug 2, 2026
…6-08-02) (#2345)

Backlog cleanup: AGNOTE entries without paired RELEASEs were gappy
because the operator's squash-merges typically close the lane but
the AGNOTE entry for the lane-level RELEASE needs to be added
separately. This commit adds the missing RELEASEs:

  1. Creator Collab Slice 7 Prep SHIPPED + Lane SHIPPED (2026-07-29/30)
     — closes the 2026-07-29T07:00 Slice 7 Prep CLAIM, plus the
     Slice 1/2/4/5 CLAIMs (all absorbed into the operator's
     squash-merge on PR #2293, never got paired RELEASEs). The
     single combined RELEASE names each slice so the trail stays
     legible as a lane-level framing, not 7 fragmented entries.

  2. Lane 3 — supabase-stack-default-up SHIPPED (2026-07-31)
     — closes the 2026-07-31T20:50 Lane 3 CLAIM. Documents the
     squash `13c2878559` on PR #2312, the 4 stacked commits
     (P1 / functional / docs / redo), the 3 layered env_file issues
     + 2 collaterals (kong routes + auth clients) the lane closed,
     the 5 PNG + 5 JSON + summary evidence artifacts.

  3. Lane 4 — TTS test harness: pterm + gepeto SHIPPED (2026-08-01)
     — closes the 2026-08-01T18:30 Lane 4 CLAIM. Documents the
     squash `2f72861d68` on PR #2338, the 3 stacked commits
     (P1 / functional / docs), the wrap-don't-reinvent violation
     that the original hand-rolled pterm wrapper was (called fake
     subcommands `pterm search` and `pterm run` that don't exist in
     the real pterm CLI), the 14 per-engine review READMEs + gepeto
     launcher + TAC rail 6 (vei.gradio-mcp).

  4. Lane 5 — NATS broker deployment: slice 3 + slice 6 streams
     SHIPPED (2026-08-01) — closes the 2026-08-01T20:30 Lane 5 CLAIM.
     Documents the void-publishing bug, the 3 new streams added
     (COMFY_COLLAB, ROOMS, HELPDESK), the silent-discard hazard that
     the `limits` retention choice avoids, the out-of-scope items
     (TOKENISM_ATTRIBUTION migration is operational, not code;
     cross-node NATS mesh is a separate lane; voice subjects are
     a separate voice-fabric lane). The squash is pending — PR #2344
     open, awaiting admin-merge.

All 4 entries are trail-only (no code change). CHIT trail unsigned-local
(no CHIT_PASSPHRASE in Mavis session). The lane-level CLAIM → RELEASE
gaps are now closed; future admin-merges should land the RELEASE
in the same commit that the operator squash-merges.

Co-authored-by: Mavis <Mavis@pmoves.local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

config pmoves/config(s)/ changes docs Documentation governance AGNOTE register / agent definitions / damage-control hooks

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant