@kynetic-ai/spec 0.1.2 → 0.4.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/README.md +250 -17
- package/dist/acp/client.d.ts +18 -4
- package/dist/acp/client.d.ts.map +1 -1
- package/dist/acp/client.js +44 -26
- package/dist/acp/client.js.map +1 -1
- package/dist/acp/framing.d.ts +2 -2
- package/dist/acp/framing.d.ts.map +1 -1
- package/dist/acp/framing.js +37 -29
- package/dist/acp/framing.js.map +1 -1
- package/dist/acp/index.d.ts +6 -7
- package/dist/acp/index.d.ts.map +1 -1
- package/dist/acp/index.js +3 -3
- package/dist/acp/index.js.map +1 -1
- package/dist/acp/types.d.ts +5 -5
- package/dist/acp/types.d.ts.map +1 -1
- package/dist/acp/types.js +18 -18
- package/dist/acp/types.js.map +1 -1
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/adapters.js +24 -13
- package/dist/agents/adapters.js.map +1 -1
- package/dist/agents/index.d.ts +2 -2
- package/dist/agents/index.js +2 -2
- package/dist/agents/spawner.d.ts +4 -4
- package/dist/agents/spawner.d.ts.map +1 -1
- package/dist/agents/spawner.js +6 -6
- package/dist/agents/spawner.js.map +1 -1
- package/dist/cli/batch-context.d.ts +43 -0
- package/dist/cli/batch-context.d.ts.map +1 -0
- package/dist/cli/batch-context.js +93 -0
- package/dist/cli/batch-context.js.map +1 -0
- package/dist/cli/batch-exec.d.ts +107 -0
- package/dist/cli/batch-exec.d.ts.map +1 -0
- package/dist/cli/batch-exec.js +706 -0
- package/dist/cli/batch-exec.js.map +1 -0
- package/dist/cli/batch.d.ts +4 -2
- package/dist/cli/batch.d.ts.map +1 -1
- package/dist/cli/batch.js +15 -14
- package/dist/cli/batch.js.map +1 -1
- package/dist/cli/command-annotations.d.ts +23 -0
- package/dist/cli/command-annotations.d.ts.map +1 -0
- package/dist/cli/command-annotations.js +27 -0
- package/dist/cli/command-annotations.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +46 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +377 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/batch.d.ts +20 -0
- package/dist/cli/commands/batch.d.ts.map +1 -0
- package/dist/cli/commands/batch.js +214 -0
- package/dist/cli/commands/batch.js.map +1 -0
- package/dist/cli/commands/clone-for-testing.d.ts +1 -1
- package/dist/cli/commands/clone-for-testing.d.ts.map +1 -1
- package/dist/cli/commands/clone-for-testing.js +37 -47
- package/dist/cli/commands/clone-for-testing.js.map +1 -1
- package/dist/cli/commands/derive.d.ts +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +141 -88
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +11 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +152 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/export.d.ts +12 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +134 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/help.d.ts +1 -1
- package/dist/cli/commands/help.d.ts.map +1 -1
- package/dist/cli/commands/help.js +163 -37
- package/dist/cli/commands/help.js.map +1 -1
- package/dist/cli/commands/inbox.d.ts +1 -1
- package/dist/cli/commands/inbox.d.ts.map +1 -1
- package/dist/cli/commands/inbox.js +178 -56
- package/dist/cli/commands/inbox.js.map +1 -1
- package/dist/cli/commands/index.d.ts +31 -19
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +31 -19
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +5 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +108 -57
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/item.d.ts +1 -1
- package/dist/cli/commands/item.d.ts.map +1 -1
- package/dist/cli/commands/item.js +557 -274
- package/dist/cli/commands/item.js.map +1 -1
- package/dist/cli/commands/link.d.ts +1 -1
- package/dist/cli/commands/link.d.ts.map +1 -1
- package/dist/cli/commands/link.js +55 -46
- package/dist/cli/commands/link.js.map +1 -1
- package/dist/cli/commands/log.d.ts +1 -1
- package/dist/cli/commands/log.d.ts.map +1 -1
- package/dist/cli/commands/log.js +58 -51
- package/dist/cli/commands/log.js.map +1 -1
- package/dist/cli/commands/merge-driver.d.ts +19 -0
- package/dist/cli/commands/merge-driver.d.ts.map +1 -0
- package/dist/cli/commands/merge-driver.js +398 -0
- package/dist/cli/commands/merge-driver.js.map +1 -0
- package/dist/cli/commands/meta.d.ts +1 -1
- package/dist/cli/commands/meta.d.ts.map +1 -1
- package/dist/cli/commands/meta.js +534 -399
- package/dist/cli/commands/meta.js.map +1 -1
- package/dist/cli/commands/module.d.ts +1 -1
- package/dist/cli/commands/module.d.ts.map +1 -1
- package/dist/cli/commands/module.js +30 -25
- package/dist/cli/commands/module.js.map +1 -1
- package/dist/cli/commands/plan-import.d.ts +11 -0
- package/dist/cli/commands/plan-import.d.ts.map +1 -0
- package/dist/cli/commands/plan-import.js +547 -0
- package/dist/cli/commands/plan-import.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +10 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +421 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/ralph.d.ts +1 -1
- package/dist/cli/commands/ralph.d.ts.map +1 -1
- package/dist/cli/commands/ralph.js +1109 -170
- package/dist/cli/commands/ralph.js.map +1 -1
- package/dist/cli/commands/refs.d.ts +13 -0
- package/dist/cli/commands/refs.d.ts.map +1 -0
- package/dist/cli/commands/refs.js +283 -0
- package/dist/cli/commands/refs.js.map +1 -0
- package/dist/cli/commands/search.d.ts +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +199 -37
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/serve.d.ts +10 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +491 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/session.d.ts +25 -6
- package/dist/cli/commands/session.d.ts.map +1 -1
- package/dist/cli/commands/session.js +810 -127
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/setup-seeding.d.ts +81 -0
- package/dist/cli/commands/setup-seeding.d.ts.map +1 -0
- package/dist/cli/commands/setup-seeding.js +292 -0
- package/dist/cli/commands/setup-seeding.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +77 -3
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +1267 -274
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/shadow.d.ts +1 -1
- package/dist/cli/commands/shadow.d.ts.map +1 -1
- package/dist/cli/commands/shadow.js +70 -50
- package/dist/cli/commands/shadow.js.map +1 -1
- package/dist/cli/commands/skill-crud.d.ts +58 -0
- package/dist/cli/commands/skill-crud.d.ts.map +1 -0
- package/dist/cli/commands/skill-crud.js +753 -0
- package/dist/cli/commands/skill-crud.js.map +1 -0
- package/dist/cli/commands/skill-diff.d.ts +27 -0
- package/dist/cli/commands/skill-diff.d.ts.map +1 -0
- package/dist/cli/commands/skill-diff.js +840 -0
- package/dist/cli/commands/skill-diff.js.map +1 -0
- package/dist/cli/commands/skill-install.d.ts +56 -0
- package/dist/cli/commands/skill-install.d.ts.map +1 -0
- package/dist/cli/commands/skill-install.js +509 -0
- package/dist/cli/commands/skill-install.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +20 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +36 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/task.d.ts +1 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +584 -350
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/tasks.d.ts +26 -1
- package/dist/cli/commands/tasks.d.ts.map +1 -1
- package/dist/cli/commands/tasks.js +225 -122
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/commands/trait.d.ts +1 -1
- package/dist/cli/commands/trait.d.ts.map +1 -1
- package/dist/cli/commands/trait.js +166 -101
- package/dist/cli/commands/trait.js.map +1 -1
- package/dist/cli/commands/triage.d.ts +7 -0
- package/dist/cli/commands/triage.d.ts.map +1 -0
- package/dist/cli/commands/triage.js +483 -0
- package/dist/cli/commands/triage.js.map +1 -0
- package/dist/cli/commands/util.d.ts +7 -0
- package/dist/cli/commands/util.d.ts.map +1 -0
- package/dist/cli/commands/util.js +30 -0
- package/dist/cli/commands/util.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +264 -83
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/commands/workflow.d.ts +16 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +851 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/exit-codes.d.ts +7 -0
- package/dist/cli/exit-codes.d.ts.map +1 -1
- package/dist/cli/exit-codes.js +26 -18
- package/dist/cli/exit-codes.js.map +1 -1
- package/dist/cli/help/content.d.ts.map +1 -1
- package/dist/cli/help/content.js +86 -71
- package/dist/cli/help/content.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +131 -19
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/introspection.d.ts +6 -2
- package/dist/cli/introspection.d.ts.map +1 -1
- package/dist/cli/introspection.js +11 -8
- package/dist/cli/introspection.js.map +1 -1
- package/dist/cli/output.d.ts +64 -4
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +237 -85
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/parse-utils.d.ts +21 -0
- package/dist/cli/parse-utils.d.ts.map +1 -0
- package/dist/cli/parse-utils.js +32 -0
- package/dist/cli/parse-utils.js.map +1 -0
- package/dist/cli/pid-utils.d.ts +72 -0
- package/dist/cli/pid-utils.d.ts.map +1 -0
- package/dist/cli/pid-utils.js +174 -0
- package/dist/cli/pid-utils.js.map +1 -0
- package/dist/cli/suggest.d.ts.map +1 -1
- package/dist/cli/suggest.js +1 -2
- package/dist/cli/suggest.js.map +1 -1
- package/dist/cli/validators.d.ts +43 -0
- package/dist/cli/validators.d.ts.map +1 -0
- package/dist/cli/validators.js +84 -0
- package/dist/cli/validators.js.map +1 -0
- package/dist/daemon/index.ts +52 -0
- package/dist/daemon/middleware/project-context.ts +126 -0
- package/dist/daemon/pid.ts +179 -0
- package/dist/daemon/project-context.ts +343 -0
- package/dist/daemon/routes/inbox.ts +164 -0
- package/dist/daemon/routes/items.ts +322 -0
- package/dist/daemon/routes/meta.ts +118 -0
- package/dist/daemon/routes/projects.ts +162 -0
- package/dist/daemon/routes/tasks.ts +327 -0
- package/dist/daemon/routes/triage.ts +402 -0
- package/dist/daemon/routes/validation.ts +248 -0
- package/dist/daemon/server.ts +408 -0
- package/dist/daemon/watcher.ts +195 -0
- package/dist/daemon/websocket/handler.ts +138 -0
- package/dist/daemon/websocket/heartbeat.ts +71 -0
- package/dist/daemon/websocket/pubsub.ts +125 -0
- package/dist/daemon/websocket/types.ts +66 -0
- package/dist/export/html.d.ts +19 -0
- package/dist/export/html.d.ts.map +1 -0
- package/dist/export/html.js +239 -0
- package/dist/export/html.js.map +1 -0
- package/dist/export/index.d.ts +10 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +10 -0
- package/dist/export/index.js.map +1 -0
- package/dist/export/json.d.ts +24 -0
- package/dist/export/json.d.ts.map +1 -0
- package/dist/export/json.js +198 -0
- package/dist/export/json.js.map +1 -0
- package/dist/export/triage.d.ts +51 -0
- package/dist/export/triage.d.ts.map +1 -0
- package/dist/export/triage.js +83 -0
- package/dist/export/triage.js.map +1 -0
- package/dist/export/types.d.ts +122 -0
- package/dist/export/types.d.ts.map +1 -0
- package/dist/export/types.js +9 -0
- package/dist/export/types.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/lib/claude-plugin-registry.d.ts +66 -0
- package/dist/lib/claude-plugin-registry.d.ts.map +1 -0
- package/dist/lib/claude-plugin-registry.js +318 -0
- package/dist/lib/claude-plugin-registry.js.map +1 -0
- package/dist/merge/arrays.d.ts +87 -0
- package/dist/merge/arrays.d.ts.map +1 -0
- package/dist/merge/arrays.js +164 -0
- package/dist/merge/arrays.js.map +1 -0
- package/dist/merge/file-type.d.ts +32 -0
- package/dist/merge/file-type.d.ts.map +1 -0
- package/dist/merge/file-type.js +70 -0
- package/dist/merge/file-type.js.map +1 -0
- package/dist/merge/index.d.ts +14 -0
- package/dist/merge/index.d.ts.map +1 -0
- package/dist/merge/index.js +11 -0
- package/dist/merge/index.js.map +1 -0
- package/dist/merge/objects.d.ts +46 -0
- package/dist/merge/objects.d.ts.map +1 -0
- package/dist/merge/objects.js +193 -0
- package/dist/merge/objects.js.map +1 -0
- package/dist/merge/parse.d.ts +23 -0
- package/dist/merge/parse.d.ts.map +1 -0
- package/dist/merge/parse.js +78 -0
- package/dist/merge/parse.js.map +1 -0
- package/dist/merge/resolve.d.ts +66 -0
- package/dist/merge/resolve.d.ts.map +1 -0
- package/dist/merge/resolve.js +189 -0
- package/dist/merge/resolve.js.map +1 -0
- package/dist/merge/types.d.ts +82 -0
- package/dist/merge/types.d.ts.map +1 -0
- package/dist/merge/types.js +8 -0
- package/dist/merge/types.js.map +1 -0
- package/dist/parser/agent-data-sections.d.ts +53 -0
- package/dist/parser/agent-data-sections.d.ts.map +1 -0
- package/dist/parser/agent-data-sections.js +118 -0
- package/dist/parser/agent-data-sections.js.map +1 -0
- package/dist/parser/alignment.d.ts +4 -4
- package/dist/parser/alignment.d.ts.map +1 -1
- package/dist/parser/alignment.js +27 -22
- package/dist/parser/alignment.js.map +1 -1
- package/dist/parser/assess.d.ts +5 -5
- package/dist/parser/assess.d.ts.map +1 -1
- package/dist/parser/assess.js +36 -32
- package/dist/parser/assess.js.map +1 -1
- package/dist/parser/config.d.ts +457 -0
- package/dist/parser/config.d.ts.map +1 -0
- package/dist/parser/config.js +373 -0
- package/dist/parser/config.js.map +1 -0
- package/dist/parser/convention-validation.d.ts +1 -1
- package/dist/parser/convention-validation.d.ts.map +1 -1
- package/dist/parser/convention-validation.js +21 -16
- package/dist/parser/convention-validation.js.map +1 -1
- package/dist/parser/coverage-cache.d.ts +49 -0
- package/dist/parser/coverage-cache.d.ts.map +1 -0
- package/dist/parser/coverage-cache.js +123 -0
- package/dist/parser/coverage-cache.js.map +1 -0
- package/dist/parser/daemon-status.d.ts +37 -0
- package/dist/parser/daemon-status.d.ts.map +1 -0
- package/dist/parser/daemon-status.js +67 -0
- package/dist/parser/daemon-status.js.map +1 -0
- package/dist/parser/doctor.d.ts +107 -0
- package/dist/parser/doctor.d.ts.map +1 -0
- package/dist/parser/doctor.js +366 -0
- package/dist/parser/doctor.js.map +1 -0
- package/dist/parser/fix.d.ts +1 -1
- package/dist/parser/fix.d.ts.map +1 -1
- package/dist/parser/fix.js +31 -27
- package/dist/parser/fix.js.map +1 -1
- package/dist/parser/index.d.ts +16 -11
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +16 -11
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/items.d.ts +8 -2
- package/dist/parser/items.d.ts.map +1 -1
- package/dist/parser/items.js +71 -35
- package/dist/parser/items.js.map +1 -1
- package/dist/parser/meta.d.ts +167 -9
- package/dist/parser/meta.d.ts.map +1 -1
- package/dist/parser/meta.js +379 -46
- package/dist/parser/meta.js.map +1 -1
- package/dist/parser/plan-document.d.ts +197 -0
- package/dist/parser/plan-document.d.ts.map +1 -0
- package/dist/parser/plan-document.js +341 -0
- package/dist/parser/plan-document.js.map +1 -0
- package/dist/parser/plans.d.ts +59 -0
- package/dist/parser/plans.d.ts.map +1 -0
- package/dist/parser/plans.js +239 -0
- package/dist/parser/plans.js.map +1 -0
- package/dist/parser/refs.d.ts +22 -9
- package/dist/parser/refs.d.ts.map +1 -1
- package/dist/parser/refs.js +102 -50
- package/dist/parser/refs.js.map +1 -1
- package/dist/parser/setup-status.d.ts +71 -0
- package/dist/parser/setup-status.d.ts.map +1 -0
- package/dist/parser/setup-status.js +269 -0
- package/dist/parser/setup-status.js.map +1 -0
- package/dist/parser/shadow.d.ts +150 -19
- package/dist/parser/shadow.d.ts.map +1 -1
- package/dist/parser/shadow.js +548 -187
- package/dist/parser/shadow.js.map +1 -1
- package/dist/parser/skill-render.d.ts +317 -0
- package/dist/parser/skill-render.d.ts.map +1 -0
- package/dist/parser/skill-render.js +943 -0
- package/dist/parser/skill-render.js.map +1 -0
- package/dist/parser/traits.d.ts +3 -3
- package/dist/parser/traits.d.ts.map +1 -1
- package/dist/parser/traits.js +2 -2
- package/dist/parser/traits.js.map +1 -1
- package/dist/parser/validate-skills.d.ts +32 -0
- package/dist/parser/validate-skills.d.ts.map +1 -0
- package/dist/parser/validate-skills.js +202 -0
- package/dist/parser/validate-skills.js.map +1 -0
- package/dist/parser/validate.d.ts +45 -3
- package/dist/parser/validate.d.ts.map +1 -1
- package/dist/parser/validate.js +622 -105
- package/dist/parser/validate.js.map +1 -1
- package/dist/parser/yaml.d.ts +83 -19
- package/dist/parser/yaml.d.ts.map +1 -1
- package/dist/parser/yaml.js +478 -173
- package/dist/parser/yaml.js.map +1 -1
- package/dist/ralph/cli-renderer.d.ts +8 -1
- package/dist/ralph/cli-renderer.d.ts.map +1 -1
- package/dist/ralph/cli-renderer.js +105 -34
- package/dist/ralph/cli-renderer.js.map +1 -1
- package/dist/ralph/events.d.ts +10 -10
- package/dist/ralph/events.d.ts.map +1 -1
- package/dist/ralph/events.js +301 -98
- package/dist/ralph/events.js.map +1 -1
- package/dist/ralph/index.d.ts +5 -2
- package/dist/ralph/index.d.ts.map +1 -1
- package/dist/ralph/index.js +9 -3
- package/dist/ralph/index.js.map +1 -1
- package/dist/ralph/loop-errors.d.ts +83 -0
- package/dist/ralph/loop-errors.d.ts.map +1 -0
- package/dist/ralph/loop-errors.js +150 -0
- package/dist/ralph/loop-errors.js.map +1 -0
- package/dist/ralph/subagent.d.ts +94 -0
- package/dist/ralph/subagent.d.ts.map +1 -0
- package/dist/ralph/subagent.js +193 -0
- package/dist/ralph/subagent.js.map +1 -0
- package/dist/ralph/wrap-up.d.ts +125 -0
- package/dist/ralph/wrap-up.d.ts.map +1 -0
- package/dist/ralph/wrap-up.js +270 -0
- package/dist/ralph/wrap-up.js.map +1 -0
- package/dist/schema/batch.d.ts +97 -0
- package/dist/schema/batch.d.ts.map +1 -0
- package/dist/schema/batch.js +24 -0
- package/dist/schema/batch.js.map +1 -0
- package/dist/schema/common.d.ts +8 -2
- package/dist/schema/common.d.ts.map +1 -1
- package/dist/schema/common.js +42 -31
- package/dist/schema/common.js.map +1 -1
- package/dist/schema/inbox.d.ts +12 -12
- package/dist/schema/inbox.js +4 -4
- package/dist/schema/inbox.js.map +1 -1
- package/dist/schema/index.d.ts +8 -5
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +8 -5
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/meta.d.ts +1454 -27
- package/dist/schema/meta.d.ts.map +1 -1
- package/dist/schema/meta.js +198 -21
- package/dist/schema/meta.js.map +1 -1
- package/dist/schema/plan.d.ts +285 -0
- package/dist/schema/plan.d.ts.map +1 -0
- package/dist/schema/plan.js +81 -0
- package/dist/schema/plan.js.map +1 -0
- package/dist/schema/spec.d.ts +72 -33
- package/dist/schema/spec.d.ts.map +1 -1
- package/dist/schema/spec.js +22 -9
- package/dist/schema/spec.js.map +1 -1
- package/dist/schema/task.d.ts +172 -161
- package/dist/schema/task.d.ts.map +1 -1
- package/dist/schema/task.js +21 -12
- package/dist/schema/task.js.map +1 -1
- package/dist/schema/triage.d.ts +266 -0
- package/dist/schema/triage.d.ts.map +1 -0
- package/dist/schema/triage.js +134 -0
- package/dist/schema/triage.js.map +1 -0
- package/dist/sessions/index.d.ts +2 -2
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +3 -3
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/store.d.ts +241 -1
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +810 -31
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +10 -10
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +10 -9
- package/dist/sessions/types.js.map +1 -1
- package/dist/strings/errors.d.ts +55 -0
- package/dist/strings/errors.d.ts.map +1 -1
- package/dist/strings/errors.js +138 -106
- package/dist/strings/errors.js.map +1 -1
- package/dist/strings/guidance.d.ts.map +1 -1
- package/dist/strings/guidance.js +16 -16
- package/dist/strings/guidance.js.map +1 -1
- package/dist/strings/index.d.ts +4 -4
- package/dist/strings/index.d.ts.map +1 -1
- package/dist/strings/index.js +4 -4
- package/dist/strings/index.js.map +1 -1
- package/dist/strings/labels.d.ts +4 -0
- package/dist/strings/labels.d.ts.map +1 -1
- package/dist/strings/labels.js +45 -41
- package/dist/strings/labels.js.map +1 -1
- package/dist/strings/validation.d.ts.map +1 -1
- package/dist/strings/validation.js +71 -71
- package/dist/strings/validation.js.map +1 -1
- package/dist/triage/actions.d.ts +27 -0
- package/dist/triage/actions.d.ts.map +1 -0
- package/dist/triage/actions.js +95 -0
- package/dist/triage/actions.js.map +1 -0
- package/dist/triage/constants.d.ts +6 -0
- package/dist/triage/constants.d.ts.map +1 -0
- package/dist/triage/constants.js +7 -0
- package/dist/triage/constants.js.map +1 -0
- package/dist/triage/index.d.ts +3 -0
- package/dist/triage/index.d.ts.map +1 -0
- package/dist/triage/index.js +3 -0
- package/dist/triage/index.js.map +1 -0
- package/dist/utils/commit.d.ts +1 -1
- package/dist/utils/commit.d.ts.map +1 -1
- package/dist/utils/commit.js +28 -26
- package/dist/utils/commit.js.map +1 -1
- package/dist/utils/git.d.ts +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +40 -38
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/grep.js +11 -11
- package/dist/utils/grep.js.map +1 -1
- package/dist/utils/index.d.ts +7 -7
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +10 -10
- package/dist/utils/time.js.map +1 -1
- package/package.json +28 -5
- package/plugin/.claude-plugin/marketplace.json +17 -0
- package/plugin/.claude-plugin/plugin.json +5 -0
- package/plugin/plugins/kspec/skills/create-workflow/SKILL.md +235 -0
- package/plugin/plugins/kspec/skills/help/SKILL.md +42 -0
- package/plugin/plugins/kspec/skills/observations/SKILL.md +143 -0
- package/plugin/plugins/kspec/skills/plan/SKILL.md +343 -0
- package/plugin/plugins/kspec/skills/reflect/SKILL.md +161 -0
- package/plugin/plugins/kspec/skills/review/SKILL.md +193 -0
- package/plugin/plugins/kspec/skills/task-work/SKILL.md +303 -0
- package/plugin/plugins/kspec/skills/triage/SKILL.md +206 -0
- package/plugin/plugins/kspec/skills/triage/docs/automation.md +120 -0
- package/plugin/plugins/kspec/skills/triage/docs/inbox.md +144 -0
- package/plugin/plugins/kspec/skills/triage/docs/observations.md +85 -0
- package/plugin/plugins/kspec/skills/triage-automation/SKILL.md +140 -0
- package/plugin/plugins/kspec/skills/triage-inbox/SKILL.md +232 -0
- package/plugin/plugins/kspec/skills/writing-specs/SKILL.md +340 -0
- package/templates/agents-sections/01-quick-start.md +22 -0
- package/templates/agents-sections/02-shadow-branch.md +34 -0
- package/templates/agents-sections/03-task-lifecycle.md +48 -0
- package/templates/agents-sections/04-pr-workflow.md +17 -0
- package/templates/agents-sections/05-commit-convention.md +27 -0
- package/templates/agents-sections/06-ralph-loop.md +45 -0
- package/templates/hooks/pre-commit +34 -0
- package/templates/skills/create-workflow/SKILL.md +228 -0
- package/templates/skills/help/SKILL.md +37 -0
- package/templates/skills/manifest.yaml +60 -0
- package/templates/skills/observations/SKILL.md +137 -0
- package/templates/skills/plan/SKILL.md +336 -0
- package/templates/skills/reflect/SKILL.md +155 -0
- package/templates/skills/review/SKILL.md +186 -0
- package/templates/skills/task-work/SKILL.md +296 -0
- package/templates/skills/triage/SKILL.md +199 -0
- package/templates/skills/triage/docs/automation.md +120 -0
- package/templates/skills/triage/docs/inbox.md +144 -0
- package/templates/skills/triage/docs/observations.md +85 -0
- package/templates/skills/triage-automation/SKILL.md +134 -0
- package/templates/skills/triage-inbox/SKILL.md +225 -0
- package/templates/skills/writing-specs/SKILL.md +333 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-work
|
|
3
|
+
description: Structured task lifecycle — start, work, note, submit, complete.
|
|
4
|
+
Fix cycle handling, scope management, loop mode for automation, and quality
|
|
5
|
+
gates.
|
|
6
|
+
---
|
|
7
|
+
<!-- kspec-managed -->
|
|
8
|
+
# Task Work
|
|
9
|
+
|
|
10
|
+
Structured workflow for working on tasks. Full lifecycle from start through PR merge.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Starting work on a ready task
|
|
15
|
+
- Continuing in-progress or needs_work tasks
|
|
16
|
+
- Ensuring consistent task lifecycle with notes and audit trail
|
|
17
|
+
|
|
18
|
+
**Not for:** Spec creation (use `/kspec:writing-specs`), plan translation (use `/kspec:plan`), or triage (use `/kspec:triage`).
|
|
19
|
+
|
|
20
|
+
## Inherit Existing Work First
|
|
21
|
+
|
|
22
|
+
Before starting new work, check for existing work:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
kspec session start # Shows active work at the top
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Priority order:
|
|
29
|
+
1. **needs_work** — Fix cycle: address review feedback (highest priority)
|
|
30
|
+
2. **in_progress** — Continue work already started
|
|
31
|
+
3. **ready (pending)** — New work to start
|
|
32
|
+
|
|
33
|
+
Always inherit existing work unless explicitly told otherwise. This prevents orphaned tasks.
|
|
34
|
+
|
|
35
|
+
## Task Lifecycle
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
pending → in_progress → pending_review → completed
|
|
39
|
+
↓ ↓
|
|
40
|
+
blocked needs_work
|
|
41
|
+
(→ in_progress → pending_review)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
| Command | Transition | When |
|
|
45
|
+
|---------|-----------|------|
|
|
46
|
+
| `kspec task start @ref` | → in_progress | Beginning work |
|
|
47
|
+
| `kspec task submit @ref` | → pending_review | Code done, PR created |
|
|
48
|
+
| `kspec task complete @ref --reason "..."` | → completed | PR merged |
|
|
49
|
+
| `kspec task block @ref --reason "..."` | → blocked | External blocker |
|
|
50
|
+
|
|
51
|
+
## Workflow Steps
|
|
52
|
+
|
|
53
|
+
### 1. Choose Task
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
kspec tasks ready # All ready tasks
|
|
57
|
+
kspec tasks ready --eligible # Automation-eligible only (loop mode)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 2. Verify Work Is Needed
|
|
61
|
+
|
|
62
|
+
Before starting, check if work is already done:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Check git history
|
|
66
|
+
git log --oneline --grep="feature-name"
|
|
67
|
+
git log --oneline -- path/to/relevant/files
|
|
68
|
+
|
|
69
|
+
# Check existing implementation
|
|
70
|
+
kspec item get @spec-ref # View spec and ACs
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
If already implemented: verify tests pass, AC coverage exists, then `kspec task complete @ref --reason "Already implemented"`.
|
|
74
|
+
|
|
75
|
+
**Notes are context, not proof.** If a task has notes saying "already done" — verify independently. Run tests, check code, validate against ACs. If a task is in the ready queue, there's a reason.
|
|
76
|
+
|
|
77
|
+
### 3. Start Task
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
kspec task start @ref
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 4. Work and Note
|
|
84
|
+
|
|
85
|
+
Read all ACs (own + trait) before implementing:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
kspec item get @spec-ref # Shows own ACs AND inherited trait ACs
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Add notes during work, not just at the end:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Good: explains decisions and context
|
|
95
|
+
kspec task note @ref "Using retry with exponential backoff. Chose 3 max retries based on API rate limits."
|
|
96
|
+
|
|
97
|
+
# Bad: no context
|
|
98
|
+
kspec task note @ref "Done"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Note when you:
|
|
102
|
+
- Discover something unexpected
|
|
103
|
+
- Make a design decision
|
|
104
|
+
- Encounter a blocker
|
|
105
|
+
- Complete a significant piece
|
|
106
|
+
|
|
107
|
+
### 5. Commit
|
|
108
|
+
|
|
109
|
+
Include task and spec trailers:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
feat: add user authentication
|
|
113
|
+
|
|
114
|
+
Implemented JWT-based auth with refresh tokens.
|
|
115
|
+
|
|
116
|
+
Task: @task-add-auth
|
|
117
|
+
Spec: @auth-feature
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Trailers enable `kspec log @ref` to find related commits.
|
|
121
|
+
|
|
122
|
+
### 6. Local Review
|
|
123
|
+
|
|
124
|
+
Run quality checks before submitting. Verify:
|
|
125
|
+
|
|
126
|
+
- **Own AC coverage** — Each spec AC has a test annotated `// AC: @spec-ref ac-N`
|
|
127
|
+
- **Trait AC coverage** — Each inherited trait AC has a test annotated `// AC: @trait-slug ac-N`
|
|
128
|
+
- **Tests pass** — Full test suite, not just new tests
|
|
129
|
+
- **Code quality** — Matches existing patterns, no duplicated utilities
|
|
130
|
+
- **No regressions** — Existing tests still pass
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
kspec validate # Reports uncovered trait ACs as warnings
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 7. Submit Task
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
kspec task submit @ref
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Moves task to `pending_review`. Create PR after submitting.
|
|
143
|
+
|
|
144
|
+
### 8. Complete Task
|
|
145
|
+
|
|
146
|
+
After PR is merged:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
kspec task complete @ref --reason "Merged in PR #N. Summary of what was done."
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Fix Cycle
|
|
153
|
+
|
|
154
|
+
When inheriting a `needs_work` task:
|
|
155
|
+
|
|
156
|
+
1. **Find the PR** — Check for review comments
|
|
157
|
+
```bash
|
|
158
|
+
gh pr list --search "Task: @task-ref" --json number,url
|
|
159
|
+
gh api repos/{owner}/{repo}/pulls/{number}/comments --jq '.[] | {path, line, body}'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
2. **Fix findings** — Address MUST-FIX and SHOULD-FIX items
|
|
163
|
+
|
|
164
|
+
3. **Push fixes** — Commit with descriptive message
|
|
165
|
+
```bash
|
|
166
|
+
git add <files> && git commit -m "fix: address review feedback
|
|
167
|
+
|
|
168
|
+
Task: @task-slug"
|
|
169
|
+
git push
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
4. **Re-submit** — `kspec task submit @ref` (back to pending_review)
|
|
173
|
+
|
|
174
|
+
You do NOT merge in a fix cycle. The reviewer handles merge decisions.
|
|
175
|
+
|
|
176
|
+
## Scope Management
|
|
177
|
+
|
|
178
|
+
### What's In Scope
|
|
179
|
+
|
|
180
|
+
Tasks describe expected outcomes, not rigid boundaries:
|
|
181
|
+
|
|
182
|
+
- **Tests need implementation?** Implementing missing functionality is in scope — the goal is verified behavior
|
|
183
|
+
- **Implementation needs tests?** Proving it works is always in scope
|
|
184
|
+
|
|
185
|
+
### When to Expand vs Escalate
|
|
186
|
+
|
|
187
|
+
**Expand** (do it yourself):
|
|
188
|
+
- Additional work is clearly implied by the goal
|
|
189
|
+
- Proportional to the original task
|
|
190
|
+
- You have the context
|
|
191
|
+
|
|
192
|
+
**Escalate** (capture separately):
|
|
193
|
+
- Scope expansion is major
|
|
194
|
+
- Uncertain about the right approach
|
|
195
|
+
- Outside your task's domain
|
|
196
|
+
|
|
197
|
+
**When you notice something outside your task:** Capture it separately (`kspec inbox add` or `kspec task note`). Don't fix it inline — even small detours compound into drift.
|
|
198
|
+
|
|
199
|
+
## AC Test Annotations
|
|
200
|
+
|
|
201
|
+
Link tests to acceptance criteria:
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
// AC: @spec-item ac-N
|
|
205
|
+
it('should validate input', () => { ... });
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
# AC: @spec-item ac-N
|
|
210
|
+
def test_validates_input():
|
|
211
|
+
...
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Every AC should have at least one test with this annotation.
|
|
215
|
+
|
|
216
|
+
## Implementation Quality
|
|
217
|
+
|
|
218
|
+
Before submitting:
|
|
219
|
+
|
|
220
|
+
- **Search for existing utilities** — Don't duplicate helpers that already exist
|
|
221
|
+
- **Match neighboring file style** — Naming conventions, error handling, imports
|
|
222
|
+
- **Run full test suite** — Not just your new tests
|
|
223
|
+
- **Validate** — `kspec validate` for spec alignment
|
|
224
|
+
|
|
225
|
+
## Loop Mode
|
|
226
|
+
|
|
227
|
+
Autonomous task execution without human confirmation.
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
kspec tasks ready --eligible # Only automation-eligible tasks
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Task Selection Priority
|
|
234
|
+
|
|
235
|
+
1. `needs_work` — Fix review feedback
|
|
236
|
+
2. `in_progress` — Continue existing work
|
|
237
|
+
3. Tasks that unblock others
|
|
238
|
+
4. Highest priority ready task
|
|
239
|
+
|
|
240
|
+
### Key Behaviors
|
|
241
|
+
|
|
242
|
+
- Verify work is needed before starting (prevent duplicates)
|
|
243
|
+
- Decisions auto-resolve without prompts
|
|
244
|
+
- PR review handled externally (not this workflow)
|
|
245
|
+
- All actions are logged and auditable
|
|
246
|
+
|
|
247
|
+
### Blocking Rules
|
|
248
|
+
|
|
249
|
+
**Block only for genuine external blockers:**
|
|
250
|
+
- Human architectural decision needed
|
|
251
|
+
- Spec clarification required
|
|
252
|
+
- External dependency unavailable
|
|
253
|
+
- Formal `depends_on` blocker
|
|
254
|
+
|
|
255
|
+
**Do NOT block for:**
|
|
256
|
+
- Task seems complex (do the work)
|
|
257
|
+
- Tests are failing (fix them)
|
|
258
|
+
- Service needs running (start it)
|
|
259
|
+
|
|
260
|
+
After blocking:
|
|
261
|
+
```bash
|
|
262
|
+
kspec task block @ref --reason "Reason..."
|
|
263
|
+
kspec tasks ready --eligible # Check for other work
|
|
264
|
+
# If tasks exist: work on the next one
|
|
265
|
+
# If empty: stop responding (ralph auto-exits)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Turn Completion
|
|
269
|
+
|
|
270
|
+
After creating a PR, **stop responding**. Ralph continues automatically — it checks for remaining eligible tasks and exits the loop when none remain.
|
|
271
|
+
|
|
272
|
+
**Do NOT call `end-loop`** after creating a PR. That ends ALL remaining iterations. It's a rare escape hatch for when work is stalling across multiple iterations.
|
|
273
|
+
|
|
274
|
+
## Command Reference
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
# Task lifecycle
|
|
278
|
+
kspec task start @ref
|
|
279
|
+
kspec task note @ref "..."
|
|
280
|
+
kspec task submit @ref
|
|
281
|
+
kspec task complete @ref --reason "..."
|
|
282
|
+
kspec task block @ref --reason "..."
|
|
283
|
+
|
|
284
|
+
# Task discovery
|
|
285
|
+
kspec tasks ready
|
|
286
|
+
kspec tasks ready --eligible
|
|
287
|
+
kspec task get @ref
|
|
288
|
+
|
|
289
|
+
# Validation
|
|
290
|
+
kspec validate
|
|
291
|
+
kspec validate --alignment
|
|
292
|
+
|
|
293
|
+
# Session context
|
|
294
|
+
kspec session start
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Integration
|
|
298
|
+
|
|
299
|
+
- **`/kspec:writing-specs`** — Create specs before deriving tasks
|
|
300
|
+
- **`/kspec:plan`** — Plans create specs that become tasks
|
|
301
|
+
- **`/kspec:review`** — Review checks AC coverage and code quality
|
|
302
|
+
- **`/kspec:observations`** — Capture friction found during task work
|
|
303
|
+
- **`/kspec:reflect`** — Session reflection after completing tasks
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: triage
|
|
3
|
+
description: Triage inbox items systematically. Records decisions with audit
|
|
4
|
+
trail, then executes actions. Supports inbox, observations, and automation
|
|
5
|
+
eligibility triage.
|
|
6
|
+
---
|
|
7
|
+
<!-- kspec-managed -->
|
|
8
|
+
# Triage
|
|
9
|
+
|
|
10
|
+
Systematically process items: inbox, observations, or automation eligibility.
|
|
11
|
+
|
|
12
|
+
## Focus Modes
|
|
13
|
+
|
|
14
|
+
Use `/triage <mode>` to focus on a specific area:
|
|
15
|
+
|
|
16
|
+
| Mode | Purpose | Documentation |
|
|
17
|
+
|------|---------|---------------|
|
|
18
|
+
| `inbox` | Process inbox items → specs/tasks | [docs/inbox.md](docs/inbox.md) |
|
|
19
|
+
| `observations` | Process pending observations | [docs/observations.md](docs/observations.md) |
|
|
20
|
+
| `automation` | Assess task automation eligibility | [docs/automation.md](docs/automation.md) |
|
|
21
|
+
|
|
22
|
+
Without a mode, follow the full triage session pattern below.
|
|
23
|
+
|
|
24
|
+
## Core Concept: Record → Act
|
|
25
|
+
|
|
26
|
+
Triage uses a **two-step pattern** that separates decision-making from execution:
|
|
27
|
+
|
|
28
|
+
1. **Record** the decision (what to do + why)
|
|
29
|
+
2. **Act** on the decision (execute it)
|
|
30
|
+
|
|
31
|
+
This separation enables review, override, and audit trails.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Step 1: Record what you want to do
|
|
35
|
+
kspec triage record @inbox-ref --action promote --reasoning "Clear feature request"
|
|
36
|
+
|
|
37
|
+
# Step 2: Execute the decision
|
|
38
|
+
kspec triage act @triage-ref
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Actions
|
|
42
|
+
|
|
43
|
+
| Action | What `act` does |
|
|
44
|
+
|--------|-----------------|
|
|
45
|
+
| `promote` | Creates task from inbox item snapshot |
|
|
46
|
+
| `delete` | Deletes the inbox item |
|
|
47
|
+
| `defer` | Records deferral, no side effect |
|
|
48
|
+
| `spec-gap` | Creates observation tagged spec-gap |
|
|
49
|
+
| `duplicate` | Deletes the inbox item |
|
|
50
|
+
|
|
51
|
+
### Lifecycle
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
record (with action) override (optional) act
|
|
55
|
+
→ triaged → triaged → acted_on
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Full Session Pattern
|
|
59
|
+
|
|
60
|
+
1. **Get context**
|
|
61
|
+
```bash
|
|
62
|
+
kspec session start --full
|
|
63
|
+
kspec inbox list
|
|
64
|
+
kspec meta observations --pending-resolution
|
|
65
|
+
kspec tasks assess automation
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
2. **Present overview to user**
|
|
69
|
+
- Inbox items by category
|
|
70
|
+
- Pending observations by type
|
|
71
|
+
- Unassessed tasks needing triage
|
|
72
|
+
|
|
73
|
+
3. **Ask which focus area**
|
|
74
|
+
- Inbox items
|
|
75
|
+
- Observations
|
|
76
|
+
- Automation eligibility
|
|
77
|
+
|
|
78
|
+
4. **Process that focus area**
|
|
79
|
+
- Use the relevant sub-document for guidance
|
|
80
|
+
|
|
81
|
+
5. **Repeat or stop** when user indicates
|
|
82
|
+
|
|
83
|
+
## Quick Start by Mode
|
|
84
|
+
|
|
85
|
+
### `/triage inbox`
|
|
86
|
+
|
|
87
|
+
Process inbox items using the record → act pattern. See [docs/inbox.md](docs/inbox.md).
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
kspec inbox list
|
|
91
|
+
|
|
92
|
+
# Interactive mode: triage all untriaged items one by one
|
|
93
|
+
kspec triage start
|
|
94
|
+
|
|
95
|
+
# Or record decisions individually
|
|
96
|
+
kspec triage record @ref --action promote --reasoning "Clear feature need"
|
|
97
|
+
kspec triage record @ref --action delete --reasoning "Outdated"
|
|
98
|
+
kspec triage record @ref --action defer --reasoning "Not ready yet"
|
|
99
|
+
kspec triage record @ref --action spec-gap --reasoning "Missing spec coverage"
|
|
100
|
+
kspec triage record @ref --action duplicate --reasoning "Covered by @other-ref"
|
|
101
|
+
|
|
102
|
+
# Then execute recorded decisions
|
|
103
|
+
kspec triage act @triage-ref
|
|
104
|
+
kspec triage act @triage-ref --dry-run # Preview first
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### `/triage observations`
|
|
108
|
+
|
|
109
|
+
Process pending observations. See [docs/observations.md](docs/observations.md).
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
kspec meta observations --pending-resolution
|
|
113
|
+
# For each: resolve, promote to task, or leave
|
|
114
|
+
kspec meta resolve @ref "Resolution notes"
|
|
115
|
+
kspec meta resolve @ref1 @ref2 "Batch resolution"
|
|
116
|
+
kspec meta observations promote @ref --title "..."
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### `/triage automation`
|
|
120
|
+
|
|
121
|
+
Assess task automation eligibility. See [docs/automation.md](docs/automation.md).
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
kspec tasks assess automation
|
|
125
|
+
# Review criteria, fix issues, or mark status
|
|
126
|
+
kspec task set @ref --automation eligible
|
|
127
|
+
kspec task set @ref --automation needs_review --reason "..."
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Triage Commands Reference
|
|
131
|
+
|
|
132
|
+
### Recording Decisions
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Record a triage decision for an inbox item
|
|
136
|
+
kspec triage record @inbox-ref --action <action> --reasoning "why"
|
|
137
|
+
kspec triage record @inbox-ref --action promote --reasoning "..." --evidence @spec-ref
|
|
138
|
+
kspec triage record @inbox-ref --action promote --reasoning "..." --json # JSON output
|
|
139
|
+
|
|
140
|
+
# Interactive mode: presents untriaged items one at a time
|
|
141
|
+
kspec triage start
|
|
142
|
+
# Ctrl+C preserves all previously committed records
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Reviewing Decisions
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# List all triage records
|
|
149
|
+
kspec triage list
|
|
150
|
+
kspec triage list --status triaged # Only pending execution
|
|
151
|
+
kspec triage list --status acted_on # Already executed
|
|
152
|
+
kspec triage list --action promote # Filter by action type
|
|
153
|
+
|
|
154
|
+
# Get details of a specific record
|
|
155
|
+
kspec triage get @triage-ref
|
|
156
|
+
|
|
157
|
+
# Export for agent handoff
|
|
158
|
+
kspec triage export --format context # Markdown context blocks
|
|
159
|
+
kspec triage export --format json # Full JSON array
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Executing and Overriding
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Execute a recorded decision
|
|
166
|
+
kspec triage act @triage-ref
|
|
167
|
+
kspec triage act @triage-ref --dry-run # Preview without executing
|
|
168
|
+
|
|
169
|
+
# Override a previous decision (preserves audit trail)
|
|
170
|
+
kspec triage override @triage-ref --action defer --reasoning "Not ready yet"
|
|
171
|
+
# Then act on the updated decision
|
|
172
|
+
kspec triage act @triage-ref
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Bulk Operations with Batch
|
|
176
|
+
|
|
177
|
+
When processing many items at once, use `kspec batch`:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Record multiple triage decisions atomically
|
|
181
|
+
kspec batch --commands '[
|
|
182
|
+
{"command":"triage record","args":{"ref":"@ref1","action":"delete","reasoning":"Stale"}},
|
|
183
|
+
{"command":"triage record","args":{"ref":"@ref2","action":"delete","reasoning":"Duplicate"}},
|
|
184
|
+
{"command":"triage record","args":{"ref":"@ref3","action":"promote","reasoning":"Clear scope"}}
|
|
185
|
+
]'
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Use `--dry-run` to preview. See `/kspec:help` for full batch documentation.
|
|
189
|
+
|
|
190
|
+
## Key Principles
|
|
191
|
+
|
|
192
|
+
- **Record before act** - Separate decisions from execution for audit trail
|
|
193
|
+
- **Ask one question at a time** - Don't batch decisions
|
|
194
|
+
- **Spec before task** - Fill spec gaps before creating tasks
|
|
195
|
+
- **AC is required** - Specs without acceptance criteria are incomplete
|
|
196
|
+
- **Use CLI, not YAML** - All changes through kspec commands
|
|
197
|
+
- **Delete freely** - Outdated items should go
|
|
198
|
+
|
|
199
|
+
## Progress Tracking
|
|
200
|
+
|
|
201
|
+
At session end, provide summary:
|
|
202
|
+
- Items triaged (recorded decisions)
|
|
203
|
+
- Actions executed (promoted, deleted, deferred, spec-gap, duplicate)
|
|
204
|
+
- Tasks created/updated
|
|
205
|
+
- Observations resolved
|
|
206
|
+
- Remaining items
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Automation Triage
|
|
2
|
+
|
|
3
|
+
Assess and prepare tasks for automation eligibility. Goal: make tasks self-contained so they can be automated.
|
|
4
|
+
|
|
5
|
+
## Philosophy
|
|
6
|
+
|
|
7
|
+
- **Eligible is the goal** - Manual-only should be the exception
|
|
8
|
+
- **Criteria are for visibility** - Help identify what's missing, not auto-approve
|
|
9
|
+
- **Fix issues, don't just assess** - Guide toward making tasks automatable
|
|
10
|
+
|
|
11
|
+
## Eligibility Criteria
|
|
12
|
+
|
|
13
|
+
A task is ready for automation when:
|
|
14
|
+
1. Has `spec_ref` pointing to resolvable spec
|
|
15
|
+
2. Spec has acceptance criteria (testable outcomes)
|
|
16
|
+
3. Task type is not `spike` (spikes output knowledge, not code)
|
|
17
|
+
|
|
18
|
+
**Having spec + ACs is necessary but not sufficient** - you must also verify the spec is appropriate and ACs are adequate for the task.
|
|
19
|
+
|
|
20
|
+
**Task type does not determine automation eligibility.** Any non-spike task can be `automation: eligible` — including design tasks, refactoring tasks, documentation tasks, etc. The `automation` field is the definitive source. Once a task is marked `eligible`, do not second-guess it based on type, title, or description.
|
|
21
|
+
|
|
22
|
+
## Workflow
|
|
23
|
+
|
|
24
|
+
### 1. Get Assessment Overview
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Show unassessed pending tasks with criteria status
|
|
28
|
+
kspec tasks assess automation
|
|
29
|
+
|
|
30
|
+
# See what auto mode would change
|
|
31
|
+
kspec tasks assess automation --auto --dry-run
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 2. Process Each Task
|
|
35
|
+
|
|
36
|
+
For each task shown:
|
|
37
|
+
|
|
38
|
+
**If spike:**
|
|
39
|
+
- Mark `manual_only` - spikes are inherently human work
|
|
40
|
+
- `kspec task set @ref --automation manual_only --reason "Spike - output is knowledge"`
|
|
41
|
+
|
|
42
|
+
**If missing spec_ref or no ACs:**
|
|
43
|
+
- Ask: "Fix now or mark for later?"
|
|
44
|
+
- **Fix now:**
|
|
45
|
+
1. Create or find appropriate spec: `kspec item add --under @parent --title "..."`
|
|
46
|
+
2. Add acceptance criteria: `kspec item ac add @spec --given "..." --when "..." --then "..."`
|
|
47
|
+
3. Link task to spec: `kspec task set @ref --spec-ref @spec`
|
|
48
|
+
4. Re-assess and mark eligible if appropriate
|
|
49
|
+
- **Mark for later:**
|
|
50
|
+
- `kspec task set @ref --automation needs_review --reason "Missing spec - needs spec creation"`
|
|
51
|
+
|
|
52
|
+
**If has spec + ACs:**
|
|
53
|
+
- Review for eligibility:
|
|
54
|
+
- Is the spec appropriate for this task?
|
|
55
|
+
- Are the ACs adequate and testable?
|
|
56
|
+
- Does the task have sufficient context?
|
|
57
|
+
- If yes: `kspec task set @ref --automation eligible`
|
|
58
|
+
- If no: Fix issues or mark `needs_review` with specific reason
|
|
59
|
+
|
|
60
|
+
### 3. Batch Processing with Auto Mode
|
|
61
|
+
|
|
62
|
+
For fast triage of obvious cases:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Apply auto mode (spikes → manual_only, missing → needs_review)
|
|
66
|
+
kspec tasks assess automation --auto
|
|
67
|
+
|
|
68
|
+
# Then manually review the "review_for_eligible" tasks
|
|
69
|
+
kspec tasks ready --unassessed
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Auto mode is conservative:
|
|
73
|
+
- Spikes → `manual_only`
|
|
74
|
+
- Missing spec/ACs → `needs_review`
|
|
75
|
+
- Has spec + ACs → **NOT auto-marked** (requires review)
|
|
76
|
+
|
|
77
|
+
## Quick Commands
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Assessment
|
|
81
|
+
kspec tasks assess automation # Show unassessed with criteria
|
|
82
|
+
kspec tasks assess automation @ref # Single task
|
|
83
|
+
kspec tasks assess automation --all # Include already-assessed
|
|
84
|
+
kspec tasks assess automation --auto # Apply obvious cases
|
|
85
|
+
kspec tasks assess automation --dry-run # Preview changes
|
|
86
|
+
|
|
87
|
+
# Setting automation status
|
|
88
|
+
kspec task set @ref --automation eligible
|
|
89
|
+
kspec task set @ref --automation needs_review --reason "Why"
|
|
90
|
+
kspec task set @ref --automation manual_only --reason "Why"
|
|
91
|
+
kspec task set @ref --no-automation # Clear to unassessed
|
|
92
|
+
|
|
93
|
+
# Filtering tasks
|
|
94
|
+
kspec tasks ready --unassessed # Tasks needing assessment
|
|
95
|
+
kspec tasks ready --eligible # Automation-ready tasks
|
|
96
|
+
kspec tasks ready --needs-review # Tasks needing human triage
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Assessment Output
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
@task-slug "Task title"
|
|
103
|
+
spec_ref: ✓ @feature-slug
|
|
104
|
+
has_acs: ✓ 3 acceptance criteria
|
|
105
|
+
not_spike: ✓ type: task
|
|
106
|
+
→ review_for_eligible (verify spec/AC adequacy)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
| Recommendation | Meaning | Auto Mode Action |
|
|
110
|
+
|----------------|---------|------------------|
|
|
111
|
+
| `review_for_eligible` | Passes criteria, needs review | No change (manual review) |
|
|
112
|
+
| `needs_review` | Missing spec or ACs | Sets `needs_review` with reason |
|
|
113
|
+
| `manual_only` | Spike task | Sets `manual_only` |
|
|
114
|
+
|
|
115
|
+
## Key Principles
|
|
116
|
+
|
|
117
|
+
- **CLI doesn't auto-mark eligible** - Requires agent/human review
|
|
118
|
+
- **Agents CAN mark eligible** - When reviewing based on user instruction
|
|
119
|
+
- **Add notes when setting status** - Document the "why"
|
|
120
|
+
- **Re-assess after fixes** - After adding spec/ACs, check again
|