@dsdenes/devboard 0.1.559 → 0.1.562
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/AGENTS.md +59 -0
- package/README.md +2497 -26
- package/bin/devboard.mjs +352 -118
- package/client/App.svelte +523 -0
- package/client/FeedbackOverlay.svelte +1125 -0
- package/client/FlowMode.svelte +1015 -0
- package/client/app.css +3922 -0
- package/client/env.d.ts +23 -0
- package/client/lib/commands.ts +836 -0
- package/client/lib/components/ActivityBar.svelte +295 -0
- package/client/lib/components/AdrTable.svelte +241 -0
- package/client/lib/components/CommandPalette.svelte +198 -0
- package/client/lib/components/ConceptKind.svelte +66 -0
- package/client/lib/components/ConfirmDialog.svelte +62 -0
- package/client/lib/components/DataTable.svelte +243 -0
- package/client/lib/components/DetailSplit.svelte +68 -0
- package/client/lib/components/DiscoverOverview.svelte +898 -0
- package/client/lib/components/DiscoverWorkspace.svelte +437 -0
- package/client/lib/components/DraftsPage.svelte +186 -0
- package/client/lib/components/GoalWorkspace.svelte +1042 -0
- package/client/lib/components/IssuesAgentFocus.svelte +117 -0
- package/client/lib/components/IssuesAgentLog.svelte +50 -0
- package/client/lib/components/IssuesQuestion.svelte +95 -0
- package/client/lib/components/IssuesWorkspace.svelte +577 -0
- package/client/lib/components/MermaidDiagram.svelte +89 -0
- package/client/lib/components/MonacoEditor.svelte +190 -0
- package/client/lib/components/NotificationRegion.svelte +195 -0
- package/client/lib/components/PaneHandle.svelte +25 -0
- package/client/lib/components/ScoutIssues.svelte +215 -0
- package/client/lib/components/ScoutWorkspace.svelte +180 -0
- package/client/lib/components/Sidebar.svelte +622 -0
- package/client/lib/components/StatusBar.svelte +118 -0
- package/client/lib/components/Terminal.svelte +193 -0
- package/client/lib/components/WatchdogWorkspace.svelte +537 -0
- package/client/lib/components/ui/button.svelte +56 -0
- package/client/lib/components/ui/icon-button.svelte +56 -0
- package/client/lib/components/ui/input.svelte +19 -0
- package/client/lib/components/ui/page-header.svelte +120 -0
- package/client/lib/components/ui/stage-track.svelte +141 -0
- package/client/lib/components/watchdog-indicator.svelte +189 -0
- package/client/lib/connection.svelte.ts +210 -0
- package/client/lib/dependency-diagram.test.ts +90 -0
- package/client/lib/dependency-diagram.ts +75 -0
- package/client/lib/discover-format.test.ts +265 -0
- package/client/lib/discover-format.ts +394 -0
- package/client/lib/discover.svelte.ts +412 -0
- package/client/lib/draft-format.test.ts +48 -0
- package/client/lib/draft-format.ts +13 -0
- package/client/lib/flow-save.test.ts +148 -0
- package/client/lib/flow.svelte.ts +445 -0
- package/client/lib/goal-reconnect.test.ts +282 -0
- package/client/lib/goal.svelte.ts +652 -0
- package/client/lib/issues.svelte.ts +439 -0
- package/client/lib/layout.svelte.ts +234 -0
- package/client/lib/notification-issue.test.ts +53 -0
- package/client/lib/notification-issue.ts +27 -0
- package/client/lib/notifications.svelte.ts +62 -0
- package/client/lib/poll-status.test.ts +141 -0
- package/client/lib/poll-status.ts +88 -0
- package/client/lib/record-status.test.ts +19 -0
- package/client/lib/record-status.ts +25 -0
- package/client/lib/scout.svelte.ts +164 -0
- package/client/lib/skill-document.test.ts +77 -0
- package/client/lib/skill-document.ts +57 -0
- package/client/lib/status-tone.test.ts +40 -0
- package/client/lib/status-tone.ts +33 -0
- package/client/lib/types.ts +578 -0
- package/client/lib/utils.ts +6 -0
- package/client/lib/viewport.svelte.ts +20 -0
- package/client/lib/watchdog.svelte.ts +69 -0
- package/client/main.ts +7 -0
- package/dist/apple-touch-icon.png +0 -0
- package/dist/assets/abnfDiagram-VCTEODGH-CmBSMArZ.js +1 -0
- package/dist/assets/arc-BZgCSX2H.js +1 -0
- package/dist/assets/architecture-7GRP2DOG-CF9MHlfo.js +1 -0
- package/dist/assets/architectureDiagram-5GKGNRK7-DzWB6xiQ.js +36 -0
- package/dist/assets/array-BifhSqXX.js +1 -0
- package/dist/assets/blockDiagram-I7D4REHJ-BtmGJ0hn.js +129 -0
- package/dist/assets/c4Diagram-7LVT6UL2-D5CHrrRX.js +38 -0
- package/dist/assets/channel-CgM4lcUW.js +1 -0
- package/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/assets/chunk-4HAMMTFA-DeIufjFl.js +62 -0
- package/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/assets/chunk-75Z2AOVW-DbtzyKUg.js +2 -0
- package/dist/assets/chunk-DU6HZSFF-C0fdbx3K.js +127 -0
- package/dist/assets/chunk-F27PBJKO-HObL2IvF.js +1 -0
- package/dist/assets/chunk-FOHPRMQF-DD4dKubD.js +161 -0
- package/dist/assets/chunk-GMAD6QVW-fg8wvtPY.js +72 -0
- package/dist/assets/chunk-GVQU2GXP-C0TaHOrD.js +1 -0
- package/dist/assets/chunk-IMKFNOWR-BVoIdx20.js +231 -0
- package/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/assets/chunk-L3NEJ4N5-B_kmqfk5.js +1 -0
- package/dist/assets/chunk-OSK3NFVY-DO0vhxHH.js +10 -0
- package/dist/assets/chunk-P2QGCYS3-CjljLvFj.js +1 -0
- package/dist/assets/chunk-POPQ4Y6H-BU0C7tw6.js +1 -0
- package/dist/assets/chunk-PWAF6VOD-Dn0OjBt0.js +1 -0
- package/dist/assets/chunk-SHT3W25Y-CMCZE2xx.js +168 -0
- package/dist/assets/chunk-SVP7TREG-BIRmRy_W.js +88 -0
- package/dist/assets/chunk-TICWLB2K-C1bc2CDE.js +206 -0
- package/dist/assets/chunk-XXDRQBXY-Cc38QUmR.js +1 -0
- package/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/assets/classDiagram-ZZMXUADV-BDh5w6Nc.js +1 -0
- package/dist/assets/classDiagram-v2-VYDZK3BY-BDh5w6Nc.js +1 -0
- package/dist/assets/cose-bilkent-JH36ORCC-B7pU7qhM.js +1 -0
- package/dist/assets/cynefin-OW5HDTMX-76dswSqS.js +1 -0
- package/dist/assets/cynefinDiagram-5FMLGOSQ-2kS4q01d.js +62 -0
- package/dist/assets/cytoscape.esm-BegBNzOV.js +321 -0
- package/dist/assets/dagre-D7JM2Yhv.js +1 -0
- package/dist/assets/dagre-GXQ25YYZ-B5Y21TQM.js +4 -0
- package/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/assets/diagram-S7CK7UJ4-CY6td7Et.js +30 -0
- package/dist/assets/diagram-UQ7AKVKN-DmDqnGZf.js +41 -0
- package/dist/assets/diagram-VSXAHHWV-KGLWOOcE.js +3 -0
- package/dist/assets/diagram-VX7I27RA-D5syUraJ.js +24 -0
- package/dist/assets/diagram-Z3DM3KII-Dtrbs1Om.js +24 -0
- package/dist/assets/dist-Dce-2YbA.js +1 -0
- package/dist/assets/ebnfDiagram-PWID7BFC-CQpJLtU3.js +1 -0
- package/dist/assets/editor.worker-BmdWdrHZ.js +33 -0
- package/dist/assets/erDiagram-RLTQ6QDP-cMTzKLu_.js +99 -0
- package/dist/assets/eventmodeling-NTZA5JFV-CMzLdNaL.js +1 -0
- package/dist/assets/flowDiagram-HODETNUW-BMUajB-G.js +1 -0
- package/dist/assets/ganttDiagram-EL5Y4UJY-DseBS5Fs.js +292 -0
- package/dist/assets/gitGraph-4MIJSDKK-CUQZRpxJ.js +1 -0
- package/dist/assets/gitGraphDiagram-WWUBYQGX-CfMfsJ3b.js +106 -0
- package/dist/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/assets/index-ByQ-XX38.css +1 -0
- package/dist/assets/index-CIf5TpfY.js +214 -0
- package/dist/assets/info-A6RAGUB7-D3nAKZ8M.js +1 -0
- package/dist/assets/infoDiagram-27XIBGKW-zu1O0WOy.js +2 -0
- package/dist/assets/init-C-OQMol4.js +1 -0
- package/dist/assets/ishikawaDiagram-5VMMS53U-DKC7BO9p.js +70 -0
- package/dist/assets/journeyDiagram-3NMN7TZE-Ld5mXse7.js +139 -0
- package/dist/assets/kanban-definition-UXKFOSKX-CH7_QlHL.js +89 -0
- package/dist/assets/katex-DJhrJSbw.js +257 -0
- package/dist/assets/line-N9XiCREw.js +1 -0
- package/dist/assets/linear-C9hnqmJv.js +1 -0
- package/dist/assets/mermaid-parser.core-DgPwV5Bh.js +7 -0
- package/dist/assets/mermaid.core-BKqynXLR.js +44 -0
- package/dist/assets/mindmap-definition-YA3MSWOX-DkiL-wiW.js +96 -0
- package/dist/assets/monaco-DjpsE8to.css +1 -0
- package/dist/assets/monaco-DqzJaNIe.js +908 -0
- package/dist/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dist/assets/packet-AYTQ26CC-DuMTvpEJ.js +1 -0
- package/dist/assets/path-fybaL0A-.js +1 -0
- package/dist/assets/pegDiagram-XKGWAZYB-DvMl_xSe.js +1 -0
- package/dist/assets/pie-WAS4IAKB-Da0xPaD8.js +1 -0
- package/dist/assets/pieDiagram-E7YTZNPT-amANNRJY.js +39 -0
- package/dist/assets/quadrantDiagram-AXDQQJYC-BrgvDMnk.js +7 -0
- package/dist/assets/radar-RG4KPBEZ-Dz3Ih5-N.js +1 -0
- package/dist/assets/railroad-74A4TZTK-CKMW-IV2.js +1 -0
- package/dist/assets/railroad-abnf-HS5TGJTU-ChqmSWSF.js +1 -0
- package/dist/assets/railroad-ebnf-LZEXJU2U-V3R4fFdb.js +1 -0
- package/dist/assets/railroad-peg-WCYAUIDC-B-RuhUQW.js +1 -0
- package/dist/assets/railroadDiagram-O6MQD6OU-FjG-6OLu.js +1 -0
- package/dist/assets/requirementDiagram-BXWQKSXE-Cnj8RfE4.js +84 -0
- package/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dist/assets/sankeyDiagram-P5KCCOFB-DMu1fnEh.js +40 -0
- package/dist/assets/sequenceDiagram-WJ2MYXX4-CtCtaRpW.js +162 -0
- package/dist/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
- package/dist/assets/src-CGp3bfio.js +1 -0
- package/dist/assets/stateDiagram-D77RDMKH-xcJbLNhz.js +1 -0
- package/dist/assets/stateDiagram-v2-MP3YSRHH-DYHrQmJJ.js +1 -0
- package/dist/assets/swimlanes-42K2YHIH-BwLln_ga.js +1 -0
- package/dist/assets/swimlanesDiagram-VR7AAH4N-BcDfUQ0A.js +8 -0
- package/dist/assets/timeline-definition-24CTP7MA-ucNGsUUz.js +120 -0
- package/dist/assets/treeView-Q6P3EWNA-3uOomRue.js +1 -0
- package/dist/assets/treemap-WGGIJYW6-iGK7vwID.js +1 -0
- package/dist/assets/vennDiagram-4TSXK5OY-B9LgGe16.js +34 -0
- package/dist/assets/wardley-WFR3VGLG-FupMOf6k.js +1 -0
- package/dist/assets/wardleyDiagram-VM6X3IG4-CGZdEXM2.js +78 -0
- package/dist/assets/xterm-BrP-ENHg.css +1 -0
- package/dist/assets/xterm-C8zLTNGk.js +16 -0
- package/dist/assets/xychartDiagram-S5SC5T6Z-DafZrSBJ.js +7 -0
- package/dist/favicon.ico +0 -0
- package/dist/favicon.svg +6 -0
- package/dist/index.html +34 -0
- package/extensions/implement-goal-issue.ts +368 -0
- package/extensions/implement-next-epic.ts +835 -0
- package/index.html +28 -0
- package/install.sh +111 -0
- package/issues/control.ts +91 -0
- package/issues/guards.ts +12 -0
- package/issues/ledger.ts +122 -0
- package/issues/legacy.ts +68 -0
- package/issues/lock.ts +305 -0
- package/issues/paths.ts +76 -0
- package/issues/preflight.ts +189 -0
- package/issues/repository.ts +203 -0
- package/issues/scout/actions.ts +255 -0
- package/issues/scout/control.ts +80 -0
- package/issues/scout/github.ts +358 -0
- package/issues/scout/paths.ts +129 -0
- package/issues/scout/preflight.ts +277 -0
- package/issues/scout/recommendation.ts +400 -0
- package/issues/scout/scan.ts +143 -0
- package/issues/scout/state.ts +448 -0
- package/issues/scout/worker.ts +1282 -0
- package/issues/state.ts +584 -0
- package/issues/tracker.ts +271 -0
- package/issues/worker.ts +1065 -0
- package/lib/dependencies.ts +61 -0
- package/lib/forge-auth.ts +953 -0
- package/lib/forge.ts +141 -0
- package/lib/gitea.ts +709 -0
- package/lib/github-release.ts +318 -0
- package/lib/inventory.test.ts +79 -0
- package/lib/inventory.ts +53 -0
- package/lib/release.test.ts +269 -0
- package/lib/release.ts +801 -0
- package/omp/commands/adr-resolve.md +8 -0
- package/omp/commands/discover.md +6 -0
- package/omp/commands/epic-next.md +8 -0
- package/omp/commands/flow-change.md +8 -0
- package/omp/commands/flow-goal.md +8 -0
- package/omp/commands/flow-implement.md +8 -0
- package/omp/commands/flow-widget.md +8 -0
- package/omp/commands/goal-draft.md +8 -0
- package/omp/commands/goal-outcome.md +8 -0
- package/omp/commands/implement-issue.md +8 -0
- package/omp/commands/prepare-skills.md +6 -0
- package/omp/commands/scout-recommendations.md +8 -0
- package/omp/commands/setup-devboard.md +24 -0
- package/omp/config.yml +12 -0
- package/omp/extensions/implement-goal-issue.ts +2 -0
- package/omp/extensions/implement-next-epic.ts +2 -0
- package/omp/mcp.json +9 -0
- package/package.json +86 -7
- package/prompts/adr-resolve.md +130 -0
- package/prompts/discover.md +541 -0
- package/prompts/epic-next.md +533 -0
- package/prompts/flow-change.md +76 -0
- package/prompts/flow-goal.md +126 -0
- package/prompts/flow-implement.md +103 -0
- package/prompts/flow-widget.md +54 -0
- package/prompts/goal-draft.md +147 -0
- package/prompts/goal-outcome.md +87 -0
- package/prompts/implement-issue.md +66 -0
- package/prompts/prepare-skills.md +142 -0
- package/prompts/scout-recommendations.md +143 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.svg +6 -0
- package/server/acp.ts +540 -0
- package/server/activity.test.ts +96 -0
- package/server/activity.ts +48 -0
- package/server/app.test.ts +882 -0
- package/server/app.ts +6179 -0
- package/server/ask.test.ts +543 -0
- package/server/ask.ts +589 -0
- package/server/dependencies.test.ts +118 -0
- package/server/discover-remote.test.ts +1602 -0
- package/server/discover-sheet.test.ts +176 -0
- package/server/discover.test.ts +1510 -0
- package/server/discover.ts +3198 -0
- package/server/feedback.test.ts +458 -0
- package/server/feedback.ts +369 -0
- package/server/fixtures/adr-source.ts +71 -0
- package/server/fixtures/hang-download.ts +14 -0
- package/server/fixtures/stub-agent.ts +1870 -0
- package/server/fixtures/stub-forge.ts +141 -0
- package/server/fixtures/stub-gh.ts +57 -0
- package/server/flow-pr.test.ts +976 -0
- package/server/flow.test.ts +1632 -0
- package/server/flow.ts +2655 -0
- package/server/forge-pr.ts +387 -0
- package/server/goal-creation.test.ts +957 -0
- package/server/goal-draft.test.ts +348 -0
- package/server/goal-drafts.ts +449 -0
- package/server/goal-proposal.test.ts +479 -0
- package/server/goal-proposal.ts +232 -0
- package/server/goal-revision.test.ts +613 -0
- package/server/goal-slug.test.ts +56 -0
- package/server/goal-slug.ts +96 -0
- package/server/goal.ts +20 -0
- package/server/index.ts +147 -0
- package/server/issue-close.test.ts +100 -0
- package/server/issue-close.ts +178 -0
- package/server/issues.test.ts +167 -0
- package/server/issues.ts +479 -0
- package/server/journal.test.ts +350 -0
- package/server/journal.ts +329 -0
- package/server/lifecycle-pause.test.ts +1795 -0
- package/server/lifecycle.test.ts +1879 -0
- package/server/parallel-lifecycle.test.ts +1029 -0
- package/server/persistence-restart.test.ts +723 -0
- package/server/persistence.test.ts +1935 -0
- package/server/records.test.ts +180 -0
- package/server/records.ts +99 -0
- package/server/reset-implementation.test.ts +997 -0
- package/server/run.test.ts +611 -0
- package/server/scout.test.ts +877 -0
- package/server/scout.ts +459 -0
- package/server/skills-preparation.test.ts +1073 -0
- package/server/state.ts +249 -0
- package/server/tracker.ts +369 -0
- package/server/updates.test.ts +444 -0
- package/server/updates.ts +198 -0
- package/server/version.test.ts +140 -0
- package/server/version.ts +151 -0
- package/server/watchdog.ts +389 -0
- package/svelte.config.js +5 -0
- package/templates/host-AGENTS.md +235 -0
- package/tsconfig.json +21 -0
- package/vite.config.ts +21 -0
- package/watchdog/cleanup-main.ts +98 -0
- package/watchdog/cleanup.ts +301 -0
- package/watchdog/collect.ts +311 -0
- package/watchdog/coordinator.ts +397 -0
- package/watchdog/delivery.ts +107 -0
- package/watchdog/discovery.ts +209 -0
- package/watchdog/findings.ts +211 -0
- package/watchdog/github.ts +189 -0
- package/watchdog/history.ts +138 -0
- package/watchdog/install.ts +103 -0
- package/watchdog/ledger.ts +188 -0
- package/watchdog/lock.ts +63 -0
- package/watchdog/main.ts +106 -0
- package/watchdog/status.ts +71 -0
- package/watchdog/systemd.ts +96 -0
- package/watchdog/uninstall.ts +30 -0
- package/watchdog/units/devboard-watchdog.service +9 -0
- package/watchdog/units/devboard-watchdog.timer +10 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Prepare project-agnostic Agent Skills grounded in relevant public standards, general best practices, software-architecture patterns, and testing patterns selected from GOAL.md.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`/prepare-skills`: derive a focused set of project-agnostic Agent Skills from the goal, grounded in
|
|
6
|
+
current public practice, and leave no contradictions among the installed skills.
|
|
7
|
+
|
|
8
|
+
## Contract
|
|
9
|
+
|
|
10
|
+
- `<host>` is the host project: `git rev-parse --show-toplevel`; when that fails, the working
|
|
11
|
+
directory. `.devboard/` and `.worktree/` are the harness, not the host; never write into them.
|
|
12
|
+
- `<host>/GOAL.md` is the only project-specific input. Read it once and use it only to select which
|
|
13
|
+
public standards and pattern families are relevant to the work it describes. Never copy, quote,
|
|
14
|
+
paraphrase, summarize, or allude to its implementation details in a skill.
|
|
15
|
+
- Every skill is project-agnostic: it states policy that another project could adopt unchanged.
|
|
16
|
+
Implementation decisions stay with the implementation agent, never with a skill.
|
|
17
|
+
- Do not survey, list, or read host source code, `adrs/`, configuration, package manifests, build
|
|
18
|
+
files, tests, README files, or directory trees. Do not infer implementation facts the goal does
|
|
19
|
+
not state, and do not ask the developer for them.
|
|
20
|
+
- Deliverable: skills under `<host>/.omp/skills/<name>/SKILL.md`, each with a directory name that
|
|
21
|
+
matches its frontmatter `name`. Create nothing outside that skill root except the directories and
|
|
22
|
+
`SKILL.md` files themselves.
|
|
23
|
+
- NEVER write, rewrite, or delete `<host>/GOAL.md`, anything under `<host>/adrs/`, or any other
|
|
24
|
+
host file.
|
|
25
|
+
- Replace only the skills this feature owns. At the start, delete every skill directory whose
|
|
26
|
+
`SKILL.md` frontmatter has `metadata.devboard-managed: "true"` and does not carry
|
|
27
|
+
`metadata.devboard-family: "discover"`. A managed skill with no `metadata.devboard-family` field
|
|
28
|
+
belongs to this prepare family for backward compatibility. Never delete, rename, or edit a skill
|
|
29
|
+
that does not belong to this family, including a Discover-family skill: the Discover family is
|
|
30
|
+
project-specific, owned by Discover, and belongs to the developer once it is published.
|
|
31
|
+
- Install no third-party skill. `npx skills` may be used only to inspect or adapt public skill
|
|
32
|
+
content while authoring; every delivered `SKILL.md` is written locally for this goal.
|
|
33
|
+
|
|
34
|
+
## Phase 1 — Goal and research
|
|
35
|
+
|
|
36
|
+
1. Read `<host>/GOAL.md`. If it is absent, empty, or whitespace-only, `halt: GOAL.md is not set`
|
|
37
|
+
and nothing else.
|
|
38
|
+
2. Treat the goal as a selection signal only: decide which standards and pattern families it makes
|
|
39
|
+
relevant. Never turn a statement from it into a skill directive.
|
|
40
|
+
3. Research current public practice on the web before writing anything. Search separately in each
|
|
41
|
+
of these areas and read enough sources to distinguish durable guidance from fashion:
|
|
42
|
+
- public standards and specifications from authoritative bodies, such as RFCs, ISO or IEEE
|
|
43
|
+
standards, and standards-organization guidance;
|
|
44
|
+
- general engineering best practices that apply regardless of stack or organization;
|
|
45
|
+
- software-architecture patterns: boundaries, dependency direction, cohesion, coupling,
|
|
46
|
+
interfaces, layering;
|
|
47
|
+
- testing patterns: test boundaries, observable behavior, test doubles, regression coverage.
|
|
48
|
+
Prefer primary sources and official guidance. Record what the sources say well enough to explain
|
|
49
|
+
it, not to copy it.
|
|
50
|
+
4. Do not fabricate research. If web access fails, `halt: web research is unavailable` and write no
|
|
51
|
+
skill.
|
|
52
|
+
|
|
53
|
+
## Phase 2 — Choose the skills
|
|
54
|
+
|
|
55
|
+
Decide how many skills to prepare and what each one covers. Base the choice on the standards and
|
|
56
|
+
pattern families the goal makes relevant, not on a fixed taxonomy. At least one skill is required;
|
|
57
|
+
there is no maximum and no required topic. Each skill covers one coherent family so another project
|
|
58
|
+
can adopt it unchanged.
|
|
59
|
+
|
|
60
|
+
## Phase 3 — Interview when needed
|
|
61
|
+
|
|
62
|
+
Ask at most one round of questions, and only when the goal leaves open which standards or pattern
|
|
63
|
+
families matter for the prepared skills. Use the `ask` tool with 2–5 concrete options, then
|
|
64
|
+
continue. Do not ask about technology, language, framework, or file layout, and never ask for
|
|
65
|
+
implementation detail the goal does not state. No question is required when the goal is specific
|
|
66
|
+
enough.
|
|
67
|
+
|
|
68
|
+
## Phase 4 — Author the skills
|
|
69
|
+
|
|
70
|
+
Write at least one skill. Each is one directory under `<host>/.omp/skills/` containing one
|
|
71
|
+
`SKILL.md`. Use this shape:
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
---
|
|
75
|
+
name: lower-case-hyphenated-name
|
|
76
|
+
description: One sentence naming the policy the skill states and when to apply it.
|
|
77
|
+
metadata:
|
|
78
|
+
devboard-managed: "true"
|
|
79
|
+
devboard-family: "prepare"
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
# Title
|
|
83
|
+
|
|
84
|
+
- One portable policy per bullet, phrased as an imperative.
|
|
85
|
+
- Another policy drawn from a public standard or a named pattern.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Rules for every skill:
|
|
89
|
+
|
|
90
|
+
- It is project-agnostic: another project with a different stack can adopt every directive
|
|
91
|
+
unchanged.
|
|
92
|
+
- It contains no project-specific implementation detail: no host or product name, no repository or
|
|
93
|
+
absolute path, no host directory or file name, no module, class, function, type, package,
|
|
94
|
+
dependency, framework, runtime, library, or programming language, no data format, API shape,
|
|
95
|
+
schema, or configuration key, and no concrete architecture, layout, or design decision.
|
|
96
|
+
- Public domain names, formats, and standard identifiers are allowed when they are the subject of
|
|
97
|
+
the guidance, such as an RFC number, a named standard, or a protocol defined by a public body.
|
|
98
|
+
- Directory name equals `name`, matches `^[a-z0-9]+(-[a-z0-9]+)*$`, and is at most 64 characters.
|
|
99
|
+
- `description` is non-empty, at most 1024 characters, and states the policy the skill governs and
|
|
100
|
+
when an agent should apply it.
|
|
101
|
+
- Body guidance states durable policy grounded in the researched standards and patterns, not
|
|
102
|
+
generic filler such as "write clean code" or "test your code".
|
|
103
|
+
- Guidance is internally consistent and complements rather than repeats the other skills.
|
|
104
|
+
- State directives explicitly, one policy per bullet, so a later review can compare them.
|
|
105
|
+
- A skill carries no provenance line, source list, or citation field; the research informs the
|
|
106
|
+
policy and stays out of the delivered file.
|
|
107
|
+
|
|
108
|
+
## Phase 5 — Review every installed skill
|
|
109
|
+
|
|
110
|
+
This pass is mandatory and covers every skill in `<host>/.omp/skills/` that belongs to this
|
|
111
|
+
prepare family, plus every hand-authored skill without a `devboard-managed` marker. It never reads
|
|
112
|
+
a skill whose frontmatter carries `metadata.devboard-family: "discover"`: Discover's
|
|
113
|
+
project-specific policy is not measured against project-agnostic preparation.
|
|
114
|
+
|
|
115
|
+
1. List every skill directory and read every `SKILL.md` in it.
|
|
116
|
+
2. Extract the directive statements: bullets or lines beginning with a policy word such as
|
|
117
|
+
`Always`, `Never`, `Must`, `Should`, `Do not`, `Avoid`, `Prefer`, or `Use`.
|
|
118
|
+
3. Compare each pair of skills. Two skills contradict when they state opposite policies for the
|
|
119
|
+
same subject, for example "Always use dependency injection" and "Never use dependency
|
|
120
|
+
injection".
|
|
121
|
+
4. Resolve every contradiction by rewriting a skill of this prepare family so both give compatible
|
|
122
|
+
instructions. You may rephrase, narrow, merge, or delete prepare-family skills. Never change an
|
|
123
|
+
unmanaged skill or a Discover-family skill.
|
|
124
|
+
5. If a contradiction cannot be resolved without changing an unmanaged skill, stop: leave the
|
|
125
|
+
unmanaged file exactly as it was and `halt: unresolvable contradiction with unmanaged skill
|
|
126
|
+
<name>`. Do not claim success.
|
|
127
|
+
|
|
128
|
+
## Phase 6 — Finish
|
|
129
|
+
|
|
130
|
+
- Every skill of this family must carry both markers, and the prepare family must contain at least
|
|
131
|
+
one skill.
|
|
132
|
+
- The final review must have no remaining contradictions.
|
|
133
|
+
- Reply with a short list of the prepared skill names and `No contradictions`; never paste skill
|
|
134
|
+
bodies into chat.
|
|
135
|
+
|
|
136
|
+
## Halting
|
|
137
|
+
|
|
138
|
+
`halt: <reason>` on its own line and nothing else. Reasons: `GOAL.md` is absent, empty, or
|
|
139
|
+
whitespace-only; web research is unavailable; the skill root cannot be written; a contradiction with
|
|
140
|
+
an unmanaged skill cannot be resolved without editing that skill.
|
|
141
|
+
|
|
142
|
+
NEVER halt for effort, question count, model latency, or the number of research queries.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Survey the host repository and write the significant, evidence-backed improvement recommendations Auto Scout files as issues.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`/scout-recommendations`: survey the repository, find significant improvements, and write the
|
|
6
|
+
recommendations to the scan file Auto Scout named. This turn produces a recommendation document,
|
|
7
|
+
nothing else.
|
|
8
|
+
|
|
9
|
+
## Contract
|
|
10
|
+
|
|
11
|
+
- The scan directory is the command argument, absolute and outside your control:
|
|
12
|
+
`<scan-dir>`. Read `<scan-dir>/request.json` once; it carries `requested`, `categories`,
|
|
13
|
+
`excludedRoots`, `knownTitles`, `draftGoalHeadings`, `significanceThreshold`, and
|
|
14
|
+
`repositoryPath`.
|
|
15
|
+
- `<repositoryPath>` is the repository to survey. Never survey or write outside it, and never
|
|
16
|
+
read inside an `excludedRoots` tree: generated output, vendored packages, temporary state, and
|
|
17
|
+
worktrees are not the repository under review. Every `path` you cite is relative to that exact
|
|
18
|
+
root: a file under a subdirectory keeps that leading directory in the path, never a shorter
|
|
19
|
+
form. Before writing the answer, confirm every cited path with `test -f <path>` from
|
|
20
|
+
`<repositoryPath>`.
|
|
21
|
+
- One correction turn is available: if validation rejects the answer, rewrite
|
|
22
|
+
`<scan-dir>/recommendations.json` addressing exactly what the rejection names.
|
|
23
|
+
- Read the repository's context files (`AGENTS.md`, `GOAL.md`, `README.md`, `adrs/`, `docs/`), its
|
|
24
|
+
package manifests, its source, and its tests before proposing anything. A finding you cannot
|
|
25
|
+
point at in the code is not a finding.
|
|
26
|
+
- Deliverable: exactly one file, `<scan-dir>/recommendations.json`. Write nothing else, anywhere.
|
|
27
|
+
- Never modify the repository: no edits, no formatting, no new files inside it, no branches,
|
|
28
|
+
commits, stashes, builds, tests, installs, or any command that mutates the checkout or its git
|
|
29
|
+
state. Read-only inspection only.
|
|
30
|
+
- Never file an issue, write a draft goal, or touch `.devboard/goal-proposals/`.
|
|
31
|
+
- Never ask the developer a question, request permission, or wait for input. Decide with what the
|
|
32
|
+
repository shows, finish in this one turn, and write the file.
|
|
33
|
+
- The delivered count is at most `requested`. Fewer significant findings than requested is a
|
|
34
|
+
correct answer, with a non-empty `shortfall` reason. Never pad the list, never invent filler,
|
|
35
|
+
and never repeat a finding to reach the count.
|
|
36
|
+
- `knownTitles` is the normalized form of every existing Auto Scout issue title and every open
|
|
37
|
+
issue title; `draftGoalHeadings` is every draft goal heading. Never restate, paraphrase, or
|
|
38
|
+
split one of those findings: the worker drops such an item and records it.
|
|
39
|
+
|
|
40
|
+
## Significance
|
|
41
|
+
|
|
42
|
+
Every item carries an integer `significance` from 1 to 5 and a non-empty `significanceReason`.
|
|
43
|
+
Score honestly; the worker files only items scored 4 or 5, so an inflated score wastes a filing
|
|
44
|
+
slot and an honest 3 is a correct answer.
|
|
45
|
+
|
|
46
|
+
- **4 or 5 requires a named, observable impact.** Name one of: a reproducible defect, a real
|
|
47
|
+
failure mode (an input, state, or ordering that makes the code do the wrong thing), or a
|
|
48
|
+
measured structural cost (a duplicated rule whose copies already disagree, a measured build or
|
|
49
|
+
runtime cost, a boundary with no test that would let a real regression pass).
|
|
50
|
+
- 5: the impact is reachable now and correctness- or data-affecting.
|
|
51
|
+
- 4: the impact is real and named, but narrower or latent.
|
|
52
|
+
- **3:** a real observation with no observable impact named yet — a latent inconsistency, an
|
|
53
|
+
unexercised cleanup, a structural preference. Do not file it.
|
|
54
|
+
- **2 or 1:** polishing code that is already correct, style, formatting, comment wording, a
|
|
55
|
+
speculative rewrite, or a generic "add tests" item with no named gap. Never a deliverable.
|
|
56
|
+
|
|
57
|
+
`significanceReason` states the impact in one or two sentences. "It would be cleaner" is not an
|
|
58
|
+
impact. "`parseA` and `parseB` disagree on a trailing slash, so a path with one is rejected by
|
|
59
|
+
the first and accepted by the second" is.
|
|
60
|
+
|
|
61
|
+
## What to survey
|
|
62
|
+
|
|
63
|
+
Read widely enough to judge significance, then look for:
|
|
64
|
+
|
|
65
|
+
- duplication: the same logic, rule, or literal in several places that should be one;
|
|
66
|
+
- unclear or inconsistent naming: one concept under two names, or a name that promises something
|
|
67
|
+
the code does not do;
|
|
68
|
+
- entities that should merge or split: a module doing two jobs, or two modules that only work
|
|
69
|
+
together;
|
|
70
|
+
- long or tangled units: a function or component whose branches hide its intent;
|
|
71
|
+
- missing or weak tests: a named behavior, boundary, or failure path with no test, or a test that
|
|
72
|
+
cannot fail;
|
|
73
|
+
- unhandled inputs and failures: an unchecked external value, a filesystem or network call with no
|
|
74
|
+
failure path, a promise nobody awaits;
|
|
75
|
+
- swallowed errors: a `catch` that discards the reason, a fallback that hides a real failure;
|
|
76
|
+
- race or ordering hazards: shared state written from two paths, work that assumes an order the
|
|
77
|
+
code does not enforce.
|
|
78
|
+
|
|
79
|
+
Prefer one high-impact finding over three easy ones. A finding earns its place only if fixing it
|
|
80
|
+
changes behavior, correctness, or the cost of the next change.
|
|
81
|
+
|
|
82
|
+
## What never ships
|
|
83
|
+
|
|
84
|
+
Do not propose: style or formatting preferences; comment-only changes; speculative rewrites with
|
|
85
|
+
no defect named; a dependency, framework, or architecture swap as an end in itself; a generic
|
|
86
|
+
"add tests" item with no named gap; or anything already filed, open as an issue, or present as a
|
|
87
|
+
draft goal. Those titles are in the request; never restate them, and never propose a paraphrase
|
|
88
|
+
of one.
|
|
89
|
+
|
|
90
|
+
Every item must cite at least one concrete `path:lines` inside the repository and at least one
|
|
91
|
+
acceptance criterion an implementer can verify by running something.
|
|
92
|
+
|
|
93
|
+
## Output
|
|
94
|
+
|
|
95
|
+
Write `<scan-dir>/recommendations.json` as one JSON object:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"recommendations": [
|
|
100
|
+
{
|
|
101
|
+
"category": "clarity",
|
|
102
|
+
"title": "One line, at most 200 characters, no trailing period",
|
|
103
|
+
"summary": "What is wrong and why it matters, in two or three sentences.",
|
|
104
|
+
"impact": "What improving it changes for the next developer or for correctness.",
|
|
105
|
+
"significance": 4,
|
|
106
|
+
"significanceReason": "The named defect or measured cost, in one or two sentences.",
|
|
107
|
+
"evidence": [
|
|
108
|
+
{
|
|
109
|
+
"path": "path/inside/the/repository.ts",
|
|
110
|
+
"lines": "120-148",
|
|
111
|
+
"quote": "A short verbatim excerpt from those lines."
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"proposedChange": "The change to make, concretely and without prescribing unrelated work.",
|
|
115
|
+
"files": ["path/inside/the/repository.ts"],
|
|
116
|
+
"acceptanceCriteria": [
|
|
117
|
+
"A statement that can be checked by reading the code or running the test suite."
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"shortfall": "Why fewer than the requested count were delivered, or omit it when the count is met."
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Field rules:
|
|
126
|
+
|
|
127
|
+
- `category` is exactly one of `clarity`, `structure`, `naming`, `tests`, `robustness`,
|
|
128
|
+
`correctness`.
|
|
129
|
+
- `title` is one line, at most 200 characters, specific enough to be an issue title.
|
|
130
|
+
- `summary`, `proposedChange`, and every `acceptanceCriteria` entry are non-empty.
|
|
131
|
+
- `significance` is an integer from 1 through 5; `significanceReason` is non-empty and names the
|
|
132
|
+
impact at 4 or 5.
|
|
133
|
+
- `evidence` has at least one entry. `path` is repository-relative with `/` separators, names an
|
|
134
|
+
existing regular file outside the excluded roots, and `lines` is `N` or `N-M` inside that
|
|
135
|
+
file's real line count. `quote` is optional and verbatim.
|
|
136
|
+
- `files` is non-empty and every entry also appears in `evidence[].path`.
|
|
137
|
+
- `recommendations` holds at most `requested` items.
|
|
138
|
+
- `shortfall`, when present, is a non-empty sentence naming why the repository does not offer
|
|
139
|
+
more significant findings.
|
|
140
|
+
|
|
141
|
+
A missing or out-of-range score, or a missing reason, rejects the whole answer and files nothing.
|
|
142
|
+
Do not print the JSON as your answer; write it to the file and end the turn. If the repository
|
|
143
|
+
affords no significant finding, write `{"recommendations": [], "shortfall": "…"}`.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Devboard">
|
|
2
|
+
<rect width="64" height="64" rx="14" fill="#1f6feb" />
|
|
3
|
+
<rect x="13" y="26" width="10" height="24" rx="3.5" fill="#ffffff" fill-opacity="0.72" />
|
|
4
|
+
<rect x="27" y="14" width="10" height="36" rx="3.5" fill="#ffffff" />
|
|
5
|
+
<rect x="41" y="20" width="10" height="30" rx="3.5" fill="#ffffff" fill-opacity="0.86" />
|
|
6
|
+
</svg>
|