Skip to content

docs: add installed-skill guides for issues, triage labels, and domain docs - #1

Merged
yelenplays merged 4 commits into
mainfrom
fm/firstmate-matt-agent-docs-cleanup
Aug 10, 2026
Merged

yelenplays merged 4 commits into
mainfrom
fm/firstmate-matt-agent-docs-cleanup

Conversation

@yelenplays

Copy link
Copy Markdown
Owner

Intent

Preserve and normalize the captain-approved Matt-skill agent documentation from the archived source snapshot only. Carry over only the intended AGENTS additions, and review the three docs/agents guides against authoritative ownership, documentation audience classification, precise trigger hygiene, the one-owner rule, and AGENTS size discipline. Replace raw gh instructions with the repository-required gh-axi workflow based on current help without creating or mutating any GitHub issue. Keep tracked Markdown to one sentence per line with plain dashes, remove duplicated contracts, preserve unique useful setup facts, and add deterministic checks only for current guarantees. Keep the primary uncommitted copy untouched. Deliver this change only to the default branch of yelenplays/firstmate through the no-mistakes PR path; never push or open anything against kunchenguid/firstmate. Validation must include bin/fm-doc-audience-check.sh, relevant tests, and a complete final diff review, with a green fork-only PR as the outcome.

What Changed

  • Add three agent-runtime guides under docs/agents/: issue-tracker.md (GitHub Issues on the captain's fork yelenplays/firstmate, the has_issues prerequisite, the gh-axi -R workflow, the explicit-authorization rule, and the Wayfinding operations contract), triage-labels.md (the five canonical label roles), and domain.md (reading root CONTEXT.md and docs/adr/ before exploration). AGENTS.md gains a single two-line pointer that routes to them by behavior, when a skill will create or update issues or triage labels, or read or update CONTEXT.md or docs/adr/, rather than by skill name.
  • Classify the three new guides as agent-runtime in docs/documentation-audiences.json and register the AGENTS.md to guide relationships as required owner pointers, so bin/fm-doc-audience-check.sh fails if a classification or the discovery pointer is dropped. domain.md also requires any CONTEXT.md or docs/adr/ record a skill creates to be classified in the same change.
  • Extend .agents/skills/harness-adapters/SKILL.md to state that user-installed skills are outside firstmate's bundled adapter guarantee: confirm the selected worker runtime can discover the exact installed skill before dispatching, and report the blocker instead of dropping the requirement or falling back to a stale project copy.

Risk Assessment

✅ Low: The change is additive documentation only, every round-1 finding is fixed and verified against the consuming skill contract and the repository's own audience-check logic, and no new source risk was introduced.

Testing

Ran the intent-named bin/fm-doc-audience-check.sh (clean, 64 surfaces / 179 links) plus the documentation-audiences, ask-user-authority, ensure-agents-md, and supervision-instructions contract tests, all green. Verified the round-1 fix end-to-end against live GitHub with read-only gh-axi calls: the fork really does report has_issues false, issue reads fail with exactly the error string the new Tracker prerequisite section quotes, and all five canonical triage labels already exist, so the guide is accurate rather than aspirational. Proved the newly added inventory entries are load-bearing by showing the audience check fails when the issue-tracker classification or the AGENTS.md owner pointer is removed, then restoring and re-confirming a clean worktree. Captured reviewer-visible visual evidence by rendering the three guides and the AGENTS.md pointer through GitHub's own GFM renderer and screenshotting the page; chrome-devtools-axi screenshot reported success while silently writing no file across three attempts and two sessions, so the capture was taken with headless Chrome directly. Also confirmed markdown discipline (no em dashes, one sentence per line), AGENTS size discipline (536 to 538 lines), and single ownership of the tracker and label contracts. No GitHub issue was created or mutated and no repository settings were changed. The pre-existing fm-calm-pi-extension Pi 0.84.1 environment failure was dismissed in round 1 and was not re-run.

  • Evidence: Rendered Matt-skill agent documentation (GitHub GFM renderer, full page) (local file: /var/folders/9d/8w50jhgd79x63rgbq_5cyyvm0000gn/T/no-mistakes-evidence/01KZNKCVBV5R36QZ5X1V788Q10/agent-docs-rendered.png)
Evidence: Rendered docs HTML source (AGENTS.md pointer + three guides)
<!doctype html><html><head><meta charset="utf-8">
<title>Matt-skill agent documentation - rendered</title><style>
body{margin:0;background:#0d1117;color:#e6edf3;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;}
.wrap{max-width:1100px;margin:0 auto;padding:32px 24px 48px;}
h1.page{font-size:22px;margin:0 0 4px;font-weight:600;}
p.sub{color:#8b949e;margin:0 0 28px;font-size:13px;}
.card{border:1px solid #30363d;border-radius:8px;margin-bottom:24px;overflow:hidden;background:#0d1117;}
.card > .hd{background:#161b22;border-bottom:1px solid #30363d;padding:10px 16px;font:600 12px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;color:#e6edf3;}
.md{padding:20px 24px;font-size:14px;line-height:1.6;}
.md h1{font-size:20px;border-bottom:1px solid #21262d;padding-bottom:8px;margin:0 0 14px;}
.md h2{font-size:16px;border-bottom:1px solid #21262d;padding-bottom:6px;margin:22px 0 10px;}
.md p{margin:0 0 12px;}
.md code{background:#6e768166;padding:.2em .4em;border-radius:6px;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;}
.md a{color:#4493f8;text-decoration:none;}
.md a:hover{text-decoration:underline;}
.md table{border-collapse:collapse;margin:0 0 12px;display:block;overflow:auto;max-width:100%;}
.md th,.md td{border:1px solid #30363d;padding:6px 13px;text-align:left;}
.md thead th{background:#161b22;font-weight:600;}
.md tbody tr:nth-child(2n){background:#151b23;}
</style></head>
<body><div class="wrap">
<h1 class="page">Matt-skill agent documentation - rendered</h1>
<p class="sub">Rendered through GitHub's own GFM renderer (POST /markdown, context yelenplays/firstmate) at commit e0df9da</p>
<div class="card"><div class="hd">AGENTS.md (section 9 pointer, lines 225-228)</div><div class="md"><ul dir="auto">
<li>Fleet-local operational facts belong in curated, home-local <code class="notranslate">data/learnings.md</code>.</li>
<li>Task-scoped notes belong with the backlog item, and investigation findings belong in the scout report.</li>
<li>Knowledge useful to almost every contributor to one project belongs in that project's committed <code class="notranslate">AGENTS.md</code>.</li>
<li>Knowledge general to every firstmate user belongs in this repo's shared tracked surface.</li>
</ul>
<p dir="auto">When a Matt engineering skill will use this repository's <a href="docs/agents/issue-tracker.md">issue tracker</a>, <a href="docs/agents/triage-labels.md">triage labels</a>, or <a href="docs/agents/domain.md">domain documentation</a>, load the matching guide before acting.</p>
<p dir="auto">Firstmate never writes a project's <code class="notranslate">AGENTS.md</code> directly.</p></div></div><div class="card"><div class="hd">docs/agents/issue-tracker.md</div><div class="md"><h1 dir="auto">Issue tracker for Matt engineering skills</h1>
<p dir="auto">Matt engineering skills use GitHub Issues on <code class="notranslate">yelenplays/firstmate</code>, the captain's fork, when the captain explicitly authorizes issue-tracker work for this repository.<br>
They do not publish Matt-skill issues to upstream <code class="notranslate">kunchenguid/firstmate</code> unless the captain explicitly redirects that concrete operation.<br>
Pull requests are not a request or triage surface for these skills.</p>
<h2 dir="auto">Tracker prerequisite</h2>
<p dir="auto">GitHub Issues must be enabled on <code class="notranslate">yelenplays/firstmate</code> before any operation in this guide can run.<br>
Confirm the surface is live with <code class="notranslate">gh-axi api repos/yelenplays/firstmate</code> and read <code class="notranslate">has_issues</code>, because a <code class="notranslate">false</code> value makes every read and write fail with <code class="notranslate">error: the 'yelenplays/firstmate' repository has disabled issues</code>.<br>
Enabling issues is a repository-settings change the captain owns, so report that blocker instead of changing the setting or retargeting the work to another repository.</p>
<h2 dir="auto">GitHub workflow</h2>
<p dir="auto">Use <code class="notranslate">gh-axi</code> for every GitHub read or write, and pass <code class="notranslate">-R yelenplays/firstmate</code> so the operation never depends on the local <code class="notranslate">origin</code> remote.<br>
Consult <code class="notranslate">gh-axi issue --help</code> and, when labels are involved, <code class="notranslate">gh-axi label --help</code> immediately before acting because those help surfaces own the current commands and flags.<br>
A read-only request does not authorize creating, editing, commenting on, labelling, assigning, closing, or otherwise mutating an issue.<br>
Do not interpret a skill's generic suggestion to publish as captain authorization for a GitHub write.</p>
<h2 dir="auto">Wayfinding operations</h2>
<p dir="auto">A wayfinding map is one issue labelled <code class="notranslate">wayfinder:map</code>, with sections for notes, decisions so far, and fog.<br>
Each ticket is a child issue when native subissues are available, or is linked from a task list on the map and names <code class="notranslate">Part of #&lt;map&gt;</code> otherwise.<br>
Ticket labels use <code class="notranslate">wayfinder:&lt;type&gt;</code>, where the type is <code class="notranslate">research</code>, <code class="notranslate">prototype</code>, <code class="notranslate">grilling</code>, or <code class="notranslate">task</code>.<br>
Use native issue dependencies when available, or record <code class="notranslate">Blocked by: #&lt;number&gt;</code> in the dependent issue otherwise.<br>
Resolving a ticket means recording its answer, closing it, and adding a pointer to the map's decisions-so-far section.<br>
All wayfinding writes remain subject to the explicit authorization rule above.</p>
<h2 dir="auto">Firstmate backlog boundary</h2>
<p dir="auto">Firstmate's operational queue remains <code class="notranslate">data/backlog.md</code> through the configured backlog backend.<br>
Do not mirror routine fleet work into GitHub Issues unless the captain explicitly requests that separate tracking record.</p></div></div><div class="card"><div class="hd">docs/agents/triage-labels.md</div><div class="md"><h1 dir="auto">Triage labels for Matt engineering skills</h1>
<p dir="auto">Matt engineering skills use five canonical triage roles on <code class="notranslate">yelenplays/firstmate</code>.<br>
The tracker label string is identical to each role name.</p>
<markdown-accessiblity-table><table role="table">
<thead>
<tr>
<th>Role</th>
<th>Tracker label</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="notranslate">needs-triage</code></td>
<td><code class="notranslate">needs-triage</code></td>
<td>A maintainer needs to evaluate the issue.</td>
</tr>
<tr>
<td><code class="notranslate">needs-info</code></td>
<td><code class="notranslate">needs-info</code></td>
<td>The issue is waiting for more information from the reporter.</td>
</tr>
<tr>
<td><code class="notranslate">ready-for-agent</code></td>
<td><code class="notranslate">ready-for-agent</code></td>
<td>The issue is fully specified and ready for an autonomous agent.</td>
</tr>
<tr>
<td><code class="notranslate">ready-for-human</code></td>
<td><code class="notranslate">ready-for-human</code></td>
<td>The issue requires human implementation.</td>
</tr>
<tr>
<td><code class="notranslate">wontfix</code></td>
<td><code class="notranslate">wontfix</code></td>
<td>The issue will not be actioned.</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">When a skill names a role descriptively, apply the corresponding exact label above.<br>
Create a missing label only when the captain has explicitly authorized that GitHub mutation, and use the <code class="notranslate">gh-axi</code> workflow in <a href="issue-tracker.md"><code class="notranslate">issue-tracker.md</code></a>.</p></div></div><div class="card"><div class="hd">docs/agents/domain.md</div><div class="md"><h1 dir="auto">Domain documentation for engineering skills</h1>
<p dir="auto">Matt engineering skills use this repository's domain documentation when they explore the codebase.</p>
<h2 dir="auto">Sources</h2>
<p dir="auto">Read root <code class="notranslate">CONTEXT.md</code> before exploration when it exists.<br>
Read applicable records under <code class="notranslate">docs/adr/</code> before working in an area when that directory exists.<br>
If either source is absent, continue silently rather than proposing it up front.<br>
The domain-modeling skill creates these sources lazily when accepted terminology or decisions need a durable owner.<br>
Classify every newly tracked <code class="notranslate">CONTEXT.md</code> or <code class="notranslate">docs/adr/</code> Markdown surface in <a href="../documentation-audiences.json"><code class="notranslate">docs/documentation-audiences.json</code></a> as <code class="notranslate">agent-runtime</code> or <code class="notranslate">maintainer-architecture</code> in the same change that adds it.</p>
<h2 dir="auto">Vocabulary and decisions</h2>
<p dir="auto">Use the terms defined in <code class="notranslate">CONTEXT.md</code> rather than synonyms it explicitly rejects.<br>
Surface a conflict with an existing architecture decision record instead of silently overriding it.</p></div></div>
</div></body></html>
Evidence: Tracker prerequisite verified against live yelenplays/firstmate (read-only)

$ gh-axi api repos/yelenplays/firstmate full_name: yelenplays/firstmate fork: true has_issues: false default_branch: main $ gh-axi issue list -R yelenplays/firstmate --limit 5 error: the 'yelenplays/firstmate' repository has disabled issues [exit 1] $ gh-axi label list -R yelenplays/firstmate --limit 500 wontfix needs-info needs-triage ready-for-agent ready-for-human [exit 0]

# Tracker prerequisite verification against yelenplays/firstmate (read-only, commit e0df9da)
# Every command below is the one docs/agents/issue-tracker.md tells an agent to run.

$ gh-axi api repos/yelenplays/firstmate
full_name: yelenplays/firstmate
fork: true
has_issues: false
default_branch: main
  full_name: kunchenguid/firstmate
  fork: false
  has_issues: true

$ gh-axi issue list -R yelenplays/firstmate --limit 5
error: the 'yelenplays/firstmate' repository has disabled issues
code: UNKNOWN
[exit 1]

$ gh-axi label list -R yelenplays/firstmate --limit 500
  wontfix
  needs-info
  needs-triage
  ready-for-agent
  ready-for-human
[exit 0]
Evidence: Added deterministic checks proven load-bearing

## Control: repository as committed fm-doc-audience-check: ok surfaces=64 local_links=179 [exit 0] ## Regression A: audience classification for docs/agents/issue-tracker.md removed fm-doc-audience-check: unclassified: docs/agents/issue-tracker.md [exit 1] ## Regression B: AGENTS.md owner-pointer sentence deleted fm-doc-audience-check: required owner pointer missing: AGENTS.md -> docs/agents/issue-tracker.md [exit 1] ## Control after restore: repository as committed fm-doc-audience-check: ok surfaces=64 local_links=179 [exit 0]

# Deterministic guarantees added by this change, proven load-bearing (commit e0df9da)

## Control: repository as committed
$ bin/fm-doc-audience-check.sh 
fm-doc-audience-check: ok surfaces=64 local_links=179
[exit 0]

## Regression A: audience classification for docs/agents/issue-tracker.md removed
$ bin/fm-doc-audience-check.sh --inventory /var/folders/9d/8w50jhgd79x63rgbq_5cyyvm0000gn/T/inv-drop-issue-tracker.json
fm-doc-audience-check: unclassified: docs/agents/issue-tracker.md
[exit 1]

## Regression B: AGENTS.md owner-pointer sentence deleted
$ bin/fm-doc-audience-check.sh 
fm-doc-audience-check: required owner pointer missing: AGENTS.md -> docs/agents/issue-tracker.md
[exit 1]

## Control after restore: repository as committed
$ bin/fm-doc-audience-check.sh 
fm-doc-audience-check: ok surfaces=64 local_links=179
[exit 0]
- Outcome: 🔧 2 issues found → auto-fixed ✅ across 2 runs (17m32s)

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

🔧 **Review** - 3 issues found → auto-fixed ✅
  • ⚠️ docs/agents/issue-tracker.md:14 - The section is titled ## Wayfinding, but the consuming skill resolves it by name: mattpocock-skills 1.2.3 skills/engineering/wayfinder/SKILL.md:26 says "Consult the tracker doc's &feat: add advisory Jev queue triage to heartbeats #34;Wayfinding operations&feat: add advisory Jev queue triage to heartbeats #34; section for how this repo expresses them. If no tracker has been provided, default to the local-markdown tracker." The upstream GitHub template (setup-matt-pocock-skills/issue-tracker-github.md) uses the exact heading ## Wayfinding operations, and the plugin CHANGELOG records that resolving this section by name is the deliberate indirection contract. Renaming it during normalization breaks the lookup. Fix: restore the heading to ## Wayfinding operations.
  • ⚠️ docs/agents/domain.md:10 - The guide authorizes the domain-modeling skill to lazily create root CONTEXT.md and docs/adr/ records, but never states that new tracked prose must be classified in docs/documentation-audiences.json. That inventory is mandatory: bin/fm-doc-audience-check.sh diffs git ls-files -- &#39;*.md&#39; ... against the inventory and fails on any unclassified surface, and it is invoked by CI and the no-mistakes gate. This change classified its own three files but left the sources it tells a skill to create unguarded. Fix: add one sentence to the Sources section requiring any newly created CONTEXT.md or docs/adr/ record to be classified in docs/documentation-audiences.json (audience agent-runtime or maintainer-architecture as appropriate).
  • ℹ️ docs/documentation-audiences.json:35 - AGENTS.md:228 is the single pointer that makes the three new guides discoverable at runtime (the skills expect the tracker doc to "have been provided to you"), yet it is not listed in requiredOwnerPointers, unlike every other owner relationship in this file. Deleting that one sentence would leave all three guides classified and link-clean, so bin/fm-doc-audience-check.sh would still pass while the skills silently lose their tracker. Adding {&#34;source&#34;: &#34;AGENTS.md&#34;, &#34;target&#34;: &#34;docs/agents/issue-tracker.md&#34;} pins a guarantee that is true today and passes the check as written.

🔧 Fix: restore Wayfinding operations heading and pin guide pointers
✅ Re-checked - no issues remain.

🔧 **Test** - 2 issues found → auto-fixed ✅
  • ⚠️ docs/agents/issue-tracker.md:3 - docs/agents/issue-tracker.md and docs/agents/triage-labels.md direct Matt engineering skills to GitHub Issues on yelenplays/firstmate, but Issues are disabled on that fork (has_issues: false, the GitHub default for forks). Every documented read or write fails today with error: the &#39;yelenplays/firstmate&#39; repository has disabled issues, so the tracker workflow could not be demonstrated end-to-end. The five canonical triage labels do already exist on the fork, so only the issues surface is missing. The intent forbids creating or mutating any GitHub issue and enabling Issues is a repository-settings change outside this phase, so this needs your decision: enable Issues on the fork, or state in the guide that the tracker is dormant until the captain turns it on.
  • ⚠️ tests/fm-calm-pi-extension.test.sh:20 - tests/fm-calm-pi-extension.test.sh fails with TypeError: this.getMarkdownTransformers is not a function from /opt/homebrew/lib/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js. This is a pre-existing local environment issue, not a regression: it reproduces identically when the same test is run from the base commit cd73e75 tree, and this change touches only Markdown and JSON documentation. The installed Pi is 0.84.1 while the test records compatibility evidence against 0.81.1/0.82.0, and 0.84.1 changed that internal renderer API. Fixing it would mean changing a globally installed npm package outside the worktree, which is out of scope here.
  • bin/fm-doc-audience-check.sh - green: ok surfaces=64 local_links=179
  • bin/fm-doc-audience-check.sh --inventory &lt;inventory with docs/agents/domain.md classification removed&gt; - mutation guard proof, fails with unclassified: docs/agents/domain.md
  • bin/fm-doc-audience-check.sh --inventory &lt;inventory with AGENTS.md -&gt; docs/agents/issue-tracker.md pointer retargeted&gt; - mutation guard proof, fails with owner-pointer target is missing
  • bin/fm-test-run.sh --changed --base cd73e75e02a1c1e74811b00c5ee08ffae8a59e1e - 26 change-mapped scripts (pure-contract-unit family), 1 pre-existing environment failure, 1 gate skip (tsc not found)
  • tests/fm-documentation-audiences.test.sh - passed as part of the changed set
  • tests/fm-ensure-agents-md.test.sh - passed as part of the changed set
  • Baseline reproduction: git archive cd73e75 | tar -x -C /tmp/base-tree &amp;&amp; bash /tmp/base-tree/tests/fm-calm-pi-extension.test.sh - identical failure at base, confirming it is not a regression (temp tree removed afterwards)
  • Markdown style verification over all 62 added Markdown lines in the 5 touched surfaces - python3 verify-markdown-style.py . cd73e75 69beead, plain dashes only and one sentence per line
  • AGENTS.md size discipline: git show cd73e75:AGENTS.md | wc -lc vs wc -lc AGENTS.md - 536 -> 538 lines, 60449 -> 60690 bytes
  • gh-axi issue --help and gh-axi label --help - confirmed the documented subcommands, and gh-axi --help confirmed the -R/--repo &lt;OWNER/NAME&gt; flag the guide prescribes
  • gh-axi label list -R yelenplays/firstmate - all five documented triage labels exist on the fork
  • gh-axi issue list -R yelenplays/firstmate --state all (read-only) - returned repository has disabled issues; no issue created or mutated
  • gh-axi api repos/yelenplays/firstmate (read-only) - has_issues: false, fork: true
  • git remote -v - only origin -&gt; yelenplays/firstmate; nothing addressed kunchenguid/firstmate
  • One-owner check: grep -rl &#39;wayfinder:map|needs-triage|ready-for-agent&#39; --include=*.md --include=*.json outside docs/agents/ returned nothing, so the new guides are the sole owner of those contracts
  • Rendered the three new guides plus the AGENTS.md pointer through GitHub's own markdown API (stateless render) and captured a full-page screenshot of the reader-facing surface
  • Complete final diff review: git diff cd73e75..69beead read in full (6 files, +86 lines, all Markdown/JSON)
  • git status --porcelain - worktree clean, no transient test artifacts left behind

🔧 Fix: document GitHub Issues prerequisite in tracker guide
✅ Re-checked - no issues remain.

  • bin/fm-doc-audience-check.sh - clean, 64 surfaces / 179 local links resolved
  • bash tests/fm-documentation-audiences.test.sh - all four contracts pass
  • bash tests/fm-ask-user-authority.test.sh, bash tests/fm-ensure-agents-md.test.sh, bash tests/fm-supervision-instructions.test.sh - instruction-surface contract tests covering the AGENTS.md and .agents/skills edits
  • Negative check A: ran bin/fm-doc-audience-check.sh --inventory &lt;copy with docs/agents/issue-tracker.md classification removed&gt; -> exit 1, unclassified: docs/agents/issue-tracker.md
  • Negative check B: temporarily deleted the AGENTS.md pointer sentence, ran bin/fm-doc-audience-check.sh -> exit 1, required owner pointer missing: AGENTS.md -&gt; docs/agents/issue-tracker.md, then restored (worktree verified clean)
  • gh-axi api repos/yelenplays/firstmate - confirmed has_issues: false on the fork exactly as the new Tracker prerequisite section documents
  • gh-axi issue list -R yelenplays/firstmate --limit 5 - reproduced the verbatim error string quoted in the guide
  • gh-axi label list -R yelenplays/firstmate --limit 500 - confirmed all five canonical triage labels exist on the fork
  • gh-axi issue --help, gh-axi label --help, gh-axi api --help - confirmed the documented gh-axi workflow (-R, subissue, api) matches current help surfaces
  • Rendered docs/agents/{issue-tracker,triage-labels,domain}.md plus the AGENTS.md pointer paragraph through GitHub's GFM renderer (gh-axi api POST /markdown --field mode=gfm) and captured a full-page screenshot via headless Chrome
  • Markdown style: verified zero em dashes and zero multi-sentence lines across the three new guides; AGENTS.md grew only 536 -> 538 lines
  • Ownership: grepped the repo to confirm the triage-label and wayfinding contracts exist only under docs/agents/, with no duplicate elsewhere
⚠️ **Document** - 1 info
  • ⚠️ AGENTS.md:228 - The term "Matt engineering skill" is used four times across tracked documentation (AGENTS.md:228 and the opening line of each of the three docs/agents guides) and is defined nowhere in the repository. AGENTS.md is always loaded, so every session pays for a trigger whose qualifier it may not be able to evaluate; a session that does not recognize an installed skill as a "Matt" skill can skip loading the guide and therefore miss its safety rules (do not publish to upstream kunchenguid/firstmate, and a read-only request never authorizes an issue mutation). The operative half of the trigger ("will use this repository's issue tracker, triage labels, or domain documentation") is evaluable on its own, so the guides are not wrong - only under-anchored. I did not fix this because the correct expansion is a naming decision the captain owns: the installed skill set appears to be the mattpocock-skills plugin (its domain-modeling, research, prototype, and grilling skills line up exactly with what the guides reference), but writing that inference into tracked docs would assert a fact I cannot verify from the repository, and anchoring the term inline in AGENTS.md trades against the size discipline the intent explicitly guards. Suggested resolution: confirm the intended name, then define it once in the guides' shared opening rather than expanding the AGENTS.md line.
  • ℹ️ docs/agents/issue-tracker.md:3 - docs/agents/issue-tracker.md and docs/agents/triage-labels.md state the captain's personal fork yelenplays/firstmate as a repository-wide convention in tracked, shared material. This sits in tension with AGENTS.md section 1, which routes captain-private fleet material to gitignored data/ and reserves tracked surfaces for "knowledge general to every firstmate user", and with README.md/CONTRIBUTING.md, which present this repo as a template other captains clone and run (CONTRIBUTING.md:18 has contributors point local origin at the parent repo, which is exactly why the -R yelenplays/firstmate instruction is load-bearing). For any other captain running the distro, the named fork and the has_issues prerequisite are wrong. I deliberately did not genericize this: the user intent explicitly and repeatedly requires the fork targeting and forbids kunchenguid/firstmate, so the content is captain-approved and only the captain can decide the placement. Possible follow-up: keep the mechanism and safety rules in docs/agents/ but move the concrete repository slug to captain-private state, or record an explicit note that these guides are captain-fork-specific.

🔧 Fix: replace Matt-skill trigger with behavior-based guide routing
1 info still open:

  • ℹ️ AGENTS.md:228 - Judgment call worth the captain's awareness: the instruction specified the trigger as "create or update GitHub Issues, triage labels, CONTEXT.md, or docs/adr/". I used that verb pair verbatim for issues and labels, but wrote "read or update" for root CONTEXT.md and docs/adr/, because docs/agents/domain.md's operative content is a read-before-exploration rule ("Read root CONTEXT.md before exploration when it exists"); a write-only trigger would have made that guide unreachable in exactly the case it governs. The consequence of the literal reading is accepted for issues and labels: a purely read-only issue query no longer trips the trigger, so a session doing one may not load the -R yelenplays/firstmate targeting rule and could read against whatever origin points at. That is a read, never a prohibited write, and every mutating path still loads the guide, so I left the captain's wording in place there rather than widening it unasked.
✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

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