@kynetic-ai/spec 0.10.0 → 0.12.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 +55 -455
- package/dist/agent-runtime/bootstrap.d.ts +31 -0
- package/dist/agent-runtime/bootstrap.d.ts.map +1 -0
- package/dist/agent-runtime/bootstrap.js +302 -0
- package/dist/agent-runtime/bootstrap.js.map +1 -0
- package/dist/agent-runtime/dispatch.d.ts +150 -10
- package/dist/agent-runtime/dispatch.d.ts.map +1 -1
- package/dist/agent-runtime/dispatch.js +1248 -244
- package/dist/agent-runtime/dispatch.js.map +1 -1
- package/dist/agent-runtime/invocation.d.ts +28 -1
- package/dist/agent-runtime/invocation.d.ts.map +1 -1
- package/dist/agent-runtime/invocation.js +172 -60
- package/dist/agent-runtime/invocation.js.map +1 -1
- package/dist/agent-runtime/prompts.d.ts +9 -0
- package/dist/agent-runtime/prompts.d.ts.map +1 -1
- package/dist/agent-runtime/prompts.js +42 -7
- package/dist/agent-runtime/prompts.js.map +1 -1
- package/dist/agent-runtime/session-event-accumulator.d.ts +83 -0
- package/dist/agent-runtime/session-event-accumulator.d.ts.map +1 -0
- package/dist/agent-runtime/session-event-accumulator.js +203 -0
- package/dist/agent-runtime/session-event-accumulator.js.map +1 -0
- package/dist/agent-runtime/session-event-types.d.ts +67 -0
- package/dist/agent-runtime/session-event-types.d.ts.map +1 -0
- package/dist/agent-runtime/session-event-types.js +13 -0
- package/dist/agent-runtime/session-event-types.js.map +1 -0
- package/dist/agent-runtime/workspace.d.ts +244 -0
- package/dist/agent-runtime/workspace.d.ts.map +1 -0
- package/dist/agent-runtime/workspace.js +2025 -0
- package/dist/agent-runtime/workspace.js.map +1 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/adapters.js +58 -13
- package/dist/agents/adapters.js.map +1 -1
- package/dist/agents/spawner.d.ts +8 -0
- package/dist/agents/spawner.d.ts.map +1 -1
- package/dist/agents/spawner.js +25 -3
- package/dist/agents/spawner.js.map +1 -1
- package/dist/cli/batch-exec.js +1 -1
- package/dist/cli/batch-exec.js.map +1 -1
- package/dist/cli/command-annotations.d.ts +15 -3
- package/dist/cli/command-annotations.d.ts.map +1 -1
- package/dist/cli/command-annotations.js +23 -3
- package/dist/cli/command-annotations.js.map +1 -1
- package/dist/cli/commands/agent.d.ts +2 -0
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +144 -27
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +5 -5
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +118 -3
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +8 -6
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +20 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/item.d.ts.map +1 -1
- package/dist/cli/commands/item.js +205 -47
- package/dist/cli/commands/item.js.map +1 -1
- package/dist/cli/commands/log.d.ts.map +1 -1
- package/dist/cli/commands/log.js +24 -10
- package/dist/cli/commands/log.js.map +1 -1
- package/dist/cli/commands/meta.d.ts.map +1 -1
- package/dist/cli/commands/meta.js +10 -1
- package/dist/cli/commands/meta.js.map +1 -1
- package/dist/cli/commands/plan-import.d.ts +3 -3
- package/dist/cli/commands/plan-import.d.ts.map +1 -1
- package/dist/cli/commands/plan-import.js +213 -528
- package/dist/cli/commands/plan-import.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +533 -83
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/review.d.ts +14 -0
- package/dist/cli/commands/review.d.ts.map +1 -0
- package/dist/cli/commands/review.js +1142 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +1 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +33 -10
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/session/checkpoint.d.ts +2 -4
- package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
- package/dist/cli/commands/session/checkpoint.js +6 -107
- package/dist/cli/commands/session/checkpoint.js.map +1 -1
- package/dist/cli/commands/session/commands.d.ts.map +1 -1
- package/dist/cli/commands/session/commands.js +33 -23
- package/dist/cli/commands/session/commands.js.map +1 -1
- package/dist/cli/commands/session/compact.js +4 -4
- package/dist/cli/commands/session/compact.js.map +1 -1
- package/dist/cli/commands/session/create.js +2 -2
- package/dist/cli/commands/session/create.js.map +1 -1
- package/dist/cli/commands/session/format.d.ts.map +1 -1
- package/dist/cli/commands/session/format.js +1 -6
- package/dist/cli/commands/session/format.js.map +1 -1
- package/dist/cli/commands/session/log.d.ts +32 -7
- package/dist/cli/commands/session/log.d.ts.map +1 -1
- package/dist/cli/commands/session/log.js +166 -60
- package/dist/cli/commands/session/log.js.map +1 -1
- package/dist/cli/commands/session/migrate.d.ts +9 -0
- package/dist/cli/commands/session/migrate.d.ts.map +1 -0
- package/dist/cli/commands/session/migrate.js +46 -0
- package/dist/cli/commands/session/migrate.js.map +1 -0
- package/dist/cli/commands/session/stale-close.d.ts.map +1 -1
- package/dist/cli/commands/session/stale-close.js +5 -8
- package/dist/cli/commands/session/stale-close.js.map +1 -1
- package/dist/cli/commands/session/types.d.ts +1 -1
- package/dist/cli/commands/session/types.d.ts.map +1 -1
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +287 -257
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/shadow.d.ts.map +1 -1
- package/dist/cli/commands/shadow.js +147 -31
- package/dist/cli/commands/shadow.js.map +1 -1
- package/dist/cli/commands/skill-crud.d.ts +7 -0
- package/dist/cli/commands/skill-crud.d.ts.map +1 -1
- package/dist/cli/commands/skill-crud.js +41 -18
- package/dist/cli/commands/skill-crud.js.map +1 -1
- package/dist/cli/commands/skill-diff.d.ts.map +1 -1
- package/dist/cli/commands/skill-diff.js +29 -3
- package/dist/cli/commands/skill-diff.js.map +1 -1
- package/dist/cli/commands/skill-install.d.ts.map +1 -1
- package/dist/cli/commands/skill-install.js +5 -4
- package/dist/cli/commands/skill-install.js.map +1 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +359 -49
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/trait.d.ts.map +1 -1
- package/dist/cli/commands/trait.js +5 -27
- package/dist/cli/commands/trait.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +113 -52
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +69 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +26 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +108 -1
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/sync-mode.d.ts +44 -0
- package/dist/cli/sync-mode.d.ts.map +1 -0
- package/dist/cli/sync-mode.js +64 -0
- package/dist/cli/sync-mode.js.map +1 -0
- package/dist/daemon/middleware/project-context.ts +25 -7
- package/dist/daemon/project-context.ts +18 -0
- package/dist/daemon/routes/agent-dispatch.ts +107 -23
- package/dist/daemon/routes/aggregation.ts +184 -0
- package/dist/daemon/routes/inbox.ts +5 -0
- package/dist/daemon/routes/items.ts +167 -0
- package/dist/daemon/routes/meta.ts +141 -1
- package/dist/daemon/routes/plans.ts +147 -0
- package/dist/daemon/routes/projects.ts +28 -6
- package/dist/daemon/routes/ref-resolution.ts +119 -0
- package/dist/daemon/routes/refs.ts +42 -0
- package/dist/daemon/routes/session-related.ts +140 -0
- package/dist/daemon/routes/sessions.ts +581 -0
- package/dist/daemon/routes/tasks.ts +257 -2
- package/dist/daemon/routes/triage.ts +40 -1
- package/dist/daemon/routes/validation.ts +1 -1
- package/dist/daemon/server.ts +165 -50
- package/dist/daemon/session-sync.ts +11 -0
- package/dist/daemon/shadow-sync.ts +11 -0
- package/dist/daemon/watcher.ts +56 -5
- package/dist/daemon/websocket/project-resolution.ts +77 -0
- package/dist/export/json.d.ts.map +1 -1
- package/dist/export/json.js +104 -1
- package/dist/export/json.js.map +1 -1
- package/dist/export/types.d.ts +52 -1
- package/dist/export/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/parser/agent-detection.d.ts +1 -1
- package/dist/parser/agent-detection.d.ts.map +1 -1
- package/dist/parser/agent-detection.js +10 -0
- package/dist/parser/agent-detection.js.map +1 -1
- package/dist/parser/alignment.d.ts.map +1 -1
- package/dist/parser/alignment.js +4 -2
- package/dist/parser/alignment.js.map +1 -1
- package/dist/parser/config.d.ts +397 -2
- package/dist/parser/config.d.ts.map +1 -1
- package/dist/parser/config.js +125 -3
- package/dist/parser/config.js.map +1 -1
- package/dist/parser/dispatch-workspaces.d.ts +18 -0
- package/dist/parser/dispatch-workspaces.d.ts.map +1 -0
- package/dist/parser/dispatch-workspaces.js +209 -0
- package/dist/parser/dispatch-workspaces.js.map +1 -0
- package/dist/parser/doctor.d.ts.map +1 -1
- package/dist/parser/doctor.js +27 -8
- package/dist/parser/doctor.js.map +1 -1
- package/dist/parser/file-lock.d.ts.map +1 -1
- package/dist/parser/file-lock.js +9 -2
- package/dist/parser/file-lock.js.map +1 -1
- package/dist/parser/index.d.ts +6 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +6 -0
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/plans.d.ts.map +1 -1
- package/dist/parser/plans.js +1 -0
- package/dist/parser/plans.js.map +1 -1
- package/dist/parser/refs.d.ts +8 -1
- package/dist/parser/refs.d.ts.map +1 -1
- package/dist/parser/refs.js +27 -1
- package/dist/parser/refs.js.map +1 -1
- package/dist/parser/review-operations.d.ts +72 -0
- package/dist/parser/review-operations.d.ts.map +1 -0
- package/dist/parser/review-operations.js +185 -0
- package/dist/parser/review-operations.js.map +1 -0
- package/dist/parser/review-task-integration.d.ts +78 -0
- package/dist/parser/review-task-integration.d.ts.map +1 -0
- package/dist/parser/review-task-integration.js +173 -0
- package/dist/parser/review-task-integration.js.map +1 -0
- package/dist/parser/review-threads.d.ts +101 -0
- package/dist/parser/review-threads.d.ts.map +1 -0
- package/dist/parser/review-threads.js +222 -0
- package/dist/parser/review-threads.js.map +1 -0
- package/dist/parser/review-validation.d.ts +69 -0
- package/dist/parser/review-validation.d.ts.map +1 -0
- package/dist/parser/review-validation.js +207 -0
- package/dist/parser/review-validation.js.map +1 -0
- package/dist/parser/reviews.d.ts +58 -0
- package/dist/parser/reviews.d.ts.map +1 -0
- package/dist/parser/reviews.js +230 -0
- package/dist/parser/reviews.js.map +1 -0
- package/dist/parser/session-branch.d.ts +91 -0
- package/dist/parser/session-branch.d.ts.map +1 -0
- package/dist/parser/session-branch.js +565 -0
- package/dist/parser/session-branch.js.map +1 -0
- package/dist/parser/session-sync-scheduler.d.ts +53 -0
- package/dist/parser/session-sync-scheduler.d.ts.map +1 -0
- package/dist/parser/session-sync-scheduler.js +100 -0
- package/dist/parser/session-sync-scheduler.js.map +1 -0
- package/dist/parser/setup-status.d.ts +7 -1
- package/dist/parser/setup-status.d.ts.map +1 -1
- package/dist/parser/setup-status.js +104 -39
- package/dist/parser/setup-status.js.map +1 -1
- package/dist/parser/shadow-sync-scheduler.d.ts +71 -0
- package/dist/parser/shadow-sync-scheduler.d.ts.map +1 -0
- package/dist/parser/shadow-sync-scheduler.js +139 -0
- package/dist/parser/shadow-sync-scheduler.js.map +1 -0
- package/dist/parser/shadow.d.ts +121 -14
- package/dist/parser/shadow.d.ts.map +1 -1
- package/dist/parser/shadow.js +752 -27
- package/dist/parser/shadow.js.map +1 -1
- package/dist/parser/skill-render.d.ts +24 -0
- package/dist/parser/skill-render.d.ts.map +1 -1
- package/dist/parser/skill-render.js +98 -26
- package/dist/parser/skill-render.js.map +1 -1
- package/dist/parser/validate.d.ts +43 -3
- package/dist/parser/validate.d.ts.map +1 -1
- package/dist/parser/validate.js +204 -30
- package/dist/parser/validate.js.map +1 -1
- package/dist/parser/yaml.d.ts +47 -11
- package/dist/parser/yaml.d.ts.map +1 -1
- package/dist/parser/yaml.js +329 -149
- package/dist/parser/yaml.js.map +1 -1
- package/dist/review/checks.d.ts +97 -0
- package/dist/review/checks.d.ts.map +1 -0
- package/dist/review/checks.js +175 -0
- package/dist/review/checks.js.map +1 -0
- package/dist/review/index.d.ts +3 -0
- package/dist/review/index.d.ts.map +1 -0
- package/dist/review/index.js +3 -0
- package/dist/review/index.js.map +1 -0
- package/dist/review/subject-bindings.d.ts +83 -0
- package/dist/review/subject-bindings.d.ts.map +1 -0
- package/dist/review/subject-bindings.js +175 -0
- package/dist/review/subject-bindings.js.map +1 -0
- package/dist/schema/common.d.ts +26 -0
- package/dist/schema/common.d.ts.map +1 -1
- package/dist/schema/common.js +13 -0
- package/dist/schema/common.js.map +1 -1
- package/dist/schema/dispatch-workspace.d.ts +2643 -0
- package/dist/schema/dispatch-workspace.d.ts.map +1 -0
- package/dist/schema/dispatch-workspace.js +187 -0
- package/dist/schema/dispatch-workspace.js.map +1 -0
- package/dist/schema/inbox.d.ts +8 -8
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/meta.d.ts +663 -116
- package/dist/schema/meta.d.ts.map +1 -1
- package/dist/schema/meta.js +28 -0
- package/dist/schema/meta.js.map +1 -1
- package/dist/schema/plan.d.ts +30 -19
- package/dist/schema/plan.d.ts.map +1 -1
- package/dist/schema/plan.js +3 -1
- package/dist/schema/plan.js.map +1 -1
- package/dist/schema/review-records.d.ts +2676 -0
- package/dist/schema/review-records.d.ts.map +1 -0
- package/dist/schema/review-records.js +232 -0
- package/dist/schema/review-records.js.map +1 -0
- package/dist/schema/spec.d.ts +32 -14
- package/dist/schema/spec.d.ts.map +1 -1
- package/dist/schema/spec.js +5 -0
- package/dist/schema/spec.js.map +1 -1
- package/dist/schema/task.d.ts +187 -29
- package/dist/schema/task.d.ts.map +1 -1
- package/dist/schema/task.js +12 -2
- package/dist/schema/task.js.map +1 -1
- package/dist/schema/triage.d.ts +22 -22
- package/dist/sessions/cache.d.ts +119 -0
- package/dist/sessions/cache.d.ts.map +1 -0
- package/dist/sessions/cache.js +284 -0
- package/dist/sessions/cache.js.map +1 -0
- package/dist/sessions/index.d.ts +1 -0
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +2 -0
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/legacy.d.ts +77 -0
- package/dist/sessions/legacy.d.ts.map +1 -0
- package/dist/sessions/legacy.js +146 -0
- package/dist/sessions/legacy.js.map +1 -0
- package/dist/sessions/store.d.ts +115 -71
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +357 -182
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +44 -16
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +11 -2
- package/dist/sessions/types.js.map +1 -1
- package/dist/strings/errors.d.ts +32 -0
- package/dist/strings/errors.d.ts.map +1 -1
- package/dist/strings/errors.js +17 -0
- package/dist/strings/errors.js.map +1 -1
- package/dist/strings/labels.d.ts +1 -0
- package/dist/strings/labels.d.ts.map +1 -1
- package/dist/strings/labels.js +1 -0
- package/dist/strings/labels.js.map +1 -1
- package/dist/utils/activity.d.ts +101 -0
- package/dist/utils/activity.d.ts.map +1 -0
- package/dist/utils/activity.js +408 -0
- package/dist/utils/activity.js.map +1 -0
- package/dist/utils/git.d.ts +31 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +87 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/web-ui/_app/immutable/assets/0.tmlwn-Ih.css +1 -0
- package/dist/web-ui/_app/immutable/assets/9.BwwJybWx.css +1 -0
- package/dist/web-ui/_app/immutable/chunks/2KqE8gtn.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/70-t_QvE.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/AiWQj974.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B25nWFyA.js +5 -0
- package/dist/web-ui/_app/immutable/chunks/B2bcA_Q_.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B5e5HYyB.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B7-5z6eA.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B7bGmhK0.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/B8tYZKAE.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BFGAyJjD.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BG0850zf.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BG8eSzAd.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BIMxXS8I.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BSzL1fpU.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BYtjHfeq.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/{D1ArdqNb.js → Bp5pFYXL.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/BsJFsuAT.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BvpNHcD6.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/BypqA25-.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/C0w6WDm5.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/C5_PAZ0y.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CDRO15Iv.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CF1CoqD5.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CS2sa4_m.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CWUQwB9H.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CY5FDdSU.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/C_7MTDoj.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/CaAJD3dl.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/{i-XnOIX0.js → ChB5iyEL.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/ChQD-6N8.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/{BCkp8Hs8.js → CqbsoCwA.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/DCeJW50p.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DJtZNgcs.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DKIeaprD.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DLd2uVIA.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DW_subyT.js +2 -0
- package/dist/web-ui/_app/immutable/chunks/DbU6lVn0.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Dc7ZCC5m.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Dd5umPsk.js +2 -0
- package/dist/web-ui/_app/immutable/chunks/Dg_zDpDS.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Dgqu8Yuc.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DmxsPZTB.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DphTaFUB.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DqK4iHp0.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DqT6OH_u.js +2 -0
- package/dist/web-ui/_app/immutable/chunks/Ds9I9wQb.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Du5ng3u4.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/DxJw79Wi.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/GFTX8GgV.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/HNjs76Zz.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/HVMjDi4_.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/P0A_fJvS.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/T3vGWjIL.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/VTmrX9Qu.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Xvwhx_F1.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/Yyz1XMQA.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/dh5HeqUr.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/fZMteyca.js +62 -0
- package/dist/web-ui/_app/immutable/chunks/{D28BF5MJ.js → gPrj-hqC.js} +1 -1
- package/dist/web-ui/_app/immutable/chunks/htcWMiYN.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/oTsvd9y4.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/qJfLUwU4.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/xCtiO_JE.js +1 -0
- package/dist/web-ui/_app/immutable/chunks/y4GeEH6k.js +1 -0
- package/dist/web-ui/_app/immutable/entry/app.C4h_eOn6.js +2 -0
- package/dist/web-ui/_app/immutable/entry/start.CQFTf9ep.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/0.Dh1xO970.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/1.l75D3Opx.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/10.DBidBPc-.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/11.Ab0gUKWe.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/12.CMsnoxfs.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/13.D8YKuknB.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/14.DZ0aan7y.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/15.CUIKreDL.js +2 -0
- package/dist/web-ui/_app/immutable/nodes/16.BWc8--BO.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/2.CDUonbuh.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/3.Ctg3M00i.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/4.Ci-JDwbA.js +2 -0
- package/dist/web-ui/_app/immutable/nodes/5.CTyEDAq0.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/6.BTZZqsAb.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/7.BI52g_Jo.js +137 -0
- package/dist/web-ui/_app/immutable/nodes/8.3hZPaB9x.js +1 -0
- package/dist/web-ui/_app/immutable/nodes/9.DS49kvwl.js +29 -0
- package/dist/web-ui/_app/version.json +1 -1
- package/dist/web-ui/favicon-192.png +0 -0
- package/dist/web-ui/favicon-32.png +0 -0
- package/dist/web-ui/favicon.ico +0 -0
- package/dist/web-ui/index.html +14 -11
- package/package.json +14 -7
- package/plugin/.claude-plugin/marketplace.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/plugins/kspec/skills/merge/SKILL.md +127 -0
- package/plugin/plugins/kspec/skills/plan/SKILL.md +55 -26
- package/plugin/plugins/kspec/skills/review/SKILL.md +350 -133
- package/plugin/plugins/kspec/skills/task-work/SKILL.md +96 -106
- package/templates/agents-sections/04-pr-workflow.md +15 -12
- package/templates/agents-sections/06-ralph-loop.md +15 -10
- package/templates/skills/manifest.yaml +25 -7
- package/templates/skills/merge/SKILL.md +120 -0
- package/templates/skills/plan/SKILL.md +55 -26
- package/templates/skills/review/SKILL.md +346 -130
- package/templates/skills/task-work/SKILL.md +93 -103
- package/dist/web-ui/_app/immutable/assets/0.BxCxvrZR.css +0 -1
- package/dist/web-ui/_app/immutable/chunks/B-CZR0q8.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/B1IR5Su5.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/B_Cvvtc4.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/BtFaGGII.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/Bu8JVsCH.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/C87u-CNA.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/CrFkBTYp.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/D6RtLpzL.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/D7FHSgx2.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DBXrsxZQ.js +0 -2
- package/dist/web-ui/_app/immutable/chunks/Da_hHMuA.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/Do6LchSF.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DoNPtcAw.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DtUbXRZz.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DyFPRlLl.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DzAP8lRM.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/DzVXElzN.js +0 -2
- package/dist/web-ui/_app/immutable/chunks/aoPBFken.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/laxtrUO3.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/q1nIWgqB.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/sTLbk5Nm.js +0 -1
- package/dist/web-ui/_app/immutable/chunks/vwKgQu5P.js +0 -5
- package/dist/web-ui/_app/immutable/entry/app.BCwMcqnT.js +0 -2
- package/dist/web-ui/_app/immutable/entry/start.wKCQH-tt.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/0.CjGVMG74.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/1.B6_AIPan.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/2.q4oCS7Ws.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/3.rTKZf9o2.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/4.DVIDRu1d.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/5.8PtPXIOd.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/6.ZZrTemy_.js +0 -1
- package/dist/web-ui/_app/immutable/nodes/7.IP-gxCxi.js +0 -1
|
@@ -1,225 +1,441 @@
|
|
|
1
1
|
# Review
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
How to review work and use kspec review records. Covers both the reviewer perspective (creating reviews, structuring findings) and the worker perspective (reading feedback, addressing issues). Bakes in review principles, AC coverage verification, and the full review record interface.
|
|
4
4
|
|
|
5
5
|
## When to Use
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
7
|
+
- Reviewing submitted work (as reviewer)
|
|
8
|
+
- Reading and addressing review feedback (as worker)
|
|
9
|
+
- Creating or managing review records
|
|
10
|
+
- Verifying AC coverage before submitting work
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
## Two Perspectives
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
This skill serves both sides of the review process:
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
- **As a reviewer:** Create reviews, investigate code, structure findings as threads, record checks, submit verdicts
|
|
17
|
+
- **As a worker:** Read review threads, understand what's blocking, address findings, request re-review
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
# 1. Check commit messages for Task: or Spec: trailers
|
|
19
|
-
git log --format='%B' main..HEAD | grep -E '^(Task|Spec):'
|
|
19
|
+
Both perspectives use the same review record system.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
git diff main..HEAD | grep '// AC: @'
|
|
21
|
+
---
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
kspec task get @task-ref --json | jq '.spec_ref'
|
|
23
|
+
## Review Principles
|
|
26
24
|
|
|
27
|
-
|
|
28
|
-
kspec tasks list | grep -i "<keywords from changed files>"
|
|
29
|
-
```
|
|
25
|
+
### Adversarial Investigation
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
If no spec context is found after all discovery steps, skip AC coverage checks and focus on code quality and regression checks.
|
|
27
|
+
**Worker claims are hypotheses, not facts.** When a commit message says "all tests pass," verify it. When a note says "fixed the type errors," check they're actually fixed and not suppressed. Workers are not lying — but they are biased toward believing their own work is correct. Your job is to independently verify.
|
|
33
28
|
|
|
34
|
-
**
|
|
29
|
+
**Read the code before the description.** Start by reading the diff — what changed, what was added, what was removed. Form your own understanding. Only then read the task notes or PR description and compare. This prevents anchoring bias.
|
|
35
30
|
|
|
36
|
-
|
|
31
|
+
**Treat justifications as claims to verify.** "Pre-existing issue," "out of scope," "will be addressed in follow-up," "this is the standard pattern" — these require evidence, not acceptance.
|
|
37
32
|
|
|
38
|
-
|
|
33
|
+
**A clean review is valid.** Not every submission has bugs. If you investigate thoroughly and find nothing wrong, approve. Do not invent findings to justify time spent. The goal is accuracy, not a finding quota.
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
| Search by keyword | `kspec search "keyword"` |
|
|
46
|
-
| All traits | `kspec trait list` |
|
|
35
|
+
### Cognitive Biases to Counteract
|
|
36
|
+
|
|
37
|
+
**Satisfaction of search** — After finding the first issue, your detection rate drops 25-50%. Finding one issue makes it MORE likely there are others. Deliberately increase scrutiny after your first finding.
|
|
38
|
+
|
|
39
|
+
**Complexity bias** — Simple-looking changes (renames, test rewrites, config changes) receive less scrutiny because they "look safe." These are where semantic bugs hide. Every submission gets the same investigation depth.
|
|
47
40
|
|
|
48
|
-
**
|
|
41
|
+
**Anchoring** — Don't frame analysis around the author's stated intent. Assess what the code actually does, not what the author says it does.
|
|
49
42
|
|
|
50
|
-
|
|
43
|
+
**Decision fatigue** — On the Nth review, reviewers default to approval. Every approval must be backed by specific evidence of verification.
|
|
51
44
|
|
|
52
|
-
|
|
45
|
+
### Structured Exploration
|
|
53
46
|
|
|
54
|
-
|
|
47
|
+
Before rendering any verdict, complete both deterministic and analytical checks:
|
|
55
48
|
|
|
49
|
+
**Deterministic checks** (run these, don't reason about them):
|
|
56
50
|
```bash
|
|
57
|
-
|
|
58
|
-
kspec
|
|
51
|
+
kspec item get @spec-ref # Own ACs + inherited trait ACs
|
|
52
|
+
kspec validate # Trait coverage warnings
|
|
53
|
+
# Run the project's test suite
|
|
54
|
+
grep -rn "AC: @spec-ref" tests/ # Own AC annotations (adapt path/syntax)
|
|
55
|
+
grep -rn "AC: @trait-" tests/ # Trait AC annotations
|
|
59
56
|
```
|
|
60
57
|
|
|
61
|
-
|
|
62
|
-
1.
|
|
63
|
-
2.
|
|
64
|
-
3.
|
|
58
|
+
**Analytical checks** (require reading and judgment):
|
|
59
|
+
1. Read the diff — every changed file, not just the interesting ones
|
|
60
|
+
2. Read surrounding context — unchanged files that interact with changed code
|
|
61
|
+
3. Verify spec alignment — for each AC, confirm the code satisfies the behavior
|
|
62
|
+
4. Verify at least one worker claim independently
|
|
63
|
+
5. Search across categories — correctness, edge cases, error handling, security, test quality, integration
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
---
|
|
67
66
|
|
|
68
|
-
|
|
69
|
-
|-------|----------|
|
|
70
|
-
| AC has no implementation | MUST-FIX |
|
|
71
|
-
| AC has no test | MUST-FIX |
|
|
72
|
-
| Implementation deviates from spec | MUST-FIX |
|
|
73
|
-
| Undocumented behavior (not in any AC) | SHOULD-FIX |
|
|
74
|
-
| Spec is vague, implementation chose reasonable interpretation | Note it |
|
|
67
|
+
## AC Coverage Verification
|
|
75
68
|
|
|
76
|
-
|
|
69
|
+
### Own AC Coverage
|
|
77
70
|
|
|
78
71
|
Every acceptance criterion on the spec MUST have at least one annotated test.
|
|
79
72
|
|
|
80
|
-
|
|
73
|
+
```bash
|
|
74
|
+
# Get all ACs (own + inherited from traits)
|
|
75
|
+
kspec item get @spec-ref
|
|
76
|
+
|
|
77
|
+
# Search for annotations in test files (adapt to your language/paths)
|
|
78
|
+
grep -rn "AC: @spec-ref" tests/
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Annotations use language-appropriate comment syntax:
|
|
81
82
|
|
|
82
83
|
```javascript
|
|
83
|
-
// AC: @spec-ref ac-
|
|
84
|
-
it('should validate input
|
|
84
|
+
// AC: @spec-ref ac-1
|
|
85
|
+
it('should validate input', () => { ... });
|
|
85
86
|
```
|
|
86
87
|
|
|
87
88
|
```python
|
|
88
|
-
# AC: @spec-ref ac-
|
|
89
|
+
# AC: @spec-ref ac-1
|
|
89
90
|
def test_validates_input():
|
|
90
91
|
...
|
|
91
92
|
```
|
|
92
93
|
|
|
93
|
-
|
|
94
|
+
Before accepting coverage, confirm each annotation matches the AC text from `kspec item get` — not just the `ac-N` number. A test must actually prove the AC, not just touch the code path.
|
|
95
|
+
|
|
96
|
+
### Trait AC Coverage
|
|
97
|
+
|
|
98
|
+
When a spec implements traits, it inherits their ACs. Every inherited AC needs test coverage using the **trait's** ref:
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
// AC: @trait-json-output ac-1
|
|
102
|
+
it('should output valid JSON with --json flag', () => { ... });
|
|
103
|
+
```
|
|
94
104
|
|
|
95
105
|
```bash
|
|
96
|
-
#
|
|
97
|
-
kspec
|
|
106
|
+
# kspec validate reports uncovered trait ACs
|
|
107
|
+
kspec validate
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Any "inherited trait AC(s) without test coverage" warning is a blocker.
|
|
111
|
+
|
|
112
|
+
If a trait AC genuinely doesn't apply, annotate it with a reason:
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
// AC: @trait-json-output ac-3 — N/A: this command has no tabular output
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Annotations must be standalone line comments, not embedded in block comments.
|
|
119
|
+
|
|
120
|
+
### Spec Alignment
|
|
121
|
+
|
|
122
|
+
Implementation must match spec intent, not just pass tests:
|
|
123
|
+
|
|
124
|
+
1. **Implementation exists** — Code handles the described behavior
|
|
125
|
+
2. **Test exists** — A test validates the behavior
|
|
126
|
+
3. **Behavior matches** — The test actually proves the AC, not just syntactically passes
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Review Records
|
|
131
|
+
|
|
132
|
+
kspec stores first-party review records as durable artifacts in the shadow branch. They track the full lifecycle of reviewing work — threaded comments, check results, verdicts, and audit history.
|
|
98
133
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
134
|
+
### Review Lifecycle
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
draft → open → closed
|
|
138
|
+
↓
|
|
139
|
+
archived (terminal)
|
|
102
140
|
```
|
|
103
141
|
|
|
104
|
-
|
|
105
|
-
|
|
142
|
+
| State | Meaning |
|
|
143
|
+
|-------|---------|
|
|
144
|
+
| `draft` | Review created but not yet started |
|
|
145
|
+
| `open` | Active review in progress |
|
|
146
|
+
| `closed` | Review concluded (auto-closed on approve/request_changes verdict) |
|
|
147
|
+
| `archived` | Permanently archived |
|
|
148
|
+
|
|
149
|
+
**Auto-close on verdict:** When a reviewer submits an `approve` or `request_changes` verdict, the review record automatically transitions to `closed`. A `comment` verdict leaves the review open since it doesn't represent a final assessment. Each closed review is a point-in-time artifact.
|
|
106
150
|
|
|
107
|
-
|
|
151
|
+
### Per-Cycle Review Model
|
|
108
152
|
|
|
109
|
-
|
|
153
|
+
Each review cycle produces its own review record. This is analogous to individual PR reviews on GitHub — each review is a discrete artifact with its own verdict, and the collection of reviews across cycles comprises the full review history for the task.
|
|
110
154
|
|
|
111
|
-
|
|
155
|
+
**How it works:**
|
|
156
|
+
- When a task enters `pending_review`, the reviewer creates a **new** review record
|
|
157
|
+
- If a prior closed review exists, it remains as a historical artifact
|
|
158
|
+
- The task's `review_ref` is updated to point to the new record
|
|
159
|
+
- Historical reviews are accessible via `kspec review for-task @ref` (returns all linked reviews)
|
|
160
|
+
|
|
161
|
+
**Do NOT reopen old reviews.** Instead, create a fresh review for each cycle. This keeps each review's findings, verdict, and context self-contained.
|
|
162
|
+
|
|
163
|
+
### Disposition (Computed)
|
|
164
|
+
|
|
165
|
+
The disposition is computed from verdicts, checks, and threads — not set directly:
|
|
166
|
+
|
|
167
|
+
| Disposition | Condition |
|
|
168
|
+
|-------------|-----------|
|
|
169
|
+
| `pending` | No verdicts, or only `comment` verdicts |
|
|
170
|
+
| `approved` | At least one `approve` verdict matching current version, no blocking `request_changes`, all required gates passing, no unresolved blocker threads |
|
|
171
|
+
| `changes_requested` | Any `request_changes` verdict matching current version, or required gates failing, or unresolved blocker threads |
|
|
172
|
+
|
|
173
|
+
### Creating Reviews
|
|
112
174
|
|
|
113
175
|
```bash
|
|
114
|
-
#
|
|
115
|
-
kspec
|
|
176
|
+
# Review a task (auto-links review_ref on the task)
|
|
177
|
+
kspec review add --title "Review task-add-auth" \
|
|
178
|
+
--subject-type task --subject-ref @task-add-auth
|
|
179
|
+
|
|
180
|
+
# Review committed code (requires base/head commits)
|
|
181
|
+
kspec review add --title "Review feature branch" \
|
|
182
|
+
--subject-type code --base abc1234 --head def5678 \
|
|
183
|
+
--base-branch main --head-branch feat/auth \
|
|
184
|
+
--related-ref @task-add-auth
|
|
185
|
+
|
|
186
|
+
# Review a plan or spec
|
|
187
|
+
kspec review add --title "Review auth plan" \
|
|
188
|
+
--subject-type plan --subject-ref @plan-auth
|
|
116
189
|
```
|
|
117
190
|
|
|
118
|
-
|
|
191
|
+
**Subject types:** `task`, `code`, `plan`, `spec`, `external`
|
|
119
192
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
193
|
+
### Structuring Findings as Threads
|
|
194
|
+
|
|
195
|
+
Each finding becomes a thread with a kind that determines its impact:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Blocker — must be resolved before approval
|
|
199
|
+
kspec review comment @review-ref \
|
|
200
|
+
--body "Missing error handling for invalid input" --kind blocker
|
|
201
|
+
|
|
202
|
+
# Question — non-blocking, needs clarification
|
|
203
|
+
kspec review comment @review-ref \
|
|
204
|
+
--body "Why was this approach chosen over X?" --kind question
|
|
205
|
+
|
|
206
|
+
# Nit — non-blocking, minor suggestion (default)
|
|
207
|
+
kspec review comment @review-ref \
|
|
208
|
+
--body "Consider renaming this variable" --kind nit
|
|
123
209
|
```
|
|
124
210
|
|
|
125
|
-
|
|
211
|
+
**Thread kinds:** `blocker` (blocks approval), `question` (non-blocking), `nit` (non-blocking, default).
|
|
212
|
+
|
|
213
|
+
Only blocker threads affect disposition. Unresolved nits and questions do not block approval.
|
|
214
|
+
|
|
215
|
+
#### Code-Targeted Comments
|
|
216
|
+
|
|
217
|
+
Anchor findings to specific lines for code reviews:
|
|
126
218
|
|
|
127
219
|
```bash
|
|
128
|
-
|
|
129
|
-
|
|
220
|
+
kspec review comment @review-ref --body "Off-by-one error" --kind blocker \
|
|
221
|
+
--path src/parser/validate.ts --side head --line-start 42 --line-end 42 \
|
|
222
|
+
--commit def5678
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
#### Structured Anchors (for plans/specs)
|
|
130
226
|
|
|
131
|
-
|
|
132
|
-
|
|
227
|
+
```bash
|
|
228
|
+
kspec review comment @review-ref --body "AC is too vague" --kind blocker \
|
|
229
|
+
--section acceptance_criteria --field ac-3 --anchor-ref @spec-ref
|
|
133
230
|
```
|
|
134
231
|
|
|
135
|
-
|
|
232
|
+
### Recording Checks
|
|
136
233
|
|
|
137
|
-
|
|
234
|
+
Checks record verification evidence bound to the reviewed state:
|
|
138
235
|
|
|
139
|
-
|
|
236
|
+
```bash
|
|
237
|
+
# Passing test run
|
|
238
|
+
kspec review check @review-ref --name "vitest" --status pass \
|
|
239
|
+
--runner vitest --evidence "All 342 tests passed" \
|
|
240
|
+
--version-base abc1234 --version-head def5678
|
|
241
|
+
|
|
242
|
+
# Failing check
|
|
243
|
+
kspec review check @review-ref --name "lint" --status fail \
|
|
244
|
+
--runner eslint --evidence "3 errors found" \
|
|
245
|
+
--version-base abc1234 --version-head def5678
|
|
246
|
+
|
|
247
|
+
# Informational (non-required) check
|
|
248
|
+
kspec review check @review-ref --name "coverage" --status pass \
|
|
249
|
+
--no-required --evidence "87% coverage" \
|
|
250
|
+
--version-base abc1234 --version-head def5678
|
|
251
|
+
```
|
|
140
252
|
|
|
141
|
-
|
|
142
|
-
|
|
253
|
+
**Check statuses:** `pass`, `fail`, `running`, `skipped`
|
|
254
|
+
|
|
255
|
+
Checks whose `applies_to_version` does not match the current subject version are stale.
|
|
256
|
+
|
|
257
|
+
### Submitting Verdicts
|
|
258
|
+
|
|
259
|
+
Verdicts record individual reviewer decisions:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# Approve
|
|
263
|
+
kspec review verdict @review-ref --decision approve \
|
|
264
|
+
--reviewer agent@example.com \
|
|
265
|
+
--version-base abc1234 --version-head def5678
|
|
266
|
+
|
|
267
|
+
# Request changes (triggers needs_work on linked task)
|
|
268
|
+
kspec review verdict @review-ref --decision request_changes \
|
|
269
|
+
--reviewer agent@example.com \
|
|
270
|
+
--version-base abc1234 --version-head def5678
|
|
271
|
+
|
|
272
|
+
# Comment (non-blocking)
|
|
273
|
+
kspec review verdict @review-ref --decision comment \
|
|
274
|
+
--reviewer agent@example.com \
|
|
275
|
+
--version-base abc1234 --version-head def5678
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Verdicts are per-reviewer. A later verdict from the same reviewer replaces the earlier one for the same version. Verdicts not matching the current subject version are stale.
|
|
279
|
+
|
|
280
|
+
### Replying and Resolving Threads
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
# Reply to a thread
|
|
284
|
+
kspec review reply @review-ref --thread <thread-ulid> \
|
|
285
|
+
--body "Fixed in commit abc1234"
|
|
286
|
+
|
|
287
|
+
# Resolve a thread
|
|
288
|
+
kspec review resolve @review-ref --thread <thread-ulid>
|
|
289
|
+
|
|
290
|
+
# Reopen if fix was insufficient
|
|
291
|
+
kspec review reopen @review-ref --thread <thread-ulid>
|
|
143
292
|
```
|
|
144
293
|
|
|
145
|
-
|
|
146
|
-
Annotations must be standalone line comments (`// AC:` or `# AC:`), not embedded inside block/JSDoc comments.
|
|
294
|
+
### Fix Cycles (Re-review After Changes)
|
|
147
295
|
|
|
148
|
-
|
|
296
|
+
When a task returns to `pending_review` after a fix cycle, the reviewer creates a **new** review record rather than updating the old one:
|
|
149
297
|
|
|
150
|
-
|
|
298
|
+
```bash
|
|
299
|
+
# The old review is already closed (auto-closed on verdict)
|
|
300
|
+
# Create a fresh review for the new cycle
|
|
301
|
+
kspec review add --title "Review task-foo (cycle 2)" \
|
|
302
|
+
--subject-type task --subject-ref @task-foo
|
|
303
|
+
|
|
304
|
+
# The task's review_ref now points to this new review
|
|
305
|
+
# The prior review remains accessible via for-task
|
|
306
|
+
kspec review for-task @task-foo # Shows all reviews, current + historical
|
|
307
|
+
```
|
|
151
308
|
|
|
152
|
-
|
|
309
|
+
If dispatch workspace metadata is available, the new review's orientation will include a diff summary showing what changed since the prior review's examined commit.
|
|
310
|
+
|
|
311
|
+
**Subject refresh** is still available for within-cycle updates (e.g., reviewer pushes a minor fix before verdicting):
|
|
153
312
|
|
|
154
313
|
```bash
|
|
155
|
-
kspec
|
|
314
|
+
kspec review refresh @review-ref --head new-commit-sha
|
|
156
315
|
```
|
|
157
316
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
- Missing descriptions
|
|
162
|
-
- Uncovered trait ACs (the most common review finding)
|
|
163
|
-
- Orphaned specs (no linked tasks)
|
|
317
|
+
### Task Integration
|
|
318
|
+
|
|
319
|
+
Reviews integrate with the task lifecycle:
|
|
164
320
|
|
|
165
|
-
|
|
321
|
+
- Creating a task review auto-sets `task.review_ref` to the new review
|
|
322
|
+
- A `request_changes` verdict auto-transitions `pending_review` tasks to `needs_work` and auto-closes the review
|
|
323
|
+
- An `approve` verdict auto-closes the review
|
|
324
|
+
- `kspec review for-task @ref` finds **all** linked reviews (current + historical)
|
|
166
325
|
|
|
167
|
-
|
|
326
|
+
---
|
|
168
327
|
|
|
169
|
-
##
|
|
328
|
+
## Finding Validation
|
|
170
329
|
|
|
171
|
-
|
|
330
|
+
Before emitting any finding, apply the **claim-disprove-emit** cycle:
|
|
172
331
|
|
|
173
|
-
|
|
332
|
+
1. **State the claim.** What exactly is wrong? Be specific: file, line, behavior.
|
|
333
|
+
2. **Try to disprove it.** Look for evidence the code is correct — guard clauses, tests covering the case, spec decisions justifying the approach.
|
|
334
|
+
3. **If disproved, drop it.** Dropped candidates are the process working correctly.
|
|
335
|
+
4. **If still valid, assess severity and confidence.**
|
|
174
336
|
|
|
175
|
-
|
|
176
|
-
- [ ] Every inherited trait AC has at least one annotated test (or N/A annotation)
|
|
177
|
-
- [ ] `kspec validate` reports no errors for this spec
|
|
178
|
-
- [ ] Implementation matches spec behavior (not just syntactically correct tests)
|
|
179
|
-
- [ ] No regressions — existing tests still pass
|
|
337
|
+
### Finding Quality
|
|
180
338
|
|
|
181
|
-
|
|
339
|
+
Every finding must include:
|
|
340
|
+
- **Path and line** — exactly where the issue is
|
|
341
|
+
- **Claim** — what is wrong, stated precisely
|
|
342
|
+
- **Impact** — what breaks, what guarantee is lost
|
|
343
|
+
- **Evidence** — what you observed that proves the claim
|
|
182
344
|
|
|
183
|
-
|
|
184
|
-
- [ ] Undocumented behavior has spec coverage or is flagged
|
|
185
|
-
- [ ] Test annotations reference correct spec/trait refs
|
|
345
|
+
### Severity Guide
|
|
186
346
|
|
|
187
|
-
|
|
347
|
+
| Severity | When to use |
|
|
348
|
+
|----------|-------------|
|
|
349
|
+
| **MUST-FIX** | Correctness, security, spec violation, coverage loss. High or medium confidence required. |
|
|
350
|
+
| **SHOULD-FIX** | Likely correctness issue, missing boundary case, fragile code. |
|
|
351
|
+
| **SUGGESTION** | Pure style, naming, formatting. Zero correctness implications. |
|
|
188
352
|
|
|
189
|
-
-
|
|
190
|
-
- [ ] Prefer E2E over unit where practical
|
|
191
|
-
- [ ] Tests run in isolation (temp dirs, not project repo)
|
|
353
|
+
**Default to MUST-FIX.** Only downgrade when you are certain the issue is cosmetic.
|
|
192
354
|
|
|
193
|
-
|
|
355
|
+
---
|
|
194
356
|
|
|
195
|
-
|
|
196
|
-
|---------|----------|--------|
|
|
197
|
-
| Missing own AC test annotation | MUST-FIX | Add test with `// AC: @spec-ref ac-N` |
|
|
198
|
-
| Missing trait AC test annotation | MUST-FIX | Add test with `// AC: @trait-slug ac-N` |
|
|
199
|
-
| `kspec validate` error | MUST-FIX | Fix the validation error |
|
|
200
|
-
| Implementation doesn't match spec | MUST-FIX | Fix implementation or update spec |
|
|
201
|
-
| `kspec validate` warning | SHOULD-FIX | Address warning |
|
|
202
|
-
| Undocumented behavior | SHOULD-FIX | Add AC or note deviation |
|
|
203
|
-
| Test doesn't prove its AC | SHOULD-FIX | Rewrite test |
|
|
204
|
-
| No E2E tests | SUGGESTION | Consider adding |
|
|
357
|
+
## As a Worker: Reading Review Feedback
|
|
205
358
|
|
|
206
|
-
|
|
359
|
+
When your task is in `needs_work`:
|
|
207
360
|
|
|
208
|
-
|
|
361
|
+
```bash
|
|
362
|
+
# Find all reviews for the task (current + historical)
|
|
363
|
+
kspec review for-task @ref
|
|
364
|
+
|
|
365
|
+
# Read the most recent review (the one that kicked back to needs_work)
|
|
366
|
+
kspec review get @review-ref
|
|
209
367
|
|
|
368
|
+
# Focus on blocker threads — these must be resolved
|
|
369
|
+
# Address questions and nits where reasonable
|
|
370
|
+
# Reply to threads explaining your fix
|
|
371
|
+
kspec review reply @review-ref --thread <ulid> --body "Fixed in commit abc1234"
|
|
210
372
|
```
|
|
211
|
-
|
|
373
|
+
|
|
374
|
+
**Historical context:** If the task has been through multiple fix cycles, `kspec review for-task @ref` returns all reviews. Each is a closed artifact with its own findings and verdict. Read prior reviews to understand the full review history and avoid re-introducing previously flagged issues.
|
|
375
|
+
|
|
376
|
+
After fixing:
|
|
377
|
+
```bash
|
|
378
|
+
kspec task submit @ref # Back to pending_review — reviewer creates a new review record
|
|
212
379
|
```
|
|
213
380
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
## Reviewer Workflow Summary
|
|
384
|
+
|
|
385
|
+
1. **Discover context** — `kspec task get @ref`, `kspec item get @spec-ref`
|
|
386
|
+
2. **Create review** — `kspec review add --subject-type task --subject-ref @ref` (creates a new record each cycle)
|
|
387
|
+
3. **Open review** — `kspec review open @review-ref`
|
|
388
|
+
4. **Investigate** — deterministic checks, then analytical checks
|
|
389
|
+
5. **Record findings** — `kspec review comment` for each finding with appropriate kind
|
|
390
|
+
6. **Record checks** — `kspec review check` for test/lint results
|
|
391
|
+
7. **Submit verdict** — `kspec review verdict` (approve or request_changes — auto-closes the review)
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## CLI Lookups
|
|
396
|
+
|
|
397
|
+
| Need | Command |
|
|
398
|
+
|------|---------|
|
|
399
|
+
| Spec + all ACs (own + inherited) | `kspec item get @spec-ref` |
|
|
400
|
+
| Trait definition + ACs | `kspec item get @trait-slug` |
|
|
401
|
+
| Review details | `kspec review get @review-ref` |
|
|
402
|
+
| Reviews for a task | `kspec review for-task @task-ref` |
|
|
403
|
+
| All open reviews | `kspec review list --status open` |
|
|
404
|
+
| Search by keyword | `kspec search "keyword"` |
|
|
405
|
+
| All traits | `kspec trait list` |
|
|
406
|
+
| Validation | `kspec validate` |
|
|
407
|
+
|
|
408
|
+
## Command Reference
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# Create and query
|
|
412
|
+
kspec review add [options] # Create a review record
|
|
413
|
+
kspec review get <ref> # Show review details
|
|
414
|
+
kspec review list [--status, --disposition, --subject-type, --reviewer, --task]
|
|
415
|
+
kspec review for-task <ref> # Find reviews linked to a task
|
|
416
|
+
|
|
417
|
+
# Comments and threads
|
|
418
|
+
kspec review comment <ref> [options] # Add a comment thread
|
|
419
|
+
kspec review reply <ref> --thread <ulid> --body "..."
|
|
420
|
+
kspec review resolve <ref> --thread <ulid>
|
|
421
|
+
kspec review reopen <ref> --thread <ulid>
|
|
422
|
+
|
|
423
|
+
# Checks and verdicts
|
|
424
|
+
kspec review check <ref> [options] # Record a check result
|
|
425
|
+
kspec review verdict <ref> [options] # Set a reviewer verdict
|
|
426
|
+
|
|
427
|
+
# Lifecycle
|
|
428
|
+
kspec review open <ref> # draft → open
|
|
429
|
+
kspec review close <ref> # → closed
|
|
430
|
+
kspec review archive <ref> # → archived (permanent)
|
|
431
|
+
|
|
432
|
+
# Subject management
|
|
433
|
+
kspec review refresh <ref> --head <commit> [--base <commit>]
|
|
434
|
+
```
|
|
220
435
|
|
|
221
436
|
## Integration
|
|
222
437
|
|
|
223
|
-
- **`{skill:task-work}`** —
|
|
438
|
+
- **`{skill:task-work}`** — Workers read review feedback during fix cycles
|
|
439
|
+
- **`{skill:merge}`** — Merge gate checks review disposition before merging
|
|
224
440
|
- **`{skill:writing-specs}`** — If review reveals spec gaps, update specs first
|
|
225
441
|
- **`kspec validate`** — Automated validation complements manual review
|