geneseed 3.7.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/DESIGN.md +13 -10
- package/README.md +5 -5
- package/SETUP.md +2 -2
- package/SHIPPED.md +3 -3
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +1 -1
- package/adapters/opencode/README.md +3 -3
- package/adapters/opencode/plugins/geneseed-guard.js +9 -9
- package/adapters/opencode/plugins/geneseed-workflow.js +1 -1
- package/adapters/opencode/workflows/_runtime.js +2 -2
- package/adapters/opencode/workflows/dispatch.js +1 -1
- package/docs/extending.md +72 -40
- package/docs/web/harnesses.md +2 -2
- package/docs/web/plugin-guard.md +2 -2
- package/docs/web/rules.md +1 -1
- package/docs/web/themes-author.md +2 -2
- package/docs/web-ui.md +1 -1
- package/harness.config.json +1 -1
- package/js/README.md +4 -3
- package/js/build/driver.mjs +14 -5
- package/js/build/generate.mjs +90 -41
- package/js/build/render.mjs +6 -3
- package/js/build/source.mjs +105 -1
- package/js/build/stubs.mjs +7 -2
- package/js/cli-table.json +154 -5
- package/js/hosts/hooks.mjs +5 -5
- package/js/hosts/native.mjs +1 -1
- package/js/inspect/checks-authoring.mjs +149 -116
- package/js/inspect/inventory.mjs +1 -2
- package/js/inspect/status.mjs +40 -4
- package/js/ui/tui.mjs +1 -1
- package/js/web/api.mjs +6 -1
- package/package.json +1 -1
- package/registry.json +7 -0
- package/src/AGENT.md.tmpl +19 -15
- package/src/agents/_template.md +3 -3
- package/src/agents/advocate.md +3 -3
- package/src/agents/architect.md +3 -3
- package/src/agents/developer.md +4 -4
- package/src/agents/docs.md +3 -3
- package/src/agents/empiricist.md +4 -4
- package/src/agents/explorer.md +4 -4
- package/src/agents/framer.md +3 -3
- package/src/agents/historian.md +3 -3
- package/src/agents/operator.md +3 -3
- package/src/agents/pragmatist.md +3 -3
- package/src/agents/researcher.md +7 -7
- package/src/agents/reviewer.md +3 -3
- package/src/agents/security.md +3 -3
- package/src/agents/skeptic.md +3 -3
- package/src/agents/steward.md +3 -3
- package/src/agents/tester.md +3 -3
- package/src/agents/user-advocate.md +3 -3
- package/src/agents/visionary.md +3 -3
- package/src/doctrines/README.md +4 -3
- package/src/doctrines/comms.md +4 -4
- package/src/doctrines/craft.md +20 -20
- package/src/doctrines/ops.md +19 -19
- package/src/doctrines/process.md +20 -20
- package/src/doctrines/rigor.md +22 -22
- package/src/laws/universal.md +23 -44
- package/src/memory/README.md +3 -3
- package/src/modes/foreman.md +1 -1
- package/src/notebook/README.md +1 -1
- package/src/ontology/universal.md +7 -9
- package/src/postures/artisan.md +2 -2
- package/src/skills/_self-improvement.md +4 -4
- package/src/skills/_template.md +1 -1
- package/src/skills/brainstorm.md +3 -3
- package/src/skills/bruno-collection-generator.md +6 -6
- package/src/skills/bruno-test-writer.md +5 -5
- package/src/skills/ci-fix.md +4 -4
- package/src/skills/commit.md +11 -10
- package/src/skills/consolidate-memory.md +4 -4
- package/src/skills/council.md +2 -2
- package/src/skills/debug.md +4 -4
- package/src/skills/deps-audit.md +3 -3
- package/src/skills/develop.md +7 -7
- package/src/skills/document-project.md +6 -6
- package/src/skills/explain-changes/SKILL.md +69 -0
- package/src/skills/explain-changes/VENDOR.md +20 -0
- package/src/skills/explain-changes/scripts/render_changes.mjs +558 -0
- package/src/skills/forge-mcp.md +4 -4
- package/src/skills/fresh-eyes.md +4 -4
- package/src/skills/frontend-design.md +1 -1
- package/src/skills/geneseed.md +9 -8
- package/src/skills/git-archaeology.md +5 -5
- package/src/skills/git-rescue.md +7 -7
- package/src/skills/handoff.md +3 -3
- package/src/skills/ingest.md +5 -5
- package/src/skills/migrate.md +8 -8
- package/src/skills/parallel-agents.md +2 -2
- package/src/skills/pipeline.md +2 -2
- package/src/skills/plan.md +3 -3
- package/src/skills/ponytail.md +2 -2
- package/src/skills/profile.md +2 -2
- package/src/skills/prose.md +1 -1
- package/src/skills/prototype.md +1 -1
- package/src/skills/refactor.md +3 -3
- package/src/skills/release.md +5 -5
- package/src/skills/repo-map.md +4 -4
- package/src/skills/research.md +9 -9
- package/src/skills/review-response.md +4 -4
- package/src/skills/rule.md +3 -3
- package/src/skills/security-audit.md +5 -5
- package/src/skills/ship.md +5 -5
- package/src/skills/skill-forge.md +4 -4
- package/src/skills/wiki.md +5 -5
- package/src/skills/workflow.md +2 -3
- package/src/skills/worktree.md +4 -4
- package/themes/_TEMPLATE.json +38 -40
- package/themes/biker.json +38 -40
- package/themes/commentator.json +38 -40
- package/themes/cyberpunk.json +38 -40
- package/themes/gamer.json +38 -40
- package/themes/imperial.json +38 -40
- package/themes/joker.json +38 -40
- package/themes/marvin.json +38 -40
- package/themes/mean.json +38 -40
- package/themes/military.json +38 -40
- package/themes/neutral.json +38 -40
- package/themes/pirate.json +38 -40
- package/themes/sports.json +38 -40
- package/themes/verstappen.json +38 -40
- package/themes/wizard.json +38 -40
- package/web/dist/assets/Activity-DAzV-qQj.js +1 -0
- package/web/dist/assets/ActivityDetail-CwEwMtKl.js +1 -0
- package/web/dist/assets/Dashboard-C2ELBW-X.js +2 -0
- package/web/dist/assets/{Docs-DrJNDPwI.js → Docs-iZrvQP8J.js} +2 -2
- package/web/dist/assets/FilterInput-CVyqmYWM.js +1 -0
- package/web/dist/assets/GreenhouseView-Bq1QmaGO.js +2 -0
- package/web/dist/assets/Installs-BiqR8xdO.js +2 -0
- package/web/dist/assets/JournalView-6wilG5Zd.js +1 -0
- package/web/dist/assets/Laws-D8YXD_XE.js +3 -0
- package/web/dist/assets/Library-DwuTZ2-L.js +1 -0
- package/web/dist/assets/{Markdown-BQAvN8xx.js → Markdown-CkFyfgNf.js} +14 -14
- package/web/dist/assets/OperatorHudView-B-HVBqfY.js +2 -0
- package/web/dist/assets/Personal-BbUTmZQR.js +1 -0
- package/web/dist/assets/Tabs-_pjUFIEI.js +1 -0
- package/web/dist/assets/drawable-CoIulEH2.js +1 -0
- package/web/dist/assets/geist-mono-latin-400-normal-DTRLJnHl.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-500-normal-YINYabwD.woff2 +0 -0
- package/web/dist/assets/index-BMwSp8BP.js +2 -0
- package/web/dist/assets/index-CDPDk2vj.css +1 -0
- package/web/dist/assets/{react-DbkvxWG5.js → react-B9Z_tXRV.js} +1 -1
- package/web/dist/assets/sections-GalMS0Zv.js +1 -0
- package/web/dist/assets/usePoll-O0sJEw1Y.js +1 -0
- package/web/dist/index.html +4 -4
- package/web/src/pages/Laws.jsx +616 -361
- package/web/dist/assets/Activity-CH-7cPIM.js +0 -1
- package/web/dist/assets/ActivityDetail-DZvz0xS5.js +0 -1
- package/web/dist/assets/CatalogRow-DftXpZHY.js +0 -1
- package/web/dist/assets/Diff-DvwdG0L9.js +0 -2
- package/web/dist/assets/Doctor-OTmwmYZg.js +0 -1
- package/web/dist/assets/FilterInput-BakJLvaV.js +0 -1
- package/web/dist/assets/GreenhouseView-XxrAdriX.js +0 -2
- package/web/dist/assets/Harness-C_LYNk5c.js +0 -1
- package/web/dist/assets/JournalView-BcuyeEaR.js +0 -1
- package/web/dist/assets/Laws-CWHrTKY4.js +0 -3
- package/web/dist/assets/Library-CA9IHghn.js +0 -1
- package/web/dist/assets/OperatorHudView-BMRY1Tt4.js +0 -2
- package/web/dist/assets/Profile-wceET1JY.js +0 -1
- package/web/dist/assets/Rules-BEXvY4Tx.js +0 -1
- package/web/dist/assets/Settings-DS2zF0Ez.js +0 -1
- package/web/dist/assets/Skills-DahlOJuI.js +0 -1
- package/web/dist/assets/StatusBadge-Cg6j-NJL.js +0 -1
- package/web/dist/assets/activity-iWaWVtsR.js +0 -1
- package/web/dist/assets/audiowide-latin-400-normal-6GFCX7ni.woff2 +0 -0
- package/web/dist/assets/drawable-BTHjTzF7.js +0 -1
- package/web/dist/assets/geist-mono-latin-400-normal-DKaoCDn5.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-500-normal-C3sF8Y1B.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-600-normal-BHzjB6_C.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-400-normal-BIGslYFI.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-500-normal-REKAfBVG.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-600-normal-DAxitmSu.woff2 +0 -0
- package/web/dist/assets/index-AN5Emnrg.js +0 -2
- package/web/dist/assets/index-Ruh93A3A.css +0 -1
- package/web/dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
- package/web/dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
- package/web/dist/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
- package/web/dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
- package/web/dist/assets/lawCats-Btjp3Hk_.js +0 -1
- package/web/dist/assets/oswald-latin-400-normal-BAFo8sP8.woff2 +0 -0
- package/web/dist/assets/oswald-latin-500-normal-B-eyT0Dw.woff2 +0 -0
- package/web/dist/assets/oswald-latin-600-normal-plFmSr5g.woff2 +0 -0
- package/web/dist/assets/oswald-latin-700-normal-vy6hmKSr.woff2 +0 -0
- package/web/dist/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
- package/web/dist/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
- package/web/dist/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
- package/web/dist/assets/poppins-latin-700-normal-Qrb0O0WB.woff2 +0 -0
- package/web/dist/assets/rolldown-runtime-CbXtAM7H.js +0 -1
package/src/skills/develop.md
CHANGED
|
@@ -9,30 +9,30 @@ case where the seam is only known once the change is made.
|
|
|
9
9
|
|
|
10
10
|
## Procedure
|
|
11
11
|
1. Orient on the project's own documentation for what you are about to touch
|
|
12
|
-
({{DOCTRINE}}
|
|
13
|
-
the baseline is green ({{LAW}}
|
|
12
|
+
({{DOCTRINE:read-the-docs-first}}), and confirm the actual starting state — the suite runs,
|
|
13
|
+
the baseline is green ({{LAW:verify-before-asserting}}). A red baseline is a [debug {{SKILL}}](debug.md)
|
|
14
14
|
task first, not something to build on.
|
|
15
15
|
2. Agree the seams: name the public interfaces the tests will target and confirm
|
|
16
16
|
them with the user when they are not obvious — no test is written at an
|
|
17
17
|
unconfirmed seam. Testing effort belongs on critical paths and complex logic,
|
|
18
18
|
not every edge.
|
|
19
|
-
3. Pick the next **smallest slice** that advances the task ({{DOCTRINE}}
|
|
19
|
+
3. Pick the next **smallest slice** that advances the task ({{DOCTRINE:smallest-viable-diff}}), then
|
|
20
20
|
cover it:
|
|
21
21
|
- *Seam known up front* — test-first. Write ONE failing test that pins the slice,
|
|
22
22
|
specific about the expected output (for a bug, the test reproduces it). Run it
|
|
23
23
|
and watch it fail **for the right reason** — a test that passes immediately, or
|
|
24
24
|
fails on a typo, proves nothing.
|
|
25
25
|
- *Seam only clear once the change exists* — write the covering test alongside the
|
|
26
|
-
change ({{DOCTRINE}}
|
|
26
|
+
change ({{DOCTRINE:cover-and-verify}}), then break the implementation on purpose once to
|
|
27
27
|
see the test go red before trusting it.
|
|
28
28
|
4. Write the minimum code that makes it pass; add nothing the test doesn't demand.
|
|
29
|
-
5. Run the *affected* tests and read the output ({{LAW}}
|
|
30
|
-
cause, never mask it ({{LAW}}
|
|
29
|
+
5. Run the *affected* tests and read the output ({{LAW:verify-before-asserting}}); on failure fix the
|
|
30
|
+
cause, never mask it ({{LAW:cure-the-cause}}). Dispatch the
|
|
31
31
|
[tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for heavier or unfamiliar coverage,
|
|
32
32
|
or when the blast radius is unclear.
|
|
33
33
|
6. With the slice green, tidy through the [refactor {{SKILL}}](refactor.md) — the tests
|
|
34
34
|
are the safety net — then commit the slice through the [commit {{SKILL}}](commit.md)
|
|
35
|
-
({{DOCTRINE}}
|
|
35
|
+
({{DOCTRINE:consent-before-push}}). Loop from step 3, one slice at a time.
|
|
36
36
|
7. **Exit.** When the last slice is in: run the whole affected suite once more, state
|
|
37
37
|
what was run and its result, and hand over — to the [ship {{SKILL}}](ship.md) when
|
|
38
38
|
the change is ready for a PR, or to the [handoff {{SKILL}}](handoff.md) if the
|
|
@@ -13,8 +13,8 @@ write; with none, step 3 proposes them.
|
|
|
13
13
|
convention [repo-map {{SKILL}}](repo-map.md) and the context loader use). Reuse the one
|
|
14
14
|
that exists — never create a second. If none exists, create `docs/` at the root.
|
|
15
15
|
2. **Survey the code, not the intent.** Map entry points, the public API / modules,
|
|
16
|
-
commands, config, and key directories — read the actual behaviour (
|
|
17
|
-
{{DOCTRINE}}
|
|
16
|
+
commands, config, and key directories — read the actual behaviour ({{LAW:verify-before-asserting}},
|
|
17
|
+
{{DOCTRINE:read-the-docs-first}}). If there is no `ARCHITECTURE.md`, run [repo-map {{SKILL}}](repo-map.md)
|
|
18
18
|
first so you have the orientation map to build on.
|
|
19
19
|
3. **Select the doc set.** Unless the argument names the targets, propose which of the four
|
|
20
20
|
documents apply and wait for the user's go-ahead — e.g. "no UI detected (no stylesheet,
|
|
@@ -30,7 +30,7 @@ write; with none, step 3 proposes them.
|
|
|
30
30
|
5. **Reconcile the markdown (whole tree).** Check every existing page against the current
|
|
31
31
|
implementation — renamed or removed APIs, changed flags, dead examples — and fix the
|
|
32
32
|
drift. Add pages for significant undocumented surfaces; remove docs for features that no
|
|
33
|
-
longer exist (deletion
|
|
33
|
+
longer exist ({{LAW:deletion-is-deliberate}}). For substantial writing, dispatch
|
|
34
34
|
the [docs {{AGENT}}](../{{DIR_AGENTS}}/docs.md). Keep examples runnable — run them.
|
|
35
35
|
Every generated page follows three conventions:
|
|
36
36
|
- **Typed frontmatter.** Open each page with YAML frontmatter carrying `type:` (one of
|
|
@@ -52,9 +52,9 @@ write; with none, step 3 proposes them.
|
|
|
52
52
|
members included, current with the set you just reconciled.
|
|
53
53
|
7. **Regenerate the HTML** — self-contained files at the doc home, a visual parallel to the
|
|
54
54
|
markdown and never a source of truth: regenerate them whole from the markdown each run
|
|
55
|
-
({{DOCTRINE
|
|
55
|
+
({{DOCTRINE:edit-the-source-not-the-surface}}).
|
|
56
56
|
Overwrite the previous ones, but confirm each is the generated artifact before clobbering
|
|
57
|
-
({{LAW}}
|
|
57
|
+
({{LAW:verify-before-asserting}}, {{LAW:deletion-is-deliberate}}). Both files:
|
|
58
58
|
- **Stand alone, fully offline** — a single file, content pre-rendered to semantic HTML,
|
|
59
59
|
all styling in one inline `<style>`, at most minimal vanilla JS (light/dark toggle, TOC
|
|
60
60
|
scroll). No CDN, no external assets, no web fonts (use a system-font stack). Render any
|
|
@@ -84,7 +84,7 @@ write; with none, step 3 proposes them.
|
|
|
84
84
|
(variants, states, path) — no live rendering, which would need the project's framework; and
|
|
85
85
|
the hard-coded-value drift in a separate callout.
|
|
86
86
|
8. **Do not auto-publish.** Leave the changes for the user to review; stage and commit only
|
|
87
|
-
on consent, via the [commit {{SKILL}}](commit.md) ({{DOCTRINE}}
|
|
87
|
+
on consent, via the [commit {{SKILL}}](commit.md) ({{DOCTRINE:consent-before-push}}).
|
|
88
88
|
|
|
89
89
|
## The doc set
|
|
90
90
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explain-changes
|
|
3
|
+
description: "Explain a change visually before it is committed: renders one offline HTML page — the intent, the risks to check first, a walkthrough by logical unit, and the exact git diff side by side — and opens it. Use when the user asks to explain, walk through, show, visualise or review the changes ('what did you change?', 'show me the diff'), before asking consent to commit a non-trivial change (offer it, never impose it), or to explain a whole branch or PR."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# explain-changes
|
|
7
|
+
|
|
8
|
+
> Turn a diff into a page a human can actually verify: why each part changed, what to check first, and the exact diff beside it.
|
|
9
|
+
|
|
10
|
+
**Trigger:** the user asks to explain, walk through, show or visualise the changes; you are about to ask consent to commit a non-trivial change (offer the report — never make it a condition); or the user wants a branch or PR explained (`--base <ref>`).
|
|
11
|
+
|
|
12
|
+
## Division of labour
|
|
13
|
+
|
|
14
|
+
You write the **brief** — the narrative only. `scripts/render_changes.mjs` runs `git diff` itself and puts the exact diff on the page. Never paste diff lines into the brief: you would pay for them in output tokens and could alter the very thing under review. The script only reads git; it never stages anything.
|
|
15
|
+
|
|
16
|
+
## Procedure
|
|
17
|
+
|
|
18
|
+
1. **Measure.** `git diff --cached --shortstat`; if empty, `git diff HEAD --shortstat`; for a branch, `git diff <ref>...HEAD --shortstat`. The shortstat leaves out untracked files, which the report includes when nothing is staged: add `git ls-files --others --exclude-standard | wc -l` (or the host equivalent) to the file count.
|
|
19
|
+
2. **Choose who writes the brief.**
|
|
20
|
+
- You made the change, and it is under ~300 changed lines and ~10 files: write it yourself from what you already know. Read only the hunks you do not remember (`git diff -- <path>`).
|
|
21
|
+
- Bigger, a change you did not make, or your context is already heavy: delegate to **one fresh subagent** (the `developer` agent where the host has agents). Hand it the user's request verbatim, your intent notes per logical unit (a few lines each), the diff command, this file's brief rules, and the render command. It returns the report path and three lines. The full diff never enters your context.
|
|
22
|
+
- No subagents on this host: write the brief one logical unit at a time, reading `git diff -- <paths>` for that unit only.
|
|
23
|
+
3. **Write the brief** as JSON to a temporary file outside the repository (schema below).
|
|
24
|
+
4. **Render.**
|
|
25
|
+
`node <this-skill-directory>/scripts/render_changes.mjs --brief <brief.json> --out <your notebook directory>` — add `--base <ref>` for a branch. Your notebook directory is named in your root instructions; if this install has none, omit `--out` and the report goes under `.git/explain-changes/`.
|
|
26
|
+
`--base <ref>` covers committed work only (`<ref>...HEAD`); uncommitted changes are not in it — commit first, or explain them separately without `--base`.
|
|
27
|
+
5. **Fix mismatches.** If the script prints narrative mismatches — a file or hunk you cited that is not in the diff, a changed file no unit explains, an unsafe diagram, no risks — fix the brief and re-run. Never hand over a bannered report.
|
|
28
|
+
6. **Open it.** Windows `start "" "<path>"` from cmd or Git Bash, `Start-Process "<path>"` from PowerShell; macOS `open "<path>"`, Linux `xdg-open "<path>"`. If that fails (headless, SSH, container), print the path instead.
|
|
29
|
+
7. **Hand over** in two lines: the path, and the one risk the user should check first. Before you later ask commit consent, run the script with `--hash`: if it differs from the `diff <hash>` in the report's footer, the diff has changed since — regenerate.
|
|
30
|
+
|
|
31
|
+
## The brief
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"lang": "en",
|
|
36
|
+
"title": "HTTP cache with expiry",
|
|
37
|
+
"request": "the user's request, verbatim",
|
|
38
|
+
"summary": "3-5 sentences: what changes for the user or the system, and why",
|
|
39
|
+
"risks": [
|
|
40
|
+
{ "level": "high", "text": "The cache key ignores auth headers: two users can get each other's response.", "unit": "u2" }
|
|
41
|
+
],
|
|
42
|
+
"units": [
|
|
43
|
+
{
|
|
44
|
+
"id": "u1",
|
|
45
|
+
"kind": "entry point",
|
|
46
|
+
"title": "The client reads the cache before the network",
|
|
47
|
+
"why": "1-2 sentences",
|
|
48
|
+
"files": ["src/http/client.js"],
|
|
49
|
+
"hunks": { "src/http/client.js": [0, 1] },
|
|
50
|
+
"out_of_scope": false,
|
|
51
|
+
"svg": "<svg viewBox=\"0 0 760 150\">…</svg>"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- `request` is the user's words, verbatim — not your summary of them.
|
|
58
|
+
- **Units follow execution order** (entry point → core → effects → tests), not file order. One unit = one intent. `hunks` picks hunks by index; omit it to show every hunk of each file in `files`.
|
|
59
|
+
- **`risks` is the section the reader acts on.** Cover, whenever they exist: assumptions you did not verify; what is untested; files touched outside the request (also mark that unit `"out_of_scope": true`); user-visible behaviour changes (API, config, schema, migrations). You are describing your own work — err toward listing. `level` is `high`, `medium` or `low`. An empty list needs `"risks_none_reason"`.
|
|
60
|
+
- **`svg` only when the change alters a flow between components** — a call sequence, a data model, a state machine. A change local to one file gets none. Hand-written inline SVG, one `<svg>` element and nothing after it; no scripts, event handlers, `foreignObject`, `<style>` (use attributes), animated links, external links or `url()` to anything but a `#fragment` — the script drops unsafe diagrams. Use `currentColor`, `var(--muted)`, `var(--add-ink)`, `var(--del-ink)`, `var(--line)` and `var(--code-bg)` so it follows the page theme.
|
|
61
|
+
- `lang` is `en` or `fr`, matching the user's language; write every text field in that language.
|
|
62
|
+
|
|
63
|
+
## Privacy
|
|
64
|
+
|
|
65
|
+
The report contains code. It stays in a git-ignored local path; if the diff holds a secret, the report does too — the same exposure as the diff itself. Never commit or publish a report.
|
|
66
|
+
|
|
67
|
+
## Done when
|
|
68
|
+
|
|
69
|
+
- A report built from the current diff exists with no mismatch banner, it is open (or its path given), and the user knows the one risk to check first.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Folder skill — explain-changes
|
|
2
|
+
|
|
3
|
+
Like `token-report`, this folder is **Geneseed-authored**, not third-party. It rides
|
|
4
|
+
the vendored-folder mechanism because it bundles an executable
|
|
5
|
+
(`scripts/render_changes.mjs`) and Geneseed's flat-skill pipeline renders single
|
|
6
|
+
`.md` files only. Listing it in the generator's `VENDORED_SKILL_DIRS` makes the
|
|
7
|
+
whole folder ride along verbatim into every host emit — Claude Code, IBM Bob,
|
|
8
|
+
OpenCode, GitHub Copilot, OpenClaude.
|
|
9
|
+
|
|
10
|
+
- **Upstream:** this repository (first-party)
|
|
11
|
+
- **License:** same as Geneseed (see repository LICENSE)
|
|
12
|
+
|
|
13
|
+
Consequences of riding this mechanism (deliberate):
|
|
14
|
+
|
|
15
|
+
- exempt from the flat-skill authoring gates (theme DESC tokens, dead-link,
|
|
16
|
+
hermeticity) — the SKILL.md carries its own frontmatter `description`, and it
|
|
17
|
+
names no themed term: the notebook directory reaches the script as `--out`;
|
|
18
|
+
- listed in AGENT.md's folder-skills section, not the main skills table.
|
|
19
|
+
|
|
20
|
+
The script needs only `node` and `git`, both already present wherever Geneseed runs.
|