Skip to content

feat(skills): adopt the domain-modeling skill as /domain-modeling - #58

Merged
Freudator86 merged 3 commits into
mainfrom
fm/fm-adopt-domain-modeling
Aug 3, 2026
Merged

feat(skills): adopt the domain-modeling skill as /domain-modeling#58
Freudator86 merged 3 commits into
mainfrom
fm/fm-adopt-domain-modeling

Conversation

@Freudator86

Copy link
Copy Markdown
Owner

Intent

Adopt the domain-modeling skill from mattpocock/skills (MIT) into the firstmate repo, on the captain's decision of 2026-08-03.

The captain's condition was explicit and is the acceptance criterion: take the upstream skill WHOLE, or write down which half is left out and why, and land the attribution in the SAME COMMIT as the skill. That last part is deliberate - the previous adoption from this same upstream (the Wayfinder skill, now /sea-chart) shipped with no attribution and had to be corrected in a later commit, so shipping the notice separately would repeat the exact failure being corrected.

WHY THIS SKILL. The night of 2026-08-02/03 produced four independent failures that were one disease, and none was a coding error: a term meaning two different things in two runbooks; a decision record drafted on the wrong referent of an ambiguous noun, after which a whole schema rested on it; a capability claim about a tool published to three parties, false purely because the installed version was older than the documented one; and a count that included something that never ran. Each was found by tripping over it. The captain wanted the instrument that sharpens terms and records decisions IN PASSING.

CAPTAIN'S FIT CONSTRAINT, deliberately followed: the fleet already has data/decisions/ and per-project AGENTS.md, and the captain said DO NOT BUILD A THIRD STORE. So upstream's CONTEXT.md glossary and docs/adr/ tree were deliberately NOT created. Resolved terms route to a ## Language section of a project's committed AGENTS.md or to data/learnings.md; decisions route to the existing dated records under data/decisions/. This is a substitution of location, not a dropped capability, and it is intentional - a reviewer seeing no CONTEXT.md is seeing the requirement met, not missed.

TERMINOLOGY RULE the captain set 2026-08-03, which he said belongs in this skill: German is written per DU not Sie; technical terms from the repositories are NOT translated (his examples: workbench stays workbench not Werkbank, Treehouse stays Treehouse not Baumhaus; likewise Wayfinder, no-mistakes, Bridge, Lavish, graphify, tasks-axi). The trigger was firstmate writing Werkbank instead of workbench, which the captain corrected as a CATEGORY not a single slip.

DELIBERATE DECISIONS a reviewer would otherwise question:

  • One line of that rule was added INLINE to AGENTS.md section 9, not left only in the skill. This looks like duplication and is not: section 9 requires translating firstmate's OWN internal machinery (worktree, teardown, harness, wake, stale, brief, crewmate) and still does, while this rule protects the DOMAIN'S proper nouns. The two are easy to confuse and firstmate already confused them once. The turn that writes Werkbank is exactly a turn on which no skill was loaded, so per firstmate-coding-guidelines' inline-stub pattern the safety-critical boundary must survive with no skill loaded. Section 9 keeps ownership of its mapping list; the skill owns the discriminator between the two categories.
  • The skill is user-invocable: true, so it carries its trigger in AGENTS.md section 6 rather than section 13 (section 13 is explicitly for skills that are NOT captain-invocable). The enumerating trigger test cannot check a user-invocable skill's trigger, so a dedicated assertion was added.
  • Cross-referencing was WIDENED from upstream's 'check whether the code agrees' to any checkable artifact. This is an intentional amendment, not scope creep: three of the four motivating failures were not in code at all (an old installed version, a count of something that never ran, a name resolving to a different file on disk).
  • An unresolved captain decision is explicitly handed to decision-hold-lifecycle, which stays its single owner. This skill records only decisions ALREADY MADE. That boundary exists to satisfy the repo's one-owner rule.
  • Firstmate never writes a project file, so the skill states that a project-side glossary or decision entry is written by a crewmate through the project's delivery path. Without that line a skill whose whole purpose is 'write it down' would read as relaxing the project-write boundary in AGENTS.md section 1.

WHAT WAS DELIBERATELY DROPPED, all recorded in docs/domain-modeling-provenance.md with costs named: CONTEXT-MAP.md and the whole multi-context model (the largest loss, and honestly the one most relevant to why the skill was adopted, since a cross-repository term collision is exactly the failure that put a schema on the wrong noun - dropped because a fleet-wide term map would be the forbidden third store); the glossary's structural purity, which a mixed memory file like AGENTS.md cannot guarantee; context inference, which has nothing to infer against with no map; and sequential ADR numbering, whose loss costs the short handle so a decision discussed as 'ADR-4' is not findable by that number in a dated store.

ATTRIBUTION AND ACCURACY WORK: docs/domain-modeling-provenance.md carries the MIT copyright and permission notice verbatim, follows the convention established by docs/sea-chart-provenance.md (a provenance page under docs/, reachable from README's License section, not a root NOTICE the repo has never had), and every quotation in it was mechanically verified against upstream commit 2ab9580. One arrow character had been silently ASCII-ified from the source's Unicode arrow; rather than leave an unmarked alteration in a licence document it is now declared as a normalisation alongside the em-dash normalisation the repo's no-em-dash rule forces.

TESTS: two EXISTING suites were extended rather than adding a new test file, per firstmate-coding-guidelines ('extend an existing script') and because CI's coverage guard proves the shard partition equals the tests/*.test.sh inventory, so a new file would need shard registration. fm-captain-translation-contract.test.sh (which owns section 9) got the proper-noun boundary assertions; fm-instruction-owners.test.sh got the skill's metadata, section 6 trigger, terminology rule, the five moves and three-part bar, and - deliberately - assertions that the MIT copyright and permission notice survive, because MIT requires the notice to travel with the work and the earlier sea-chart adoption still has no such protection. That gap is recorded as a follow-up in the provenance page rather than fixed here, to keep this change scoped.

VERIFICATION ALREADY RUN LOCALLY: bin/fm-lint.sh exit 0, bin/fm-test-run.sh --check-coverage ok (121 tests), and the affected suites pass - fm-instruction-owners, fm-captain-translation-contract, fm-sea-chart, fm-ensure-agents-md, fm-decision-hold-lifecycle, fm-role-config, fm-lavish-access, fm-shared-captain-inheritance, fm-backlog-lint.

REPO CONVENTIONS FOLLOWED: one sentence per line in tracked Markdown, plain dashes never em dashes (which is why quoted em dashes in the provenance page are normalised and that normalisation is declared), and no agent name as a commit co-author.

What Changed

  • Adds the user-invocable domain-modeling skill under .agents/skills/domain-modeling/ (SKILL.md, GLOSSARY-FORMAT.md, DECISION-RECORD-FORMAT.md, agents/openai.yaml), adopted from Matt Pocock's upstream skill: it carries the five live moves, the three-part bar a decision must clear, and the rule that a domain's proper nouns are never translated. It routes resolved terms into a project AGENTS.md ## Language section or data/learnings.md and decisions into data/decisions/ rather than creating upstream's CONTEXT.md and docs/adr/ stores, and hands an unresolved captain decision to decision-hold-lifecycle.
  • Wires the skill into the instruction surface: AGENTS.md section 6 gains its load trigger, and section 9 gains a rendering-only sentence stating that a legitimately written proper noun is never translated while the existing do-not-expose ban still governs whether it may be named at all. README gains the /domain-modeling slash-command row and its License section now lists both mattpocock/skills adoptions.
  • Adds docs/domain-modeling-provenance.md in the same commit as the skill, carrying the MIT copyright and permission notice verbatim, the declared em-dash and arrow normalisations applied to quotations, and the four deliberately dropped capabilities with their costs named. Extends two existing suites rather than adding a test file: fm-instruction-owners.test.sh asserts the skill metadata, section 6 trigger, terminology rule, and survival of the MIT notice; fm-captain-translation-contract.test.sh asserts the section 9 proper-noun boundary.

Review raised four issues on the first pass - the section 9 proper-noun wording and three unsupported or self-falsifying claims in the skill and provenance page - all auto-fixed in a4d3b99, with the re-check clean.

Risk Assessment

✅ Low: All four round-1 findings were fixed at the source with their assertions updated in the same round and verified string-for-string against the files, and the remaining change is documentation and instruction surface only, with no code paths, no weakened boundary, and every acceptance criterion in the intent still satisfied.

Testing

I ran the two extended suites (fm-instruction-owners, fm-captain-translation-contract) plus the coverage guard and the adjacent AGENTS.md contract suites, all green, then went past pass/fail in three ways: mutation checks that break the MIT notice, the section 6 trigger, and the section 9 rendering-only scope each make a suite fail, so the new assertions genuinely protect the attribution and the trigger; an independent script compared the provenance page against a read-only clone of mattpocock/skills, whose head today is the pinned commit 2ab9580, confirming the MIT notice is the upstream LICENSE character for character, every source-attributed quotation exists upstream under the two declared normalisations, every capability listed as dropped really exists upstream, and no forbidden third store was created; and I confirmed the attribution ships in the same commit as the skill, which was the captain's explicit condition. For reviewer-visible evidence of the captain-facing surface I rendered README.md and the provenance page through GitHub's own Markdown API and screenshotted the /domain-modeling slash-command row with its MIT attribution, the License section, the MIT notice, and the What-we-dropped list. The only note is cosmetic: one quotation also converts upstream's nested double quotes to single quotes, an alteration the page's two-character normalisation sentence does not mention.

  • Evidence: README as GitHub renders it: the /domain-modeling row with its MIT attribution (local file: /home/coditan/.cache/no-mistakes-tmp/no-mistakes-evidence/01KZ3VQSHVHTX60R9XFFESST4M/readme-slash-command-row.png)
  • Evidence: README License section now listing both mattpocock/skills adoptions (local file: /home/coditan/.cache/no-mistakes-tmp/no-mistakes-evidence/01KZ3VQSHVHTX60R9XFFESST4M/readme-license-section.png)
  • Evidence: docs/domain-modeling-provenance.md rendered: the MIT copyright and permission notice (local file: /home/coditan/.cache/no-mistakes-tmp/no-mistakes-evidence/01KZ3VQSHVHTX60R9XFFESST4M/provenance-mit-notice.png)
  • Evidence: The provenance page's What we dropped list, CONTEXT-MAP.md named as the largest loss (local file: /home/coditan/.cache/no-mistakes-tmp/no-mistakes-evidence/01KZ3VQSHVHTX60R9XFFESST4M/provenance-what-was-dropped.png)
Evidence: Upstream fidelity check output (notice, quotations, dropped list, no third store)

== 1. MIT notice is the upstream LICENSE, character for character == ok 1067 chars identical, incl. 'Copyright (c) 2026 Matt Pocock' == 2. sentences attributed to the source appear upstream == 14 source-attributed quotations checked, all located upstream == 3. every dropped capability really exists upstream == ok CONTEXT-MAP.md and the multi-context model / glossary structural purity / context inference / sequential ADR numbering / shared dependency of other skills == 4. no third store was created == ok no CONTEXT.md, no docs/adr, no CONTEXT-MAP.md == 5. line counts the page reports for the source it read == ok SKILL.md 74, CONTEXT-FORMAT.md 60, ADR-FORMAT.md 47 RESULT: the provenance page is faithful to upstream on every checked claim

== 1. MIT notice is the upstream LICENSE, character for character ==
  ok   1067 chars identical, incl. 'Copyright (c) 2026 Matt Pocock'
       and 'The above copyright notice and this permission notice shall be included'

== 2. sentences attributed to the source appear upstream ==
  L74   [upstream verbatim] "This is the *active* discipline ... (Merely *reading* `CONTEXT.md` for vocab..."
  L81   [upstream verbatim] "Don't batch these up - capture them as they happen."
  L84   [upstream verbatim] "Your code cancels entire Orders, but you just said partial cancellation is p..."
  L88   [upstream verbatim] "If a decision is easy to reverse, skip it - you'll just reverse it. If it's ..."
  L91   [upstream verbatim] "The explicit no-s are as valuable as the yes-s"
  L93   [upstream verbatim] "An ADR can be a single paragraph. The value is in recording *that* a decisio..."
  L98   [upstream verbatim] "Create files lazily - only when you have something to write."
  L101  [upstream verbatim] "what keeps `docs/adr/` a record of consequential forks rather than a diary"
  L111  [upstream verbatim] "check whether the code agrees"
  L138  [upstream verbatim] "**Ordering -> Fulfillment**: Ordering emits `OrderPlaced` events"
  L144  [upstream verbatim] "`CONTEXT.md` should be totally devoid of implementation details. Do not trea..."
  L149  [upstream verbatim] "When multiple contexts exist, infer which one the current topic relates to. ..."
  L152  [upstream verbatim] "Scan `docs/adr/` for the highest existing number and increment by one."
  L155  [upstream verbatim] "the **single source of truth** for building the project's ubiquitous languag..."
  14 source-attributed quotations checked, all located upstream

== 2b. only the declared normalisations alter a quotation ==
  ok   declared on the page: a quoted em dash becomes a plain dash
  ok   declared on the page: a quoted arrow becomes `->`
  ok   the only non-ASCII on the page is the arrow being declared (line [26])
  ok   upstream really uses both: em dash=True, arrow=True

== 3. every dropped capability really exists upstream ==
  ok   upstream has it and the page records it as dropped: CONTEXT-MAP.md and the multi-context model
  ok   upstream has it and the page records it as dropped: glossary structural purity
  ok   upstream has it and the page records it as dropped: context inference
  ok   upstream has it and the page records it as dropped: sequential ADR numbering
  ok   upstream has it and the page records it as dropped: shared dependency of other skills

== 4. no third store was created ==
  ok   no CONTEXT.md (upstream's glossary file deliberately not created)
  ok   no docs/adr (upstream's ADR tree deliberately not created)
  ok   no .agents/skills/domain-modeling/CONTEXT-MAP.md (upstream's context map deliberately not created)

== 5. line counts the page reports for the source it read ==
  ok   SKILL.md: page says 74 lines, upstream has 74
  ok   CONTEXT-FORMAT.md: page says 60 lines, upstream has 60
  ok   ADR-FORMAT.md: page says 47 lines, upstream has 47

RESULT: the provenance page is faithful to upstream on every checked claim
Evidence: Mutation checks: the new assertions fail when the notice, trigger, or scope is removed

### 1. strip the MIT permission notice from docs/domain-modeling-provenance.md not ok - domain-modeling provenance lost the MIT permission notice ### 2. delete the section 6 trigger sentence from AGENTS.md not ok - AGENTS.md section 6 lost the domain-modeling load trigger ### 3. drop the rendering-only scope from the section 9 proper-noun rule not ok - section 9's proper-noun sentence must stay scoped to rendering ### worktree restored (git status --porcelain prints nothing below)

Do the new assertions actually hold anything up? Break the change, watch them fail, restore.

### 1. strip the MIT permission notice from docs/domain-modeling-provenance.md
not ok - domain-modeling provenance lost the MIT permission notice
FM_TEST_END 2026-08-03T13:40:50Z tests/fm-instruction-owners.test.sh exit=1 duration_ms=581 gate_skip=false

### 2. delete the section 6 trigger sentence from AGENTS.md
not ok - AGENTS.md section 6 lost the domain-modeling load trigger
FM_TEST_END 2026-08-03T13:40:50Z tests/fm-instruction-owners.test.sh exit=1 duration_ms=528 gate_skip=false

### 3. drop the rendering-only scope from the section 9 proper-noun rule
not ok - section 9's proper-noun sentence must stay scoped to rendering (missing: 'That governs rendering only and changes nothing about which terms this contract bans')
FM_TEST_END 2026-08-03T13:40:50Z tests/fm-captain-translation-contract.test.sh exit=1 duration_ms=40 gate_skip=false

### worktree restored (git status --porcelain prints nothing below)
Evidence: The skill where a harness reads it, user-invocable and out of the public installer surface

$ ls -l .claude/skills .claude/skills -> ../.agents/skills $ sed -n 1,10p .claude/skills/domain-modeling/SKILL.md name: domain-modeling user-invocable: true metadata: internal: true $ ls skills/ # installer-facing public skills stow

$ ls -l .claude/skills   # what the Claude harness reads in a firstmate home
  lrwxrwxrwx 1 coditan coditan 17 Aug  3 13:06 .claude/skills -> ../.agents/skills

$ sed -n 1,10p .claude/skills/domain-modeling/SKILL.md   # frontmatter the harness parses
  ---
  name: domain-modeling
  description: >-
    Sharpen the terms a piece of work runs on and record its decisions in passing: challenge a word the moment it wobbles, invent scenarios that force a boundary to be precise, check a claim against the thing itself rather than against memory, and write the resolution down where the next reader will meet it.
    Use whenever a term looks like it is doing two jobs, a vague or overloaded word needs a canonical form, a claim about how something works or what a tool can do is about to be published, or a hard-to-reverse decision has just been made.
    Also use before translating any term into another language, because a domain's proper nouns are never translated.
  user-invocable: true
  metadata:
    internal: true
  ---

$ ls .claude/skills/domain-modeling
  agents
  DECISION-RECORD-FORMAT.md
  GLOSSARY-FORMAT.md
  SKILL.md

$ ls skills/   # installer-facing public skills: internal skills stay out
  stow
Evidence: Rendered pages the screenshots were taken from, plus the fidelity script and an evidence index
# Evidence: adopting the domain-modeling skill (branch fm/fm-adopt-domain-modeling)

What a reviewer wants to see is that the captain now has `/domain-modeling`, that the
MIT attribution shipped with it rather than after it, and that what was left out of the
upstream skill is written down truthfully.

| File | What it shows |
| --- | --- |
| `readme-slash-command-row.png` | README as GitHub renders it: `/domain-modeling` in the captain's slash-command table, with the Matt Pocock (MIT) attribution and the link to the provenance page in the same row |
| `readme-license-section.png` | README License section, now listing both adoptions from `mattpocock/skills` and pointing at each notice |
| `provenance-mit-notice.png` | `docs/domain-modeling-provenance.md` rendered: the MIT copyright and permission notice as a reader meets it |
| `provenance-what-was-dropped.png` | The same page's "What we dropped" list, with `CONTEXT-MAP.md` named as the largest loss |
| `upstream-fidelity.txt` | Output of the check below: the notice is the upstream LICENSE character for character, every source-attributed quotation exists upstream, every dropped capability exists upstream, and no third store was created here |
| `mutation-checks.txt` | The new assertions broken on purpose: removing the MIT permission notice, the section 6 trigger, or the rendering-only scope each makes a suite fail, then the worktree is restored |
| `harness-skill-surface.txt` | The skill where a harness reads it (`.claude/skills` -> `.agents/skills`), `user-invocable: true` so the captain gets the slash form, and absent from the installer-facing public `skills/` |
| `readme.html`, `provenance.html` | The rendered pages the screenshots were taken from, produced through GitHub's own Markdown API |
| `verify-upstream-fidelity.py` | The fidelity check itself; read-only, not part of the repo |

Re-running the fidelity check needs a scratch clone of the upstream, which is deleted
after use:

    git clone --depth 1 https://github.com/mattpocock/skills.git /tmp/upstream-skills
    python3 verify-upstream-fidelity.py <path-to-firstmate-worktree> /tmp/upstream-skills

The clone's head on 2026-08-03 was `2ab9580`, exactly the commit the provenance page
pins its comparison to.
- Outcome: ⚠️ 1 info across 1 run (9m36s)

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

🔧 **Review** - 4 issues found → auto-fixed ✅
  • ⚠️ AGENTS.md:421 - The new inline sentence states that section 9's captain-facing contract "covers words firstmate invented for its own operation, never a proper noun". Line 419 of that same paragraph bans exposing "harness names, runtime backend names", which are themselves proper nouns (Codex, herdr, tmux, cmux, zellij, Orca), and the mapping list keeps harness, backend, runtime, or adapter -&gt; worker runtime or tool. Read literally, the new sentence removes those families from the contract, and the skill's own discriminator reinforces that reading: .agents/skills/domain-modeling/SKILL.md:105 says a word that would appear in a search of the code "is a name, and it stays". Every backend name appears in this repo's code. Failure sequence: a turn with no skill loaded (the exact case this inline stub exists for) hits a dead herdr endpoint and writes "herdr is not responding" to the captain, where line 419 previously forced "the worker runtime is not responding". No test catches it, because test_mapping_list_covers_high_risk_internal_families only asserts the mapping line is present. Consider scoping the sentence to rendering rather than to contract coverage, e.g. that a proper noun is never translated while the do-not-expose rule still governs whether to name it at all. The wording is deliberate, so this needs the author's decision rather than an edit.
  • ℹ️ .agents/skills/domain-modeling/DECISION-RECORD-FORMAT.md:45 - This line claims the data/decisions/&lt;YYYY-MM-DD&gt;-&lt;slug&gt;.md record "is the same durable decision file that decision-hold-lifecycle step 7 records and links when a captain hold is resolved". That owner states only "Put the captain's exact durable decision in a file" (.agents/skills/decision-hold-lifecycle/SKILL.md:36), and bin/fm-decision-hold.sh accepts --decision-file &lt;path&gt; with no location or naming constraint. So the shared-location claim is not backed by either artifact it names, and a reader following it may believe decision-hold-lifecycle already enforces that path. Given the intent's boundary that decision-hold-lifecycle stays sole owner of the hold lifecycle, either soften this to a routing preference this skill applies, or land the location in the owner.
  • ℹ️ .agents/skills/domain-modeling/SKILL.md:73 - Fleet-operational terms route to data/learnings.md here and in GLOSSARY-FORMAT.md:9, but neither states which entry contract applies. AGENTS.md:99 requires data/learnings.md entries to be dated, evidence-backed, curated, and written with inspect-then-update, while GLOSSARY-FORMAT.md prescribes the **Term**: / _Avoid_ glossary shape for the project-side ## Language section. An agent applying the glossary shape to data/learnings.md produces an entry that does not meet the learnings contract. A one-clause pointer to AGENTS.md's learnings contract would resolve it.
  • ℹ️ docs/domain-modeling-provenance.md:26 - The normalisation note reads "The source writes the arrow in a relationship as and no file in this repository does" - but that line is itself the only non-ASCII character in the repository's tracked surface (verified: a repo-wide non-ASCII scan of the changed files returns this line alone), so the statement falsifies itself. In a licence document whose whole point is that alterations are declared accurately, and in a change whose thesis is checking a claim against the artifact, "no other file in this repository does" is the accurate wording.

🔧 Fix: scope proper-noun rule to rendering, fix unsupported claims
✅ Re-checked - no issues remain.

⚠️ **Test** - 1 info
  • ℹ️ docs/domain-modeling-provenance.md:88 - docs/domain-modeling-provenance.md states that exactly two characters are normalised in quotations and "nothing else in a quotation is altered", but the quotation on line 88 also converts upstream's nested double quotes around "we did the obvious thing." into single quotes, forced by the outer quote delimiters. Verified against upstream ADR-FORMAT.md line 37. Purely cosmetic and self-evidently forced by the quoting convention; noted only because the page's own subject is declaring its alterations.
  • bin/fm-test-run.sh tests/fm-instruction-owners.test.sh tests/fm-captain-translation-contract.test.sh - both suites pass, including the new domain-modeling carries its section 6 trigger, its terminology rule, and its MIT notice and section 9 keeps a proper noun untranslated without exempting it from the ban cases
  • Mutation checks that the new assertions hold something up: removed the MIT permission notice from docs/domain-modeling-provenance.md, removed the section 6 /domain-modeling trigger sentence from AGENTS.md, and removed the rendering-only scoping sentence from section 9 - each made the owning suite fail; worktree restored with git checkout -- after each and confirmed clean
  • Independent upstream fidelity check (python3 verify-upstream-fidelity.py . /tmp/nm-upstream-skills) against a read-only git clone --depth 1 https://github.com/mattpocock/skills.git, whose head is the pinned commit 2ab9580: MIT notice equals upstream LICENSE character for character; 14 source-attributed quotations all located upstream under the declared em-dash and arrow normalisations; the 5 dropped capabilities (CONTEXT-MAP.md, glossary structural purity, context inference, ADR numbering scan, shared-dependency role) all present upstream; no CONTEXT.md, docs/adr/, or CONTEXT-MAP.md created in this repo; reported source line counts 74/60/47 confirmed
  • git show --pretty=format: --name-only b8f82f2 - confirms the skill, docs/domain-modeling-provenance.md, and the README pointer land in one commit, which is the acceptance condition
  • Rendered README.md and docs/domain-modeling-provenance.md through GitHub's own Markdown API (gh api --method POST /markdown) and captured browser screenshots of the /domain-modeling slash-command row, the License section, the MIT notice, and the What-we-dropped list
  • ls -l .claude/skills and sed -n 1,10p .claude/skills/domain-modeling/SKILL.md - the harness-visible skill path resolves through the symlink with user-invocable: true, and the skill stays out of the installer-facing public skills/
  • bin/fm-test-run.sh --check-coverage - FM_TEST_COVERAGE ok total=121, so the shard partition still equals the tests inventory after extending two existing files
  • bin/fm-test-run.sh tests/fm-decision-hold-lifecycle.test.sh tests/fm-ensure-agents-md.test.sh tests/fm-stow-contract.test.sh tests/fm-sea-chart.test.sh - adjacent contracts that read the edited AGENTS.md all pass
⚠️ **Document** - 2 infos
  • ℹ️ docs/skill-trigger-coverage-audit.md:9 - docs/skill-trigger-coverage-audit.md states "twelve of the nineteen skills under .agents/skills/" and "the three user-invocable ones"; .agents/skills/ now holds 23 directories and README lists 9 user-invocable skills. I deliberately left this alone: the document is a dated audit (2026-07-31) pinned to bases 6fa6926 and de0b95b, and it argues explicitly that restating removal-proven counts against a tree nobody re-ran the removals on is the exact unverified-number failure it exists to catch. Its counts are therefore historical measurements, not current-state claims, and the drift predates this change. Flagging it only because a reviewer will notice a new skill landing without that count moving.
  • ℹ️ docs/arm-pretool-check.md:24 - docs/arm-pretool-check.md:24 and docs/decision-hold-lifecycle.md:31 each contain an em dash, contradicting the plain-dash rule owned by .agents/skills/firstmate-coding-guidelines/SKILL.md:85 - the same rule docs/domain-modeling-provenance.md cites as its reason for normalising quoted em dashes out of a licence document. Surfaced while verifying that citation. Both are pre-existing and unrelated to this change, so I left them rather than widen the diff; worth a two-character follow-up.
✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

@Freudator86
Freudator86 force-pushed the fm/fm-adopt-domain-modeling branch from 56e0533 to af28f04 Compare August 3, 2026 14:42
Coditan-XO added 3 commits August 3, 2026 15:01
…tice

Adopts the domain-modeling skill from mattpocock/skills (MIT), read whole at
upstream 2ab9580. The notice lands in this same commit rather than in a later
correction, which is what the earlier Wayfinder adoption needed.

Kept whole: the active/passive boundary, the five live moves, the three-part bar
a decision must clear, the seven qualifying categories, the one-paragraph record,
and the glossary rules including the _Avoid_ convention.

Changed, because the fleet already has these stores and must not gain a third:
resolved terms go to a ## Language section of a project's committed AGENTS.md or
to data/learnings.md, and decisions go to the existing dated records under
data/decisions/, instead of a new CONTEXT.md and docs/adr/ tree. Cross-
referencing widens from code to any checkable artifact, because three of the four
failures that motivated this were an old installed version, a count of something
that never ran, and a name resolving to a different file than intended. An
unresolved captain decision is handed to decision-hold-lifecycle, which stays its
single owner.

Carries the terminology rule set 2026-08-03: a domain's proper nouns are never
translated in any language, and German is written per DU. AGENTS.md section 9
gains the one-line boundary against it, since the turn that writes Werkbank for
workbench is exactly a turn on which no skill was loaded.

Dropped, and recorded in full: CONTEXT-MAP.md and the multi-context model, which
is the loss most relevant to why the skill was adopted; the glossary's structural
purity, which a mixed memory file cannot guarantee; context inference; and
sequential numbering. docs/domain-modeling-provenance.md carries the copyright
notice, every quotation checked against the source, and what each drop costs.
@Freudator86
Freudator86 force-pushed the fm/fm-adopt-domain-modeling branch from af28f04 to 2272c63 Compare August 3, 2026 15:15
@Freudator86
Freudator86 merged commit 171c9ae into main Aug 3, 2026
10 checks passed
@Freudator86
Freudator86 deleted the fm/fm-adopt-domain-modeling branch August 3, 2026 18:50
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