Repository navigation
Session Handoff [default]: Skills Installer Report Survives a NUL-Byte Path, Released as 2.0.777 #2194
Description
Next steps, in priority order
Re-read each issue and pull request rather than trusting these summaries.
-
Give install-tools.sh a Machine-Readable Report Mode, So a Caller Can Act on It Without Screen-Scraping #1645, a machine-readable
--reportmode forinstall-toolsandskills_install. It is promoted ahead of the order Session Handoff [default]: Unattended Picker Narrowed and Overview Label Refusal Fixed, Released as 2.0.776 #2190 set. A peer HomeAutomation-Config session reported that its Ship branch rulesets as versioned JSON and add them to the re-sync / drift-check loop #211 is blocked on it: that issue reports host tools that have fallen behind in the MOTD and the weekly summary, and the maintainer chose on 2026-09-30 to wait for Give install-tools.sh a Machine-Readable Report Mode, So a Caller Can Act on It Without Screen-Scraping #1645 rather than scrape the human-readable table. The maintainer accepted this ranking at close. Done looks like a documented, tested JSON report on both tools. When it lands, or if its scope changes, comment on Give install-tools.sh a Machine-Readable Report Mode, So a Caller Can Act on It Without Screen-Scraping #1645, since the peer watches that issue. -
Deny the Remaining core.hooksPath and no-verify Bypass Routes in the Guard #2177, the guard's remaining hook-bypass routes:
- a persistent
git config core.hooksPath, - the
GIT_CONFIG_*environment forms, - wrapped or aliased git.
Done looks like the bypass check reusing rule 6's
_all_git_invocationswalk and its alias resolution. Its heredoc false-positive item overlaps theauto-2112lane (Session Handoff [auto-2112]: Strip Every Heredoc Body a Line Opens in the Guard per #2112 #2123), so check that lane's state first. - a persistent
-
Settle Which Surface Owns the Skills Refresh Cadence and Which Flag Each Runs #2191, once the maintainer answers it: which surface owns the skills refresh cadence, and which flag each surface runs. It is recommended to keep the full install in
docs/host-setup.md, haveskill-lifecyclestep 8 point there, and keep--snapshot-onlyonly incheck-this-repo. -
Decide How the Unattended Picker Recognizes an Adopted Lesson #2183's answer, then Close the Unattended Loop's Parking-Comment and Interrupted-Park Gaps #2184. Decide How the Unattended Picker Recognizes an Adopted Lesson #2183 was answered as option 1: the session recording a decision's answer edits the issue body. Both edit the
unattended-handoffpicker, so take Decide How the Unattended Picker Recognizes an Adopted Lesson #2183 first. -
Small follow-ups:
- Pair Nonstandard details Markup Correctly When Blanking the Overview Narrative #2187: nonstandard
detailsmarkup in the narrative masking. - Emit an Unclosed details Block's Preceding Text Once in details_spans #2186:
details_spansduplicates the text before an unclosed block. - Decide How the Prose Gate Widens Past the Latin Part of the Recorded-Name Rule #2170: answered as option 2, a per-line or per-file allow marker.
- Pair Nonstandard details Markup Correctly When Blanking the Overview Narrative #2187: nonstandard
-
Exercise the unattended loop's parked-lane half. An attended resume of a lane parked under
blockedhas still never run. -
Say the Hub Commits the Report Wherever Done-Means-Audited Is Stated #1826, Carry the code-review skill bootstrap to seven repos whose Copilot reviews never state coverage #1815, and the downstream Fleet Bootstrap resyncs, as Session Handoff [default]: Unattended Picker Narrowed and Overview Label Refusal Fixed, Released as 2.0.776 #2190 describes them. When aiopurpleair resyncs, its handoff (aiopurpleair Update codegen files #177) should drop "commit an audit report".
-
Smaller and older: Copilot Refuses a Pull Request Carrying Only Default-Excluded Files, and No Rule Covers It #2180, Durable Knowledge does not say where a lesson goes when no change is open #1811, audit.py --issue path never prints the no-remote hub-name warning #1810, Skill files hard-wrap while comment-and-doc-style requires one paragraph per line #1814, then the list carried unchanged from Session Handoff [default]: WORKFLOW.md Corrections and the pyproject.toml Decision Released as 2.0.672 #1804, in Session Handoff [default]: Unattended Picker Narrowed and Overview Label Refusal Fixed, Released as 2.0.776 #2190's order.
External blockers
- Settle Which Surface Owns the Skills Refresh Cadence and Which Flag Each Runs #2191 is a maintainer decision. Step 3 waits on it. Nothing else does.
- Downstream promotions listed in Session Handoff [default]: Unattended Picker Narrowed and Overview Label Refusal Fixed, Released as 2.0.776 #2190 (EspDinIoT Update readme and workspace #10, Financial-Modeling, DevKitCIoT's KiCad 10 conflict) were not re-checked this round. Re-verify before acting.
- A native Windows host is still needed for the
bootstrap.ps1check carried from Session Handoff [default]: WORKFLOW.md Corrections and the pyproject.toml Decision Released as 2.0.672 #1804.
Internal dependencies
- Deny the Remaining core.hooksPath and no-verify Bypass Routes in the Guard #2177 should follow, or absorb, whatever the
auto-2112lane lands on heredoc handling, since both edit the guard's tokenizer path. - Take Decide How the Unattended Picker Recognizes an Adopted Lesson #2183's answer before Close the Unattended Loop's Parking-Comment and Interrupted-Park Gaps #2184, since both edit the
unattended-handoffpicker. - Settle Which Surface Owns the Skills Refresh Cadence and Which Flag Each Runs #2191 decides the cadence text. Do not touch the refresh cadence on any surface before it is answered.
State
- Hub: main is at the Promote develop to main: Survive a NUL-Byte Registered Path in the Skills Installer Report #2193 promotion merge, released as 2.0.777. develop holds nothing main lacks. The primary checkout is clean on develop at
origin/develop. This round left no feature branch or worktree behind. - This machine: the Codex/opencode snapshot reads current at the Promote develop to main: Survive a NUL-Byte Registered Path in the Skills Installer Report #2193 merge. Claude Code's fleet marketplace loads from the primary checkout on develop.
- Unattended lanes still open:
auto-2080(Session Handoff [auto-2080]: Read an eval Argument as a Wait-Loop Payload in the Guard per #2080 #2137),auto-2112(Session Handoff [auto-2112]: Strip Every Heredoc Body a Line Opens in the Guard per #2112 #2123),auto-2106(Session Handoff [auto-2106]: Refuse a Dangling Remote-Tracking Target in local_review per #2106 #2120, PR Refuse a Dangling Remote-Tracking Target in local_review #2121) andauto-1634(Session Handoff [auto-1634]: Narrow Nested timeout Handling per #2056 #2072, PR Deny a Signal-0 timeout as a Wait Bound in the Guard #2117). Localfeature/auto-*branches and worktrees for those, and for older lanes, remain. Re-derive withhandoff.py tracks,gh pr listandgit worktree listbefore touching them. - Other open lane: Session Handoff [python-contract]: Escaped and Folded python-directories Values Refused, Released as 2.0.738 #2014 (python-contract).
- No other repository was written to. A HomeAutomation-Config peer session sent the Give install-tools.sh a Machine-Readable Report Mode, So a Caller Can Act on It Without Screen-Scraping #1645 request, and nothing was written there.
The parked decision queue
One issue: #2191, which surface owns the skills refresh cadence. It offers two choices, and option 1 is recommended.
What the last round did
- Fixed Close the Installer Gaps Left After the Marketplace Re-Point Fix #2019 in #2192, promoted in #2193.
git_in()catchesValueError, so--reportsurvives a NUL-byte registered path, and it re-raisesUnicodeDecodeErrorso undecodable output is never stamped clean.- The installer's message,
--report's reason, andscripts/README.mdnow say "is not a directory" for a gone or file-occupied registered path. - The issue's third item, the cadence's
--snapshot-onlywording, was dropped and filed as decision Settle Which Surface Owns the Skills Refresh Cadence and Which Flag Each Runs #2191.
- Filed Settle Which Surface Owns the Skills Refresh Cadence and Which Flag Each Runs #2191 (decision).
What not to repeat
- Close the Installer Gaps Left After the Marketplace Re-Point Fix #2019's third item took three local passes before it was dropped. Its premise, to say
--snapshot-onlyon every cadence surface, is wrong, because that flag registers nothing. A machine with no install, or with a gone registration, then gets no Claude Code channel, and--report's exit code does not show it. Each round's carve-out drew contradictions on a further surface:docs/host-setup.md,check-this-repotwice,skill-lifecyclestep 8, anddocs/fleet-map.mdtwice. Reverting to the develop wording is what converged. Do not reword the cadence before Settle Which Surface Owns the Skills Refresh Cadence and Which Flag Each Runs #2191 is answered. - This repo's tests are unittest.
python3 -m pytestis not installed. Runpython3 -m unittest tests.<module>. - A typing-clean test needs a narrow mock. A side-effect wrapper around
subprocess.rundrew mypy overload errors. Patchingskills_install.marketplace_entryinstead kept subprocess real and typed.
New learnings
- No new governance lesson this round. The non-convergence matched the existing "deleting a rule beats re-deriving it" and "one rule on four surfaces regenerates drift" lessons, and the fix was the same: delete rather than re-derive.
- Pre-existing, noted and not filed: the
git_indocstring's "None on any failure" is untrue forUnicodeDecodeError, as it was before Close the Installer Gaps Left After the Marketplace Re-Point Fix #2192.source_ref()reading aNonestatus as clean is source_ref() Reads a Failed git status as Clean Rather Than Unknown #1869.
Activity
ptr727 commentedon Oct 1, 2026
Parked decision queue, answered at close: #2191 was answered as option 1.
docs/host-setup.mdowns the cadence with the full install,skill-lifecyclestep 8 points there, andcheck-this-repokeeps--snapshot-onlyfor its fetched checkout. The answer is in its body, and itsdecisionlabel is off. It is now implementation work, unblocking next step 3. The queue now holds zero issues.ptr727 commentedon Oct 1, 2026
Continued in #2262, round 40 on track
default.