geneseed 3.11.0 → 3.13.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 +160 -0
- package/README.md +5 -5
- package/SHIPPED.md +2 -2
- package/adapters/bob/README.md +1 -1
- package/adapters/claude-code/README.md +1 -1
- package/adapters/openclaude/README.md +1 -1
- package/adapters/opencode/README.md +3 -3
- package/adapters/opencode/plugins/geneseed-guard.js +157 -2
- package/bin/geneseed-cli.mjs +4 -0
- package/docs/README.md +41 -22
- package/docs/concepts/agents.md +3 -1
- package/docs/concepts/collaboration.md +3 -1
- package/docs/concepts/exclusions.md +4 -2
- package/docs/concepts/footprint.md +3 -1
- package/docs/concepts/foreman-mode.md +4 -2
- package/docs/concepts/hook-gates.md +61 -0
- package/docs/concepts/hooks.md +8 -56
- package/docs/concepts/host-matrix.md +38 -0
- package/docs/concepts/hosts.md +6 -32
- package/docs/concepts/loop-branch.md +66 -0
- package/docs/concepts/loop-bricks.md +48 -0
- package/docs/concepts/loop-contracts.md +33 -0
- package/docs/concepts/loop-gates.md +30 -0
- package/docs/concepts/loop-notes.md +43 -0
- package/docs/concepts/loop-risk.md +36 -0
- package/docs/concepts/loop-templates.md +50 -0
- package/docs/concepts/loops.md +73 -0
- package/docs/concepts/lsp.md +2 -0
- package/docs/concepts/memory.md +3 -1
- package/docs/concepts/notebook.md +3 -1
- package/docs/concepts/rules.md +4 -2
- package/docs/concepts/skills.md +3 -1
- package/docs/concepts/themes.md +3 -1
- package/docs/extending.md +28 -8
- package/docs/guides/autostart.md +3 -1
- package/docs/guides/choose-your-setup.md +5 -66
- package/docs/guides/headless.md +5 -3
- package/docs/guides/install-agent-md.md +37 -0
- package/docs/guides/install-bob.md +20 -0
- package/docs/guides/install-claude-code.md +22 -0
- package/docs/guides/install-clone.md +34 -0
- package/docs/guides/install-openclaude.md +25 -0
- package/docs/guides/install-opencode.md +35 -0
- package/docs/guides/install-scripted.md +21 -0
- package/docs/guides/install.md +9 -118
- package/docs/guides/loop-finish.md +54 -0
- package/docs/guides/loop-running.md +66 -0
- package/docs/guides/loop-which-template.md +35 -0
- package/docs/guides/mcp-filesystem.md +41 -0
- package/docs/guides/mcp-gitlab.md +66 -0
- package/docs/guides/mcp-markitdown.md +36 -0
- package/docs/guides/mcp.md +8 -137
- package/docs/guides/migrate.md +3 -1
- package/docs/guides/project-context.md +4 -2
- package/docs/guides/read-non-markdown.md +17 -0
- package/docs/guides/run-a-loop.md +64 -0
- package/docs/guides/run-anywhere.md +2 -0
- package/docs/guides/setup-doctrines.md +55 -0
- package/docs/guides/setup-footprint.md +48 -0
- package/docs/guides/uninstall.md +3 -1
- package/docs/guides/upgrade.md +3 -1
- package/docs/guides/verify.md +3 -1
- package/docs/guides/wiki.md +3 -1
- package/docs/guides/worktree.md +3 -1
- package/docs/reference/about.md +3 -1
- package/docs/reference/cli.md +2 -0
- package/docs/reference/env-context.md +40 -0
- package/docs/reference/environment.md +10 -59
- package/docs/reference/glossary.md +7 -1
- package/docs/reference/loop-actions.md +20 -0
- package/docs/reference/opencode-plugins.md +14 -116
- package/docs/reference/plugin-activity.md +20 -0
- package/docs/reference/plugin-context.md +27 -0
- package/docs/reference/plugin-guard.md +27 -0
- package/docs/reference/plugin-learn.md +27 -0
- package/docs/reference/plugin-notify.md +20 -0
- package/docs/reference/plugin-ponytail.md +19 -0
- package/docs/reference/plugin-workflow.md +25 -0
- package/docs/reference/troubleshoot-doctor.md +50 -0
- package/docs/reference/troubleshoot-hooks.md +99 -0
- package/docs/reference/troubleshoot-install.md +108 -0
- package/docs/reference/troubleshoot-tools.md +56 -0
- package/docs/reference/troubleshoot-update.md +23 -0
- package/docs/reference/troubleshoot-web.md +66 -0
- package/docs/reference/troubleshooting.md +13 -337
- package/docs/understand/a-day.md +3 -1
- package/docs/understand/enforced-vs-asked.md +3 -1
- package/docs/understand/harness.md +2 -0
- package/docs/understand/machine-bob.md +17 -0
- package/docs/understand/machine-claude.md +35 -0
- package/docs/understand/machine-opencode.md +36 -0
- package/docs/understand/on-your-machine.md +12 -55
- package/docs/understand/take-it-out.md +13 -0
- package/docs/web-ui.md +36 -5
- package/harness.config.json +1 -1
- package/js/README.md +32 -2
- package/js/build/driver.mjs +14 -8
- package/js/build/generate.mjs +10 -6
- package/js/build/render.mjs +5 -0
- package/js/build/source.mjs +5 -1
- package/js/cli-table.json +261 -0
- package/js/hosts/gitref.mjs +99 -0
- package/js/hosts/hooks.mjs +88 -1
- package/js/hosts/installs.mjs +21 -0
- package/js/hosts/mcp.mjs +1 -1
- package/js/hosts/native.mjs +43 -5
- package/js/inspect/checks-authoring.mjs +10 -0
- package/js/inspect/checks-build.mjs +28 -0
- package/js/inspect/diff.mjs +3 -0
- package/js/inspect/doctor.mjs +2 -1
- package/js/inspect/inventory.mjs +1 -0
- package/js/inspect/status.mjs +1 -1
- package/js/loop/catalog.mjs +127 -0
- package/js/loop/cli.mjs +173 -0
- package/js/loop/graph.mjs +163 -0
- package/js/loop/registry.mjs +196 -0
- package/js/loop/score.mjs +182 -0
- package/js/loop/state.mjs +436 -0
- package/js/maintain/migrate.mjs +4 -2
- package/js/maintain/setup.mjs +1 -1
- package/js/web/actions.mjs +34 -3
- package/js/web/api.mjs +51 -2
- package/js/web/daemon.mjs +43 -5
- package/js/web/docs.mjs +64 -12
- package/js/web/handler.mjs +1 -0
- package/js/web/jobs.mjs +3 -1
- package/js/web/routes.mjs +5 -1
- package/js/web/server.mjs +5 -3
- package/package.json +1 -1
- package/registry.json +14 -0
- package/src/AGENT.md.tmpl +2 -0
- package/src/agents/explorer.md +2 -2
- package/src/agents/researcher.md +3 -3
- package/src/bricks/README.md +34 -0
- package/src/bricks/_template.md +32 -0
- package/src/bricks/adr-challenge.md +20 -0
- package/src/bricks/adr-draft.md +15 -0
- package/src/bricks/apply.md +17 -0
- package/src/bricks/baseline-green.md +17 -0
- package/src/bricks/bruno-test.md +16 -0
- package/src/bricks/characterize.md +17 -0
- package/src/bricks/ci-fix.md +18 -0
- package/src/bricks/ci-triage.md +20 -0
- package/src/bricks/compat-check.md +16 -0
- package/src/bricks/deps-audit.md +14 -0
- package/src/bricks/docs-update.md +15 -0
- package/src/bricks/done-check.md +16 -0
- package/src/bricks/fitness-define.md +22 -0
- package/src/bricks/flake-check.md +17 -0
- package/src/bricks/flake-repro.md +18 -0
- package/src/bricks/identify.md +23 -0
- package/src/bricks/lint.md +14 -0
- package/src/bricks/migration-plan.md +21 -0
- package/src/bricks/mutation-check.md +18 -0
- package/src/bricks/plan.md +17 -0
- package/src/bricks/red-test.md +16 -0
- package/src/bricks/reproduce.md +16 -0
- package/src/bricks/review.md +19 -0
- package/src/bricks/security-scan.md +17 -0
- package/src/bricks/spec.md +18 -0
- package/src/bricks/test.md +14 -0
- package/src/bricks/upgrade-scout.md +16 -0
- package/src/doctrines/process.md +11 -8
- package/src/loops/api-endpoint.json +31 -0
- package/src/loops/architecture-decision.json +22 -0
- package/src/loops/bugfix.json +23 -0
- package/src/loops/ci-repair.json +19 -0
- package/src/loops/deps-upgrade.json +29 -0
- package/src/loops/enforce-architecture-rule.json +28 -0
- package/src/loops/feature.json +24 -0
- package/src/loops/fix-flaky-tests.json +30 -0
- package/src/loops/legacy-refactor.json +26 -0
- package/src/loops/legacy-tests.json +29 -0
- package/src/loops/refactor.json +24 -0
- package/src/loops/remove-dead-code.json +30 -0
- package/src/loops/spec-first-feature.json +29 -0
- package/src/loops/tdd.json +25 -0
- package/src/loops/update-contract.json +33 -0
- package/src/skills/brick-forge.md +48 -0
- package/src/skills/bruno-collection-generator.md +3 -3
- package/src/skills/bruno-test-writer.md +3 -3
- package/src/skills/ci-fix.md +3 -3
- package/src/skills/consolidate-memory.md +4 -4
- package/src/skills/council.md +1 -1
- package/src/skills/fresh-eyes.md +1 -1
- package/src/skills/geneseed.md +1 -1
- package/src/skills/git-archaeology.md +1 -1
- package/src/skills/git-rescue.md +4 -3
- package/src/skills/handoff.md +1 -1
- package/src/skills/herdr.md +1 -1
- package/src/skills/learn-mode.md +2 -2
- package/src/skills/loop.md +111 -0
- package/src/skills/opencode-theme.md +3 -3
- package/src/skills/ponytail.md +1 -1
- package/src/skills/profile.md +3 -4
- package/src/skills/prose.md +2 -3
- package/src/skills/quiz.md +1 -1
- package/src/skills/react-view-transitions/SKILL.md +1 -1
- package/src/skills/react-view-transitions/VENDOR.md +8 -3
- package/src/skills/research.md +3 -3
- package/src/skills/review-response.md +2 -2
- package/src/skills/rule.md +3 -3
- package/src/skills/security-audit.md +4 -4
- package/src/skills/teach.md +1 -1
- package/src/skills/wiki.md +3 -3
- package/src/skills/workflow.md +4 -4
- package/src/skills/worktree.md +2 -2
- package/themes/_TEMPLATE.json +2 -0
- package/themes/biker.json +2 -0
- package/themes/commentator.json +2 -0
- package/themes/cyberpunk.json +2 -0
- package/themes/gamer.json +2 -0
- package/themes/imperial.json +2 -0
- package/themes/joker.json +2 -0
- package/themes/marvin.json +2 -0
- package/themes/mean.json +2 -0
- package/themes/military.json +2 -0
- package/themes/neutral.json +2 -0
- package/themes/pirate.json +2 -0
- package/themes/sports.json +2 -0
- package/themes/verstappen.json +2 -0
- package/themes/wizard.json +2 -0
- package/web/dist/assets/Activity-Ca2Aruu7.js +1 -0
- package/web/dist/assets/ActivityDetail-Bo7v4Z_r.js +1 -0
- package/web/dist/assets/Dashboard-BuMq46aT.js +2 -0
- package/web/dist/assets/Docs-BzccCllG.js +5 -0
- package/web/dist/assets/FilterInput-CBcJBQPI.js +1 -0
- package/web/dist/assets/GreenhouseView-BCIKcnGG.js +2 -0
- package/web/dist/assets/Installs-DMFJvq7s.js +2 -0
- package/web/dist/assets/JournalView-o1rmd1_1.js +1 -0
- package/web/dist/assets/Laws-BANxq_I_.js +3 -0
- package/web/dist/assets/Library-DW4x0fbh.js +1 -0
- package/web/dist/assets/Loops-DEBibbBP.js +2 -0
- package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-CdTX0kLe.js} +14 -14
- package/web/dist/assets/OperatorHudView-CLD0fYaA.js +2 -0
- package/web/dist/assets/Personal-6uMJvyBG.js +1 -0
- package/web/dist/assets/Tabs-BubnyZhF.js +1 -0
- package/web/dist/assets/activity-CObqyxkL.js +1 -0
- package/web/dist/assets/{api-Dc8f3ca-.js → api-D_ixdyEY.js} +1 -1
- package/web/dist/assets/drawable-C_x5xncq.js +1 -0
- package/web/dist/assets/index-CMPgezFm.js +2 -0
- package/web/dist/assets/index-DMsT4Aa6.css +1 -0
- package/web/dist/assets/{react-B9Z_tXRV.js → react-Bbzhmq4v.js} +1 -1
- package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/web/dist/assets/sections-Dg23Hel5.js +1 -0
- package/web/dist/assets/usePoll-BOqeunzF.js +1 -0
- package/web/dist/index.html +6 -5
- package/web/dist/assets/Activity-C52LEb-2.js +0 -1
- package/web/dist/assets/ActivityDetail-CjNLRvXg.js +0 -1
- package/web/dist/assets/Dashboard-B6_sSCHi.js +0 -2
- package/web/dist/assets/Docs-Dj7BmCSA.js +0 -5
- package/web/dist/assets/FilterInput-CVyqmYWM.js +0 -1
- package/web/dist/assets/GreenhouseView-BALwjQsA.js +0 -2
- package/web/dist/assets/Installs-BbffDQm3.js +0 -2
- package/web/dist/assets/JournalView-JpAQ8Hqe.js +0 -1
- package/web/dist/assets/Laws-DK7eCWSm.js +0 -3
- package/web/dist/assets/Library-CoamHelE.js +0 -1
- package/web/dist/assets/OperatorHudView-DVx1HlBx.js +0 -2
- package/web/dist/assets/Personal-eaXb1zcj.js +0 -1
- package/web/dist/assets/Tabs-BmGtt8E2.js +0 -1
- package/web/dist/assets/drawable-Du_PZrQj.js +0 -1
- package/web/dist/assets/index-Bz_KMRDH.css +0 -1
- package/web/dist/assets/index-CNFH7o55.js +0 -2
- package/web/dist/assets/sections-GalMS0Zv.js +0 -1
- package/web/dist/assets/usePoll-O0sJEw1Y.js +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ci-repair",
|
|
3
|
+
"description": "Read the branch's failing CI checks, fix one code failure per iteration, test, and push, until CI is green or only flaky or infra failures remain.",
|
|
4
|
+
"category": "day-to-day",
|
|
5
|
+
"nodes": ["ci-triage", "ci-fix", "test"],
|
|
6
|
+
"start": "ci-triage",
|
|
7
|
+
"edges": [
|
|
8
|
+
{ "from": "ci-triage", "on": "more", "to": "ci-fix" },
|
|
9
|
+
{ "from": "ci-triage", "on": "done", "to": "$close" },
|
|
10
|
+
{ "from": "ci-fix", "on": "pass", "to": "test" },
|
|
11
|
+
{ "from": "ci-fix", "on": "fail", "to": "$stop" },
|
|
12
|
+
{ "from": "test", "on": "pass", "to": "ci-triage" },
|
|
13
|
+
{ "from": "test", "on": "fail", "to": "ci-fix" }
|
|
14
|
+
],
|
|
15
|
+
"loops": [
|
|
16
|
+
{ "name": "iterations", "nodes": ["ci-triage", "ci-fix", "test"], "max": 10, "iteration": true },
|
|
17
|
+
{ "name": "fix-test", "nodes": ["ci-fix", "test"], "max": 3 }
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "deps-upgrade",
|
|
3
|
+
"description": "Confirm the suite is green, then upgrade one package or group per iteration: read its breaking changes, bump and adapt, test, audit, and review, until every named package is upgraded.",
|
|
4
|
+
"category": "day-to-day",
|
|
5
|
+
"rules": [
|
|
6
|
+
"The card's write set names the manifest, the lockfile and every file the bump adapts."
|
|
7
|
+
],
|
|
8
|
+
"nodes": ["baseline-green", "upgrade-scout", "apply", "test", "deps-audit", "review"],
|
|
9
|
+
"start": "baseline-green",
|
|
10
|
+
"edges": [
|
|
11
|
+
{ "from": "baseline-green", "on": "pass", "to": "upgrade-scout" },
|
|
12
|
+
{ "from": "baseline-green", "on": "fail", "to": "$stop" },
|
|
13
|
+
{ "from": "upgrade-scout", "on": "more", "to": "apply" },
|
|
14
|
+
{ "from": "upgrade-scout", "on": "done", "to": "$close" },
|
|
15
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
16
|
+
{ "from": "test", "on": "pass", "to": "deps-audit" },
|
|
17
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
18
|
+
{ "from": "deps-audit", "on": "pass", "to": "review" },
|
|
19
|
+
{ "from": "deps-audit", "on": "fail", "to": "apply" },
|
|
20
|
+
{ "from": "review", "on": "pass", "to": "upgrade-scout" },
|
|
21
|
+
{ "from": "review", "on": "fail", "to": "apply" }
|
|
22
|
+
],
|
|
23
|
+
"loops": [
|
|
24
|
+
{ "name": "iterations", "nodes": ["upgrade-scout", "apply", "test", "deps-audit", "review"], "max": 20, "iteration": true },
|
|
25
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
26
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "deps-audit", "review"], "max": 3 }
|
|
27
|
+
],
|
|
28
|
+
"ignoreDeletions": ["**/package-lock.json", "**/yarn.lock", "**/pnpm-lock.yaml", "**/*.lock", "**/gradle.lockfile"]
|
|
29
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "enforce-architecture-rule",
|
|
3
|
+
"description": "Confirm the suite is green, encode the requirement's architecture rule as a test with an allowlist of today's violations for the user to review, then fix one violation per iteration, test, and review, until the allowlist is empty.",
|
|
4
|
+
"category": "architecture",
|
|
5
|
+
"rules": [
|
|
6
|
+
"Each fix removes its violation's allowlist entry in the same iteration."
|
|
7
|
+
],
|
|
8
|
+
"nodes": ["baseline-green", "fitness-define", "identify", "apply", "test", "review"],
|
|
9
|
+
"start": "baseline-green",
|
|
10
|
+
"edges": [
|
|
11
|
+
{ "from": "baseline-green", "on": "pass", "to": "fitness-define" },
|
|
12
|
+
{ "from": "baseline-green", "on": "fail", "to": "$stop" },
|
|
13
|
+
{ "from": "fitness-define", "on": "pass", "to": "identify" },
|
|
14
|
+
{ "from": "fitness-define", "on": "fail", "to": "$stop" },
|
|
15
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
16
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
17
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
18
|
+
{ "from": "test", "on": "pass", "to": "review" },
|
|
19
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
20
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
21
|
+
{ "from": "review", "on": "fail", "to": "apply" }
|
|
22
|
+
],
|
|
23
|
+
"loops": [
|
|
24
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
|
|
25
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
26
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "feature",
|
|
3
|
+
"description": "Plan the feature into ordered iterations, then build each one: apply, test, and review, until the plan is complete — and an independent done-check maps every requirement to a passing test before the loop closes.",
|
|
4
|
+
"category": "development",
|
|
5
|
+
"nodes": ["plan", "identify", "apply", "test", "review", "done-check"],
|
|
6
|
+
"start": "plan",
|
|
7
|
+
"edges": [
|
|
8
|
+
{ "from": "plan", "on": "pass", "to": "identify" },
|
|
9
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
10
|
+
{ "from": "identify", "on": "done", "to": "done-check" },
|
|
11
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
12
|
+
{ "from": "test", "on": "pass", "to": "review" },
|
|
13
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
14
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
15
|
+
{ "from": "review", "on": "fail", "to": "apply" },
|
|
16
|
+
{ "from": "done-check", "on": "pass", "to": "$close" },
|
|
17
|
+
{ "from": "done-check", "on": "fail", "to": "identify" }
|
|
18
|
+
],
|
|
19
|
+
"loops": [
|
|
20
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "test", "review", "done-check"], "max": 20, "iteration": true },
|
|
21
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
22
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fix-flaky-tests",
|
|
3
|
+
"description": "Confirm the suspected flaky tests by 20 repeated runs, then fix one per iteration at its root cause, re-confirm it with 20 runs, test, and review.",
|
|
4
|
+
"category": "tests",
|
|
5
|
+
"rules": [
|
|
6
|
+
"Fix at the root cause — shared state, ordering, time, concurrency — never with a retry, a sleep or a longer timeout.",
|
|
7
|
+
"A test that fails every run is a bug for the bugfix template; one that never fails is not fixed."
|
|
8
|
+
],
|
|
9
|
+
"nodes": ["flake-repro", "identify", "apply", "flake-check", "test", "review"],
|
|
10
|
+
"start": "flake-repro",
|
|
11
|
+
"edges": [
|
|
12
|
+
{ "from": "flake-repro", "on": "flaky", "to": "identify" },
|
|
13
|
+
{ "from": "flake-repro", "on": "stable", "to": "$stop" },
|
|
14
|
+
{ "from": "flake-repro", "on": "broken", "to": "$stop" },
|
|
15
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
16
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
17
|
+
{ "from": "apply", "on": "pass", "to": "flake-check" },
|
|
18
|
+
{ "from": "flake-check", "on": "stable", "to": "test" },
|
|
19
|
+
{ "from": "flake-check", "on": "flaky", "to": "apply" },
|
|
20
|
+
{ "from": "test", "on": "pass", "to": "review" },
|
|
21
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
22
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
23
|
+
{ "from": "review", "on": "fail", "to": "apply" }
|
|
24
|
+
],
|
|
25
|
+
"loops": [
|
|
26
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "flake-check", "test", "review"], "max": 10, "iteration": true },
|
|
27
|
+
{ "name": "stabilise", "nodes": ["apply", "flake-check"], "max": 4 },
|
|
28
|
+
{ "name": "review-fix", "nodes": ["apply", "flake-check", "test", "review"], "max": 3 }
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "legacy-refactor",
|
|
3
|
+
"description": "Confirm the suite is green, pin the code's current behaviour with characterization tests in their own commit, then refactor behind that net: apply, test, and review, until the requirement is met.",
|
|
4
|
+
"category": "refactoring",
|
|
5
|
+
"nodes": ["baseline-green", "characterize", "identify", "apply", "test", "review"],
|
|
6
|
+
"start": "baseline-green",
|
|
7
|
+
"edges": [
|
|
8
|
+
{ "from": "baseline-green", "on": "pass", "to": "characterize" },
|
|
9
|
+
{ "from": "baseline-green", "on": "fail", "to": "$stop" },
|
|
10
|
+
{ "from": "characterize", "on": "pass", "to": "identify" },
|
|
11
|
+
{ "from": "characterize", "on": "fail", "to": "$stop" },
|
|
12
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
13
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
14
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
15
|
+
{ "from": "test", "on": "pass", "to": "review" },
|
|
16
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
17
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
18
|
+
{ "from": "review", "on": "fail", "to": "apply" }
|
|
19
|
+
],
|
|
20
|
+
"loops": [
|
|
21
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
|
|
22
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
23
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
|
|
24
|
+
],
|
|
25
|
+
"weights": { "logic": 0.6 }
|
|
26
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "legacy-tests",
|
|
3
|
+
"description": "Confirm the suite is green, then pin legacy behaviour one change point at a time: characterization tests, a run, and a mutation check that proves they bite.",
|
|
4
|
+
"category": "tests",
|
|
5
|
+
"rules": [
|
|
6
|
+
"Tests only: production code is never touched."
|
|
7
|
+
],
|
|
8
|
+
"nodes": ["baseline-green", "identify", "characterize", "test", "mutation-check"],
|
|
9
|
+
"start": "baseline-green",
|
|
10
|
+
"edges": [
|
|
11
|
+
{ "from": "baseline-green", "on": "pass", "to": "identify" },
|
|
12
|
+
{ "from": "baseline-green", "on": "fail", "to": "$stop" },
|
|
13
|
+
{ "from": "identify", "on": "more", "to": "characterize" },
|
|
14
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
15
|
+
{ "from": "characterize", "on": "pass", "to": "test" },
|
|
16
|
+
{ "from": "characterize", "on": "fail", "to": "$stop" },
|
|
17
|
+
{ "from": "test", "on": "pass", "to": "mutation-check" },
|
|
18
|
+
{ "from": "test", "on": "fail", "to": "characterize" },
|
|
19
|
+
{ "from": "mutation-check", "on": "pass", "to": "identify" },
|
|
20
|
+
{ "from": "mutation-check", "on": "fail", "to": "characterize" },
|
|
21
|
+
{ "from": "mutation-check", "on": "unavailable", "to": "identify" }
|
|
22
|
+
],
|
|
23
|
+
"loops": [
|
|
24
|
+
{ "name": "iterations", "nodes": ["identify", "characterize", "test", "mutation-check"], "max": 20, "iteration": true },
|
|
25
|
+
{ "name": "write-run", "nodes": ["characterize", "test"], "max": 3 },
|
|
26
|
+
{ "name": "kill-mutants", "nodes": ["characterize", "test", "mutation-check"], "max": 3 }
|
|
27
|
+
],
|
|
28
|
+
"weights": { "new-file": 0.2 }
|
|
29
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "refactor",
|
|
3
|
+
"description": "Confirm the suite is green before touching anything, then iterate on the shape of the code alone.",
|
|
4
|
+
"category": "refactoring",
|
|
5
|
+
"rules": [
|
|
6
|
+
"Tests are not edited: a refactor that needs a different test is a behaviour change, not a refactor."
|
|
7
|
+
],
|
|
8
|
+
"nodes": ["baseline-green", "identify", "apply", "test"],
|
|
9
|
+
"start": "baseline-green",
|
|
10
|
+
"edges": [
|
|
11
|
+
{ "from": "baseline-green", "on": "pass", "to": "identify" },
|
|
12
|
+
{ "from": "baseline-green", "on": "fail", "to": "$stop" },
|
|
13
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
14
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
15
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
16
|
+
{ "from": "test", "on": "pass", "to": "identify" },
|
|
17
|
+
{ "from": "test", "on": "fail", "to": "apply" }
|
|
18
|
+
],
|
|
19
|
+
"loops": [
|
|
20
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "test"], "max": 20, "iteration": true },
|
|
21
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 }
|
|
22
|
+
],
|
|
23
|
+
"weights": { "logic": 0.6 }
|
|
24
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "remove-dead-code",
|
|
3
|
+
"description": "Confirm the suite is green, then remove one coherent group of unused code per iteration — exports, classes, files, retired flags — test it, and review it. Deletions score soft, not blocking.",
|
|
4
|
+
"category": "refactoring",
|
|
5
|
+
"rules": [
|
|
6
|
+
"Each card's intent cites the proof it is unused: the requirement's tool output (knip, ts-prune, vulture, PMD or IntelliJ inspections) and a reference search (git grep over code AND resources) for reflection, DI by name, Spring bean names and config.",
|
|
7
|
+
"Generated sources do not count as unused.",
|
|
8
|
+
"Public entry points belong in LOOP.md's contracts, not in a deletion."
|
|
9
|
+
],
|
|
10
|
+
"nodes": ["baseline-green", "identify", "apply", "test", "review"],
|
|
11
|
+
"start": "baseline-green",
|
|
12
|
+
"edges": [
|
|
13
|
+
{ "from": "baseline-green", "on": "pass", "to": "identify" },
|
|
14
|
+
{ "from": "baseline-green", "on": "fail", "to": "$stop" },
|
|
15
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
16
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
17
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
18
|
+
{ "from": "test", "on": "pass", "to": "review" },
|
|
19
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
20
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
21
|
+
{ "from": "review", "on": "fail", "to": "apply" }
|
|
22
|
+
],
|
|
23
|
+
"loops": [
|
|
24
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
|
|
25
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
26
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
|
|
27
|
+
],
|
|
28
|
+
"weights": { "delete": 0.5 },
|
|
29
|
+
"ignoreDeletions": ["**/generated/**", "**/generated-sources/**", "**/target/**", "**/build/generated/**"]
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "spec-first-feature",
|
|
3
|
+
"description": "Write the feature's spec first — specs/<slug>/spec.md with EARS acceptance criteria and an ordered task list — for the user to review, commit it, then build it task by task: apply, test, review. An independent done-check maps every criterion to a passing test before the loop closes.",
|
|
4
|
+
"category": "development",
|
|
5
|
+
"rules": [
|
|
6
|
+
"One spec task per iteration, in the spec's order.",
|
|
7
|
+
"Open questions in the spec wait for the user's answers; never answer them yourself."
|
|
8
|
+
],
|
|
9
|
+
"nodes": ["spec", "identify", "apply", "test", "review", "done-check"],
|
|
10
|
+
"start": "spec",
|
|
11
|
+
"edges": [
|
|
12
|
+
{ "from": "spec", "on": "pass", "to": "identify" },
|
|
13
|
+
{ "from": "spec", "on": "fail", "to": "$stop" },
|
|
14
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
15
|
+
{ "from": "identify", "on": "done", "to": "done-check" },
|
|
16
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
17
|
+
{ "from": "test", "on": "pass", "to": "review" },
|
|
18
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
19
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
20
|
+
{ "from": "review", "on": "fail", "to": "apply" },
|
|
21
|
+
{ "from": "done-check", "on": "pass", "to": "$close" },
|
|
22
|
+
{ "from": "done-check", "on": "fail", "to": "identify" }
|
|
23
|
+
],
|
|
24
|
+
"loops": [
|
|
25
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "test", "review", "done-check"], "max": 20, "iteration": true },
|
|
26
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
27
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tdd",
|
|
3
|
+
"description": "Plan the work, then build it test-first: each iteration writes a failing test, makes it pass, and reviews the diff, until the plan is complete.",
|
|
4
|
+
"category": "tests",
|
|
5
|
+
"nodes": ["plan", "identify", "red-test", "apply", "test", "review"],
|
|
6
|
+
"start": "plan",
|
|
7
|
+
"edges": [
|
|
8
|
+
{ "from": "plan", "on": "pass", "to": "identify" },
|
|
9
|
+
{ "from": "identify", "on": "more", "to": "red-test" },
|
|
10
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
11
|
+
{ "from": "red-test", "on": "red", "to": "apply" },
|
|
12
|
+
{ "from": "red-test", "on": "green", "to": "test" },
|
|
13
|
+
{ "from": "red-test", "on": "untestable", "to": "$stop" },
|
|
14
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
15
|
+
{ "from": "test", "on": "pass", "to": "review" },
|
|
16
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
17
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
18
|
+
{ "from": "review", "on": "fail", "to": "apply" }
|
|
19
|
+
],
|
|
20
|
+
"loops": [
|
|
21
|
+
{ "name": "iterations", "nodes": ["identify", "red-test", "apply", "test", "review"], "max": 20, "iteration": true },
|
|
22
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
23
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "update-contract",
|
|
3
|
+
"description": "Change an interface with live consumers — an API, a schema, an event — as expand, migrate one consumer per iteration, contract: plan it for the user to review, then apply, test, check old and new consumers, and review.",
|
|
4
|
+
"category": "architecture",
|
|
5
|
+
"rules": [
|
|
6
|
+
"Contract files (OpenAPI, AsyncAPI, protobuf, Avro, GraphQL schemas, Flyway and Liquibase migrations) stop for a human by default; a stop on one is expected, not a failure.",
|
|
7
|
+
"`geneseed loop init --contracts <globs>` appends more contract globs, and LOOP.md's `contracts` can be trimmed."
|
|
8
|
+
],
|
|
9
|
+
"nodes": ["migration-plan", "identify", "apply", "test", "compat-check", "review"],
|
|
10
|
+
"start": "migration-plan",
|
|
11
|
+
"edges": [
|
|
12
|
+
{ "from": "migration-plan", "on": "pass", "to": "identify" },
|
|
13
|
+
{ "from": "migration-plan", "on": "fail", "to": "$stop" },
|
|
14
|
+
{ "from": "identify", "on": "more", "to": "apply" },
|
|
15
|
+
{ "from": "identify", "on": "done", "to": "$close" },
|
|
16
|
+
{ "from": "apply", "on": "pass", "to": "test" },
|
|
17
|
+
{ "from": "test", "on": "pass", "to": "compat-check" },
|
|
18
|
+
{ "from": "test", "on": "fail", "to": "apply" },
|
|
19
|
+
{ "from": "compat-check", "on": "pass", "to": "review" },
|
|
20
|
+
{ "from": "compat-check", "on": "fail", "to": "apply" },
|
|
21
|
+
{ "from": "review", "on": "pass", "to": "identify" },
|
|
22
|
+
{ "from": "review", "on": "fail", "to": "apply" }
|
|
23
|
+
],
|
|
24
|
+
"loops": [
|
|
25
|
+
{ "name": "iterations", "nodes": ["identify", "apply", "test", "compat-check", "review"], "max": 20, "iteration": true },
|
|
26
|
+
{ "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
|
|
27
|
+
{ "name": "review-fix", "nodes": ["apply", "test", "compat-check", "review"], "max": 3 }
|
|
28
|
+
],
|
|
29
|
+
"contracts": [
|
|
30
|
+
"**/openapi*.yaml", "**/openapi*.yml", "**/openapi*.json", "**/asyncapi*.yaml", "**/*.proto", "**/*.avsc",
|
|
31
|
+
"**/*.graphqls", "**/*.graphql", "**/asyncapi*.yml", "**/asyncapi*.json", "**/db/migration/**", "**/db/changelog/**"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# {{SKILL}}: brick-forge
|
|
2
|
+
|
|
3
|
+
> {{DESC_BRICK_FORGE}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the user wants a new loop brick, or to adapt an existing one to their stack — "make
|
|
6
|
+
a brick for…", "our tests run differently, change the `test` brick", "the loop needs a step
|
|
7
|
+
that…".
|
|
8
|
+
|
|
9
|
+
## Procedure
|
|
10
|
+
|
|
11
|
+
1. **Interview, one question at a time:**
|
|
12
|
+
- **name** — kebab-case, the file stem.
|
|
13
|
+
- **what it does** — one line; it becomes `description`.
|
|
14
|
+
- **effect** — does it ever create, edit or delete a file? Yes → `mutate`; never → `read`;
|
|
15
|
+
unsure → `mutate`. A `read` brick that writes stops the loop.
|
|
16
|
+
- **who runs it** — exactly one of an `agent` (one of the {{AGENTS}}) or a `skill`.
|
|
17
|
+
- **outcomes** — every result it can report, comma-separated. Each becomes an edge label a
|
|
18
|
+
loop graph must route (`{from, on: "<outcome>", to}`).
|
|
19
|
+
- **level** — project `<repo>/.geneseed/bricks/` (committed, shared with the team), global
|
|
20
|
+
`$XDG_CONFIG_HOME/geneseed/bricks/` (default `~/.config/geneseed/bricks/`, every project on
|
|
21
|
+
this machine), or shipped `src/bricks/` — only inside the Geneseed repository itself.
|
|
22
|
+
2. **Write `<level>/<name>.md`**, the file stem equal to `name`:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
---
|
|
26
|
+
name: <kebab-name>
|
|
27
|
+
description: <one line>
|
|
28
|
+
effect: read | mutate
|
|
29
|
+
agent: <agent> (or skill: <skill> — exactly one of the two)
|
|
30
|
+
outcomes: <a>, <b>
|
|
31
|
+
---
|
|
32
|
+
<4-10 lines of direct instructions, ending with exactly how to choose among the outcomes>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
No double-brace tokens in the body: the loop hands it to the model raw. If the brick finds
|
|
36
|
+
something the next brick needs, have it write that to a file in the OS temp directory and
|
|
37
|
+
report the path with the outcome — the loop skill records it as a note.
|
|
38
|
+
3. **Overriding by name** — a project or global brick named like a shipped one replaces it in
|
|
39
|
+
every template. That is allowed; say so to the user. `geneseed loop check` lists overrides under `overridden`.
|
|
40
|
+
4. **Check it:** `geneseed loop check --brick <path>` (this file alone), then
|
|
41
|
+
`geneseed loop check` from the repository (the whole catalogue, including every template that
|
|
42
|
+
now routes through it). Fix every listed problem and re-run both.
|
|
43
|
+
|
|
44
|
+
## Done when
|
|
45
|
+
|
|
46
|
+
- The brick file exists at the chosen level, and both checks print `ok: true`.
|
|
47
|
+
|
|
48
|
+
<!-- INCLUDE: skills/_self-improvement.md -->
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
> {{DESC_BRUNO_COLLECTION_GENERATOR}}
|
|
4
4
|
|
|
5
5
|
**Trigger:** creating, converting, or reorganising a [Bruno](https://www.usebruno.com/)
|
|
6
|
-
collection
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
collection as `.bru` files or OpenCollection YAML. The collection covers requests,
|
|
7
|
+
folders, environments and request docs; the source can be backend routes, an OpenAPI
|
|
8
|
+
snippet, pasted API docs, curl commands, or a plain endpoint list.
|
|
9
9
|
|
|
10
10
|
## Procedure
|
|
11
11
|
1. Gather the inputs, and state every assumption you fill in ({{LAW:echo-the-intent}}): the source
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
> {{DESC_BRUNO_TEST_WRITER}}
|
|
4
4
|
|
|
5
5
|
**Trigger:** writing, reviewing, or strengthening tests for a [Bruno](https://www.usebruno.com/)
|
|
6
|
-
request or collection
|
|
7
|
-
scripts, request chaining, schema checks,
|
|
8
|
-
|
|
6
|
+
request or collection in `.bru` files or OpenCollection YAML. Covers assertions, `tests`
|
|
7
|
+
blocks, pre-request and post-response scripts, request chaining, schema checks, and
|
|
8
|
+
edge cases.
|
|
9
9
|
|
|
10
10
|
## Procedure
|
|
11
11
|
1. Understand the request or collection first: method, path, auth, body, headers,
|
package/src/skills/ci-fix.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_CI_FIX}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** a CI run, pipeline job, or pre-merge check is red
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
**Trigger:** a CI run, pipeline job, or pre-merge check is red, or the user says "CI is
|
|
6
|
+
failing", "fix the build", "why is the pipeline red". The red run can be on a PR the agent
|
|
7
|
+
opened, the branch it is on, or one the user points at. The [debug {{SKILL}}](debug.md) drives
|
|
8
8
|
the root-causing once the failure reproduces locally; this {{SKILL}} gets it there and
|
|
9
9
|
gets the fix back through the same gate.
|
|
10
10
|
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_CONSOLIDATE_MEMORY}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** the {{MEMORY}} index has
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
**Trigger:** the {{MEMORY}} index has outgrown one useful read (~40 lines) or holds
|
|
6
|
+
duplicate, contradictory, or stale entries. Stale means a memory naming a file, flag, or
|
|
7
|
+
command that no longer exists; a `feedback` lesson that keeps recurring counts too, as
|
|
8
|
+
does the user saying "clean up memory", "consolidate", "what do you actually remember". Also worth a
|
|
9
9
|
pass after a release or a large refactor, when many recorded facts just changed. The
|
|
10
10
|
[rule {{SKILL}}](rule.md) writes one memory or one rule; this {{SKILL}} tends the
|
|
11
11
|
whole set. The user's wiki is out of scope — that is the [wiki {{SKILL}}](wiki.md).
|
package/src/skills/council.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_COUNCIL}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** the user asks to "convene a council", "debate this", "argue both sides",
|
|
5
|
+
**Trigger:** the user asks to "convene a council", "debate this", or "argue both sides", or wants a decision stress-tested from several points of view. A change, plan, or claim all qualify, as long as it is challenged before committing to it.
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Frame the motion in one line — the exact decision, change, or claim under debate — and name what it feeds (a choice to make, a design to accept, a discussion to settle). Ground it in the real artifact and the project's own docs ({{DOCTRINE:read-the-docs-first}}) so the council argues the actual thing; if the motion is unclear or bundles several questions, split it and ask once, then proceed.
|
package/src/skills/fresh-eyes.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_FRESH_EYES}}
|
|
4
4
|
|
|
5
|
-
**Trigger:**
|
|
5
|
+
**Trigger:** work is claimed done and needs a blind check against the original ask. That is before merge or handoff, while the solving session believes the artifact works, or when the user asks to "validate", "fresh eyes", "prove it meets the spec", "did this actually solve it", or "independent sign-off" — and the cost of a confidently-wrong "done" is high. This re-judges the *result* from zero context — distinct from [geneseed-code-review](geneseed-code-review.md), which reviews a *diff* with full knowledge of the change. For an open-ended quality critique use [roast-me](roast-me.md); for a multi-stance debate over an undecided question use [council](council.md).
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Capture the firewall input as TWO things and nothing else: (a) the **verbatim original task/spec** — the raw issue or request text, NOT a solver-written summary or "spec card" (a distilled card launders the solving session's framing into the rubric, the very bias this {{SKILL}} exists to defeat), and (b) a pointer to the **final artifact** as it stands — file paths, built output, or the command to run it. If the raw task is too thin to yield acceptance criteria, have the **user** (never the solver) confirm a one-line acceptance bar, then proceed ({{LAW:echo-the-intent}}); if it is too fuzzy even for that, this is a judgement call — convene [council](council.md) instead.
|
package/src/skills/geneseed.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
1. **Locate.** Run `geneseed status --json` first: `installs` lists every install on this machine — host, scope, root, state, theme, footprint, posture, mode, packs, excluded rules — and `rebuild`, the command that reproduces each one exactly. `geneseed` not on PATH → ask the user before using `npx geneseed` (it downloads the package), and prefix every command below the same way. Still nothing → look for a host root file: `~/.config/opencode/AGENT.md` or `.opencode/AGENT.md` (OpenCode), `~/.claude/CLAUDE.md` or `.claude/` (Claude Code), `.openclaude/` (OpenClaude), `AGENTS.md` beside `.bob/` (Bob). None → say so; never install to "fix" it.
|
|
9
9
|
2. **Read state** with the read-only verbs, cheapest first ({{DOCTRINE:context-economy}}): `geneseed status --json`, `geneseed version`, `geneseed catalog` (optionally `agents|skills|laws|ontology|doctrines`), `geneseed doctor`, `geneseed diff`, `geneseed mcp`, `geneseed memory list`, `geneseed exclude list`.
|
|
10
10
|
3. **Read a piece** from disk, not from recall ({{LAW:verify-before-asserting}}): `<root>/agents/<name>.md`, `<root>/skills/<name>/SKILL.md`, `<root>/memory/`, `<root>/notebook/`. The {{ONTOLOGY}}, the {{LAWS}} and the active {{DOCTRINES}} are numbered `## N. …` sections of the install's root file.
|
|
11
|
-
4. **Change an install only when the user asked for that change** ({{LAW:one-intent-one-act}}). Take that install's `rebuild` command from step 1, edit only the flag the user named (add it if the command omits it — `--posture` and `--
|
|
11
|
+
4. **Change an install only when the user asked for that change** ({{LAW:one-intent-one-act}}). Take that install's `rebuild` command from step 1, edit only the flag the user named (add it if the command omits it — `--posture`, `--mode` and `--trust` are left out at their defaults) — `--theme`, `--footprint lean|full`, `--posture`, `--mode direct|foreman`, `--trust prudent|balanced|aggressive`, `--doctrines craft,rigor|none`, `--exclude-rules "process 7"|none` — dry-run it first by running the same flags through `geneseed validate`, show the command, and run it once the user agrees. Never rebuild from a bare `geneseed build`: every omitted flag resets that setting to the generator default. Confirm with `geneseed status`.
|
|
12
12
|
5. **Other writes also need the user's word:** `geneseed memory rm <name>`, `geneseed exclude add|remove <path>`, `geneseed web start|stop`, `geneseed uninstall --target <root> --yes`. Personal rules and the profile belong to their own {{SKILLS}}; do not edit `user-rules.md` or `PROFILE.md` from here.
|
|
13
13
|
6. **Never on your own initiative:** `geneseed setup` (interactive only), `geneseed upgrade`, `geneseed update`, `geneseed bootstrap`, `geneseed sync-self`, `geneseed rebuild-all`, `geneseed migrate`, `geneseed link`, `geneseed unlink`. `learn`, `context` and the `*-gate` verbs are `geneseed-hook` verbs the host's hooks run — never run them by hand.
|
|
14
14
|
7. Directory and section names are plain English in every theme; only prose changes. Do not search by flavour words.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_GIT_ARCHAEOLOGY}}
|
|
4
4
|
|
|
5
|
-
**Trigger:**
|
|
5
|
+
**Trigger:** something must be learned *from* the history — when a regression was
|
|
6
6
|
introduced, who last touched a line and why, or where a symbol or string entered the
|
|
7
7
|
codebase. Read-only: this {{SKILL}} investigates, it does not change history (to repair
|
|
8
8
|
or rewrite, use git-rescue.md; to write a new commit, use commit.md).
|
package/src/skills/git-rescue.md
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_GIT_RESCUE}}
|
|
4
4
|
|
|
5
|
-
**Trigger:**
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
**Trigger:** commits are lost, a rebase/merge/reset went wrong, or history is to be
|
|
6
|
+
deliberately rewritten (interactive rebase, squash, amend). The repository can also be
|
|
7
|
+
messy in other ways: a detached HEAD, a half-finished operation, or work stranded in a
|
|
8
|
+
stash. For
|
|
8
9
|
finding *when/why* something changed without altering history, use git-archaeology.md.
|
|
9
10
|
|
|
10
11
|
## Procedure
|
package/src/skills/handoff.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_HANDOFF}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** the context window is filling, a session is ending mid-task, or
|
|
5
|
+
**Trigger:** the context window is filling, a session is ending mid-task, or work is passing to another agent or developer.
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Capture the state in the worklog (`WORKLOG.md` or the task's plan file): the goal, what's done, the step in progress, and the exact next step.
|
package/src/skills/herdr.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
> {{DESC_HERDR}}
|
|
5
5
|
<!-- invocation: user -->
|
|
6
6
|
|
|
7
|
-
**Trigger:**
|
|
7
|
+
**Trigger:** the session runs inside a herdr-managed pane (`HERDR_ENV=1`) and a task would benefit from another pane. Typical cases: splitting off a server, watching a long-running build, spawning a sibling agent, or reading what a neighbour is doing. If `HERDR_ENV` is unset or not `1`, you are not inside herdr — stop and do not try to control panes from outside.
|
|
8
8
|
|
|
9
9
|
**Requires:** `HERDR_ENV=1` in the environment and the `herdr` binary on `PATH`.
|
|
10
10
|
|
package/src/skills/learn-mode.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
<!-- invocation: user -->
|
|
6
6
|
|
|
7
|
-
**Trigger:** the user wants to *learn while building* rather than be handed finished code
|
|
8
|
-
"learn mode", "turn on learning", "I want to understand what we build", "let me design it,
|
|
7
|
+
**Trigger:** the user wants to *learn while building* rather than be handed finished code.
|
|
8
|
+
Phrases: "learn mode", "turn on learning", "I want to understand what we build", "let me design it,
|
|
9
9
|
you write it". Also "pause learning" / "resume learning" / "stop learn mode". To be taught a
|
|
10
10
|
topic outside a build, use the [teach {{SKILL}}](teach.md); to have knowledge tested, the
|
|
11
11
|
[quiz {{SKILL}}](quiz.md).
|