specrails-core 5.6.0 → 6.0.1
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 +27 -145
- package/bin/specrails-core.mjs +12 -554
- package/dist/agent-runtime/capabilities.js +0 -1
- package/dist/agent-runtime/change-scope.d.ts +63 -0
- package/dist/agent-runtime/change-scope.js +297 -0
- package/dist/agent-runtime/cli-executor.d.ts +1 -1
- package/dist/agent-runtime/cli-executor.js +1 -2
- package/dist/agent-runtime/cli-process.js +0 -1
- package/dist/agent-runtime/cli.js +4 -5
- package/dist/agent-runtime/codex-schema.js +0 -1
- package/dist/agent-runtime/compact/architect.d.ts +3 -272
- package/dist/agent-runtime/compact/architect.js +8 -9
- package/dist/agent-runtime/compact/chat-client.d.ts +3 -3
- package/dist/agent-runtime/compact/chat-client.js +1 -2
- package/dist/agent-runtime/compact/developer.d.ts +3 -70
- package/dist/agent-runtime/compact/developer.js +13 -14
- package/dist/agent-runtime/compact/environment.d.ts +16 -5
- package/dist/agent-runtime/compact/environment.js +32 -3
- package/dist/agent-runtime/compact/exit-code-honesty.d.ts +2 -1
- package/dist/agent-runtime/compact/exit-code-honesty.js +0 -1
- package/dist/agent-runtime/compact/guarded-loop.d.ts +2 -18
- package/dist/agent-runtime/compact/guarded-loop.js +7 -8
- package/dist/agent-runtime/compact/prompt-inputs.d.ts +0 -2
- package/dist/agent-runtime/compact/prompt-inputs.js +1 -2
- package/dist/agent-runtime/compact/reviewer.d.ts +0 -13
- package/dist/agent-runtime/compact/reviewer.js +5 -6
- package/dist/agent-runtime/compact/step.d.ts +0 -1
- package/dist/agent-runtime/compact/step.js +1 -2
- package/dist/agent-runtime/compact/test-reachability.js +6 -3
- package/dist/agent-runtime/config.js +0 -1
- package/dist/agent-runtime/core-host.d.ts +2 -2
- package/dist/agent-runtime/core-host.js +2 -3
- package/dist/agent-runtime/durable-store.d.ts +0 -1
- package/dist/agent-runtime/durable-store.js +1 -2
- package/dist/agent-runtime/efficiency-summary.d.ts +2 -2
- package/dist/agent-runtime/efficiency-summary.js +1 -2
- package/dist/agent-runtime/efficiency-types.js +0 -1
- package/dist/agent-runtime/efficiency.js +0 -1
- package/dist/agent-runtime/evaluation-corpus.js +0 -1
- package/dist/agent-runtime/evaluation.d.ts +2 -1
- package/dist/agent-runtime/evaluation.js +1 -2
- package/dist/agent-runtime/executor-types.d.ts +1 -1
- package/dist/agent-runtime/executor-types.js +0 -1
- package/dist/agent-runtime/executors.js +0 -1
- package/dist/agent-runtime/gemini-policy.js +0 -1
- package/dist/agent-runtime/graph/artifacts.d.ts +1 -1
- package/dist/agent-runtime/graph/artifacts.js +5 -3
- package/dist/agent-runtime/graph/convergence.d.ts +26 -0
- package/dist/agent-runtime/graph/convergence.js +62 -0
- package/dist/agent-runtime/graph/nodes.d.ts +1 -1
- package/dist/agent-runtime/graph/nodes.js +170 -24
- package/dist/agent-runtime/graph/review-policy.js +0 -1
- package/dist/agent-runtime/graph/roles.d.ts +2 -5
- package/dist/agent-runtime/graph/roles.js +2 -8
- package/dist/agent-runtime/graph/state.d.ts +6 -1
- package/dist/agent-runtime/graph/state.js +2 -1
- package/dist/agent-runtime/graph-checkpointer.d.ts +2 -1
- package/dist/agent-runtime/graph-checkpointer.js +0 -1
- package/dist/agent-runtime/guardrails.d.ts +3 -3
- package/dist/agent-runtime/guardrails.js +1 -2
- package/dist/agent-runtime/index.d.ts +1 -1
- package/dist/agent-runtime/index.js +1 -2
- package/dist/agent-runtime/kimi-acp.js +1 -2
- package/dist/agent-runtime/kimi-model.d.ts +6 -0
- package/dist/agent-runtime/kimi-model.js +12 -0
- package/dist/agent-runtime/openai-executor.d.ts +0 -9
- package/dist/agent-runtime/openai-executor.js +6 -7
- package/dist/agent-runtime/openspec-tool-server.js +1 -2
- package/dist/agent-runtime/openspec.d.ts +0 -2
- package/dist/agent-runtime/openspec.js +1 -6
- package/dist/agent-runtime/prompts.d.ts +11 -5
- package/dist/agent-runtime/prompts.js +46 -17
- package/dist/agent-runtime/provider-diagnostic.js +1 -2
- package/dist/agent-runtime/recovery.js +1 -2
- package/dist/agent-runtime/repository-context.d.ts +1 -1
- package/dist/agent-runtime/repository-context.js +19 -1
- package/dist/agent-runtime/review-context.d.ts +1 -1
- package/dist/agent-runtime/review-context.js +0 -1
- package/dist/agent-runtime/role-routing.js +0 -1
- package/dist/agent-runtime/role-state.js +0 -1
- package/dist/agent-runtime/runtime-identity.js +1 -2
- package/dist/agent-runtime/tool-event.js +0 -1
- package/dist/agent-runtime/verification-plan.d.ts +5 -4
- package/dist/agent-runtime/verification-plan.js +9 -5
- package/dist/agent-runtime/workflow-types.js +0 -1
- package/dist/agent-runtime/workflow.js +0 -1
- package/dist/agent-runtime/workspace-tools.d.ts +2 -2
- package/dist/agent-runtime/workspace-tools.js +1 -2
- package/dist/installer/cli.d.ts +3 -32
- package/dist/installer/cli.js +26 -101
- package/dist/installer/commands/framework.d.ts +4 -3
- package/dist/installer/commands/framework.js +0 -1
- package/dist/installer/commands/init.d.ts +4 -25
- package/dist/installer/commands/init.js +5 -8
- package/dist/installer/phases/framework-lifecycle.d.ts +3 -17
- package/dist/installer/phases/framework-lifecycle.js +2 -3
- package/dist/installer/phases/install-config.d.ts +7 -8
- package/dist/installer/phases/install-config.js +2 -7
- package/dist/installer/phases/manifest.d.ts +6 -7
- package/dist/installer/phases/manifest.js +2 -7
- package/dist/installer/phases/prereqs.d.ts +6 -7
- package/dist/installer/phases/prereqs.js +4 -6
- package/dist/installer/phases/provider-detect.d.ts +6 -7
- package/dist/installer/phases/provider-detect.js +2 -4
- package/dist/installer/phases/scaffold.d.ts +9 -10
- package/dist/installer/phases/scaffold.js +82 -805
- package/dist/installer/util/errors.js +0 -1
- package/dist/installer/util/exec.d.ts +3 -2
- package/dist/installer/util/exec.js +0 -1
- package/dist/installer/util/fs.d.ts +0 -10
- package/dist/installer/util/fs.js +1 -2
- package/dist/installer/util/git.js +0 -1
- package/dist/installer/util/install-transaction.d.ts +2 -2
- package/dist/installer/util/install-transaction.js +1 -2
- package/dist/installer/util/logger.d.ts +1 -3
- package/dist/installer/util/logger.js +0 -1
- package/dist/installer/util/paths.js +0 -1
- package/dist/installer/util/registry.d.ts +4 -8
- package/dist/installer/util/registry.js +2 -3
- package/dist/{installer/runtime → pipeline}/pipeline-state.d.ts +11 -0
- package/dist/{installer/runtime → pipeline}/pipeline-state.js +56 -5
- package/dist/shared/args.d.ts +18 -0
- package/dist/shared/args.js +53 -0
- package/integration-contract.json +11 -47
- package/package.json +3 -10
- package/templates/agents/sr-architect.md +15 -310
- package/templates/agents/sr-developer.md +15 -269
- package/templates/agents/sr-reviewer.md +13 -367
- package/templates/codex-skills/rails/sr-architect/SKILL.md +14 -308
- package/templates/codex-skills/rails/sr-developer/SKILL.md +14 -201
- package/templates/codex-skills/rails/sr-reviewer/SKILL.md +15 -289
- package/templates/kimi/specrails/run-skill.mjs +91 -2173
- package/bin/tui-installer.mjs +0 -430
- package/commands/doctor.md +0 -62
- package/dist/agent-runtime/capabilities.js.map +0 -1
- package/dist/agent-runtime/cli-executor.js.map +0 -1
- package/dist/agent-runtime/cli-process.js.map +0 -1
- package/dist/agent-runtime/cli.js.map +0 -1
- package/dist/agent-runtime/codex-schema.js.map +0 -1
- package/dist/agent-runtime/compact/architect.js.map +0 -1
- package/dist/agent-runtime/compact/chat-client.js.map +0 -1
- package/dist/agent-runtime/compact/developer.js.map +0 -1
- package/dist/agent-runtime/compact/environment.js.map +0 -1
- package/dist/agent-runtime/compact/exit-code-honesty.js.map +0 -1
- package/dist/agent-runtime/compact/guarded-loop.js.map +0 -1
- package/dist/agent-runtime/compact/prompt-inputs.js.map +0 -1
- package/dist/agent-runtime/compact/reviewer.js.map +0 -1
- package/dist/agent-runtime/compact/step.js.map +0 -1
- package/dist/agent-runtime/compact/test-reachability.js.map +0 -1
- package/dist/agent-runtime/config.js.map +0 -1
- package/dist/agent-runtime/core-host.js.map +0 -1
- package/dist/agent-runtime/durable-store.js.map +0 -1
- package/dist/agent-runtime/efficiency-summary.js.map +0 -1
- package/dist/agent-runtime/efficiency-types.js.map +0 -1
- package/dist/agent-runtime/efficiency.js.map +0 -1
- package/dist/agent-runtime/evaluation-corpus.js.map +0 -1
- package/dist/agent-runtime/evaluation.js.map +0 -1
- package/dist/agent-runtime/executor-types.js.map +0 -1
- package/dist/agent-runtime/executors.js.map +0 -1
- package/dist/agent-runtime/gemini-policy.js.map +0 -1
- package/dist/agent-runtime/graph/artifacts.js.map +0 -1
- package/dist/agent-runtime/graph/nodes.js.map +0 -1
- package/dist/agent-runtime/graph/review-policy.js.map +0 -1
- package/dist/agent-runtime/graph/roles.js.map +0 -1
- package/dist/agent-runtime/graph/state.js.map +0 -1
- package/dist/agent-runtime/graph-checkpointer.js.map +0 -1
- package/dist/agent-runtime/guardrails.js.map +0 -1
- package/dist/agent-runtime/index.js.map +0 -1
- package/dist/agent-runtime/kimi-acp.js.map +0 -1
- package/dist/agent-runtime/openai-executor.js.map +0 -1
- package/dist/agent-runtime/openspec-tool-server.js.map +0 -1
- package/dist/agent-runtime/openspec.js.map +0 -1
- package/dist/agent-runtime/prompts.js.map +0 -1
- package/dist/agent-runtime/provider-diagnostic.js.map +0 -1
- package/dist/agent-runtime/recovery.js.map +0 -1
- package/dist/agent-runtime/repository-context.js.map +0 -1
- package/dist/agent-runtime/review-context.js.map +0 -1
- package/dist/agent-runtime/role-routing.js.map +0 -1
- package/dist/agent-runtime/role-state.js.map +0 -1
- package/dist/agent-runtime/runtime-identity.js.map +0 -1
- package/dist/agent-runtime/tool-event.js.map +0 -1
- package/dist/agent-runtime/verification-plan.js.map +0 -1
- package/dist/agent-runtime/workflow-types.js.map +0 -1
- package/dist/agent-runtime/workflow.js.map +0 -1
- package/dist/agent-runtime/workspace-tools.js.map +0 -1
- package/dist/installer/cli.js.map +0 -1
- package/dist/installer/commands/doctor.d.ts +0 -27
- package/dist/installer/commands/doctor.js +0 -615
- package/dist/installer/commands/doctor.js.map +0 -1
- package/dist/installer/commands/framework.js.map +0 -1
- package/dist/installer/commands/init.js.map +0 -1
- package/dist/installer/commands/update.d.ts +0 -56
- package/dist/installer/commands/update.js +0 -257
- package/dist/installer/commands/update.js.map +0 -1
- package/dist/installer/commands/v5-migration.d.ts +0 -32
- package/dist/installer/commands/v5-migration.js +0 -133
- package/dist/installer/commands/v5-migration.js.map +0 -1
- package/dist/installer/phases/framework-lifecycle.js.map +0 -1
- package/dist/installer/phases/install-config.js.map +0 -1
- package/dist/installer/phases/manifest.js.map +0 -1
- package/dist/installer/phases/prereqs.js.map +0 -1
- package/dist/installer/phases/provider-detect.js.map +0 -1
- package/dist/installer/phases/scaffold.js.map +0 -1
- package/dist/installer/runtime/kimi.d.ts +0 -84
- package/dist/installer/runtime/kimi.js +0 -255
- package/dist/installer/runtime/kimi.js.map +0 -1
- package/dist/installer/runtime/pipeline-state.js.map +0 -1
- package/dist/installer/util/errors.js.map +0 -1
- package/dist/installer/util/exec.js.map +0 -1
- package/dist/installer/util/fs.js.map +0 -1
- package/dist/installer/util/git.js.map +0 -1
- package/dist/installer/util/install-transaction.js.map +0 -1
- package/dist/installer/util/logger.js.map +0 -1
- package/dist/installer/util/paths.js.map +0 -1
- package/dist/installer/util/prompts.d.ts +0 -23
- package/dist/installer/util/prompts.js +0 -49
- package/dist/installer/util/prompts.js.map +0 -1
- package/dist/installer/util/registry.js.map +0 -1
- package/dist/installer/util/template.d.ts +0 -23
- package/dist/installer/util/template.js +0 -60
- package/dist/installer/util/template.js.map +0 -1
- package/docs/README.md +0 -40
- package/docs/agent-runtime-efficiency.md +0 -65
- package/docs/agent-runtime.md +0 -393
- package/docs/agents.md +0 -315
- package/docs/changelog.md +0 -168
- package/docs/ci-cd.md +0 -60
- package/docs/concepts.md +0 -183
- package/docs/customization.md +0 -363
- package/docs/deployment.md +0 -234
- package/docs/getting-started.md +0 -122
- package/docs/installation.md +0 -395
- package/docs/local-tickets.md +0 -191
- package/docs/migration-guide.md +0 -140
- package/docs/playbook-oss-maintainer.md +0 -112
- package/docs/playbook-parallel-dev.md +0 -124
- package/docs/playbook-product-discovery.md +0 -115
- package/docs/plugin-architecture.md +0 -144
- package/docs/research/codex-compatibility-analysis.md +0 -365
- package/docs/research/mcp-feasibility-analysis.md +0 -382
- package/docs/testing/test-matrix-codex.md +0 -130
- package/docs/updating.md +0 -89
- package/docs/user-docs/cli-reference.md +0 -428
- package/docs/user-docs/codex-vs-claude-code.md +0 -23
- package/docs/user-docs/core-updates.md +0 -70
- package/docs/user-docs/faq.md +0 -146
- package/docs/user-docs/getting-started-codex.md +0 -194
- package/docs/user-docs/getting-started-kimi.md +0 -423
- package/docs/user-docs/installation.md +0 -237
- package/docs/user-docs/provider-pipelines.md +0 -96
- package/docs/user-docs/quick-start.md +0 -161
- package/docs/windows.md +0 -78
- package/docs/workflows.md +0 -463
- package/schemas/profile.v1.json +0 -207
- package/templates/claude-md/CLAUDE-quickstart.md +0 -54
- package/templates/claude-md/root.md +0 -50
- package/templates/codex-skills/batch-implement/SKILL.md +0 -38
- package/templates/codex-skills/implement/SKILL.md +0 -38
- package/templates/codex-skills/retry/SKILL.md +0 -16
- package/templates/commands/specrails/compat-check.md +0 -271
- package/templates/commands/specrails/doctor.md +0 -62
- package/templates/commands/specrails/explore-spec.md +0 -173
- package/templates/commands/specrails/health-check.md +0 -527
- package/templates/commands/specrails/memory-inspect.md +0 -261
- package/templates/commands/specrails/opsx-diff.md +0 -419
- package/templates/commands/specrails/propose-spec.md +0 -102
- package/templates/commands/specrails/refactor-recommender.md +0 -169
- package/templates/commands/specrails/telemetry.md +0 -553
- package/templates/commands/specrails/why.md +0 -96
- package/templates/gemini-commands/batch-implement.toml +0 -37
- package/templates/gemini-commands/implement.toml +0 -37
- package/templates/gemini-commands/retry.toml +0 -15
- package/templates/profiles/default.json +0 -14
- package/templates/profiles/kimi-default.json +0 -15
- package/templates/rules/layer.md +0 -8
- package/templates/runtime/provider-pipeline.md +0 -113
- package/templates/security/security-exemptions.yaml +0 -20
- package/templates/settings/confidence-config.json +0 -17
- package/templates/settings/settings.json +0 -15
|
@@ -1,323 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sr-architect
|
|
3
|
-
description: "Architect role
|
|
3
|
+
description: "Architect role of the specrails implementation workflow. Turns a frozen spec into an OpenSpec change (proposal, design, specs, tasks) for the named change. Reads code; never edits product source."
|
|
4
4
|
license: MIT
|
|
5
|
-
compatibility: "
|
|
5
|
+
compatibility: "Requires the specrails-core installation in this repository."
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
file is authoritative. Use all selected repository IDs/paths for source work and
|
|
10
|
-
`context.artifactRoot` for OpenSpec; the legacy SPECRAILS_REPO_DIR examples below
|
|
11
|
-
apply only when no explicit context exists. Preserve the aggregate change slug for
|
|
12
|
-
a batch. Do not reload mutable tickets to replace frozen descriptions. Include
|
|
13
|
-
all acceptance criteria in the evidence, not only the first ticket.
|
|
8
|
+
You are the architect of the specrails implementation workflow for this repository.
|
|
14
9
|
|
|
15
|
-
|
|
16
|
-
and readable, read that file FIRST — a zero-AI map of the repo
|
|
17
|
-
(packages, ecosystems, sizes) generated by the spawner. Use it to
|
|
18
|
-
orient; do not spend turns on top-level discovery. Unset ⇒ explore
|
|
19
|
-
as normal.
|
|
10
|
+
## Scope
|
|
20
11
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
spawning you. Your turn is short, focused, and ends with TWO
|
|
24
|
-
written artefacts: an OpenSpec change package and a plan artefact.
|
|
12
|
+
- The frozen execution context (`SPECRAILS_EXECUTION_CONTEXT`) is authoritative: its specs, acceptance criteria, selected repositories and ownership define the work. Never widen or replace that scope from a mutable backlog.
|
|
13
|
+
- Read code and existing OpenSpec specs to ground the design. Do not edit product source, commit, push or open pull requests: the host owns delivery.
|
|
25
14
|
|
|
26
|
-
|
|
27
|
-
`${SPECRAILS_REPO_DIR:-.}` (unset ⇒ `.` ⇒ classic in-repo run). Run every
|
|
28
|
-
`openspec` CLI command from the repo — `(cd "${SPECRAILS_REPO_DIR:-.}" && openspec …)`
|
|
29
|
-
— and read/write change artefacts under `${SPECRAILS_REPO_DIR:-.}/openspec/...`.
|
|
30
|
-
Your plan artefact under `.specrails/agent-memory/` is run-state and stays
|
|
31
|
-
relative to the working directory.
|
|
15
|
+
## Workflow
|
|
32
16
|
|
|
33
|
-
|
|
17
|
+
1. Investigate the affected modules, their tests and the conventions they follow.
|
|
18
|
+
2. Create the change with the official OpenSpec workflow, never by hand:
|
|
34
19
|
|
|
35
|
-
You **plan**. You do not write production code. You do not edit
|
|
36
|
-
source files outside `${SPECRAILS_REPO_DIR:-.}/openspec/` and `.specrails/agent-memory/`.
|
|
37
|
-
|
|
38
|
-
## What you produce
|
|
39
|
-
|
|
40
|
-
### A. OpenSpec change package
|
|
41
|
-
|
|
42
|
-
**Scaffold the change with the OpenSpec CLI — this is mandatory.**
|
|
43
|
-
Do NOT hand-create the change directory; the `openspec` CLI owns
|
|
44
|
-
scaffolding so the change is registered with a workflow schema and
|
|
45
|
-
stays trackable by `openspec status`. Run:
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
(cd "${SPECRAILS_REPO_DIR:-.}" && openspec new change "<slug>" --schema spec-driven)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
where `<slug>` is a kebab-case derivation of the ticket title
|
|
52
|
-
(e.g. ticket "Build a Playable Tetris Game" → `add-tetris-game`).
|
|
53
|
-
This creates `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<slug>/.openspec.yaml`.
|
|
54
|
-
|
|
55
|
-
- If the command fails because OpenSpec isn't initialised in this
|
|
56
|
-
repo, run `(cd "${SPECRAILS_REPO_DIR:-.}" && openspec init . --tools codex --force)` once, then
|
|
57
|
-
re-run `openspec new change …`.
|
|
58
|
-
- If the change directory already exists from a prior run,
|
|
59
|
-
**reuse** it (idempotent) — skip the `new change` call.
|
|
60
|
-
|
|
61
|
-
Then fill the change's artefacts **in the dependency order
|
|
62
|
-
OpenSpec enforces** (proposal first; then design + specs; then
|
|
63
|
-
tasks). Check the order and what's still outstanding at any time
|
|
64
|
-
with:
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
(cd "${SPECRAILS_REPO_DIR:-.}" && openspec status --change "<slug>" --json)
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Write these four artefacts into `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<slug>/`:
|
|
71
|
-
|
|
72
|
-
**`proposal.md`** — the change's executive summary:
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
# <Ticket title>
|
|
76
|
-
|
|
77
|
-
## Why
|
|
78
|
-
<2-3 sentences: the motivation, copied or paraphrased from the
|
|
79
|
-
ticket's Problem Statement.>
|
|
80
|
-
|
|
81
|
-
## What changes
|
|
82
|
-
<2-5 bullets: the concrete deliverables, derived from the
|
|
83
|
-
ticket's Proposed Solution and Acceptance Criteria.>
|
|
84
|
-
|
|
85
|
-
## Impact
|
|
86
|
-
- Affected specs: <list of capability slugs that will get a
|
|
87
|
-
spec delta — see `specs/` below>
|
|
88
|
-
- Affected code: <one paragraph naming the surfaces this touches>
|
|
89
|
-
- Out of scope: <copied from the ticket's Out of Scope>
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
**`design.md`** — the deep design document. This is where the
|
|
93
|
-
non-obvious decisions live; the developer reads it before
|
|
94
|
-
writing code.
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
# Design — <change-slug>
|
|
98
|
-
|
|
99
|
-
## Context
|
|
100
|
-
<one paragraph: the system state today, the constraints the
|
|
101
|
-
change must respect, the assumptions you are making.>
|
|
102
|
-
|
|
103
|
-
## Goal
|
|
104
|
-
<one sentence: what observable behaviour you are adding /
|
|
105
|
-
changing.>
|
|
106
|
-
|
|
107
|
-
## Non-Goals
|
|
108
|
-
- <one bullet per scope cut, explicit so the developer doesn't
|
|
109
|
-
over-build>
|
|
110
|
-
|
|
111
|
-
## Design
|
|
112
|
-
|
|
113
|
-
### Architecture
|
|
114
|
-
<one or two paragraphs: the high-level shape — modules,
|
|
115
|
-
data flow, state machine. Diagrams in ASCII are welcome.>
|
|
116
|
-
|
|
117
|
-
### Data shapes
|
|
118
|
-
<the concrete types / JSON shapes / DB columns the change
|
|
119
|
-
introduces or modifies. One block per shape.>
|
|
120
|
-
|
|
121
|
-
### State & lifecycle
|
|
122
|
-
<for stateful changes: the state graph, transitions,
|
|
123
|
-
invariants. Skip for stateless changes.>
|
|
124
|
-
|
|
125
|
-
### Public API / surface
|
|
126
|
-
<the externally observable surface — function signatures, HTTP
|
|
127
|
-
routes, CLI flags, exported types. One block per surface.>
|
|
128
|
-
|
|
129
|
-
## Trade-offs
|
|
130
|
-
|
|
131
|
-
| Option | Pros | Cons | Chosen? |
|
|
132
|
-
|---|---|---|---|
|
|
133
|
-
| <option A> | … | … | ✅ / ❌ |
|
|
134
|
-
| <option B> | … | … | ✅ / ❌ |
|
|
135
|
-
|
|
136
|
-
State a one-sentence rationale for the chosen option after
|
|
137
|
-
the table.
|
|
138
|
-
|
|
139
|
-
## Risks
|
|
140
|
-
- <each risk + mitigation, one per bullet>
|
|
141
|
-
|
|
142
|
-
## Open questions
|
|
143
|
-
- <questions you couldn't resolve from the ticket alone. The
|
|
144
|
-
reviewer will check these; leave the section empty if none.>
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**`tasks.md`** — the TDD-shaped implementation order:
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
# Implementation Tasks
|
|
151
|
-
|
|
152
|
-
> The developer agent runs these in order. Each "## N." block is
|
|
153
|
-
> a single TDD cycle: write the failing test, run it to confirm
|
|
154
|
-
> it fails, write production code, run again to confirm it
|
|
155
|
-
> passes. Do NOT skip the failing-test step.
|
|
156
|
-
|
|
157
|
-
## 1. <First testable behaviour>
|
|
158
|
-
- [ ] 1.1 Write a failing test in `<test-path>` that asserts
|
|
159
|
-
<behaviour>. Run that test file (scoped); the new test
|
|
160
|
-
MUST fail.
|
|
161
|
-
- [ ] 1.2 Implement the minimum production code in `<src-path>`
|
|
162
|
-
to make the test pass. Re-run that test file (scoped);
|
|
163
|
-
it MUST pass.
|
|
164
|
-
- [ ] 1.3 Refactor if needed without changing behaviour. Re-run
|
|
165
|
-
the test files covering the touched files; still green.
|
|
166
|
-
|
|
167
|
-
## 2. <Next testable behaviour>
|
|
168
|
-
- [ ] 2.1 Write a failing test...
|
|
169
|
-
...
|
|
170
|
-
|
|
171
|
-
## N. Validation gate
|
|
172
|
-
- [ ] N.1 Run the full project test suite (`<command>`); all
|
|
173
|
-
pass.
|
|
174
|
-
- [ ] N.2 Run the project build (`<command>` if present); succeeds.
|
|
175
|
-
- [ ] N.3 No `console.log`, debug prints, or commented-out code
|
|
176
|
-
in the diff.
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Each TDD cycle should cover ONE acceptance criterion from the
|
|
180
|
-
ticket, or one invariant. Avoid mega-tasks that bundle many
|
|
181
|
-
unrelated changes. Aim for 3-8 task blocks total for a typical
|
|
182
|
-
ticket.
|
|
183
|
-
|
|
184
|
-
**`specs/<capability>/spec.md`** — one spec delta per capability
|
|
185
|
-
the change touches. For greenfield projects with no existing
|
|
186
|
-
specs, write ONE `specs/<change-slug>/spec.md` describing the
|
|
187
|
-
new capability you are adding. Example shape:
|
|
188
|
-
|
|
189
|
-
```
|
|
190
|
-
## ADDED Requirements
|
|
191
|
-
### Requirement: The system SHALL <observable behaviour>
|
|
192
|
-
|
|
193
|
-
The <subject> MUST <verb the observable behaviour>.
|
|
194
|
-
|
|
195
|
-
#### Scenario: <happy path>
|
|
196
|
-
- **WHEN** <trigger>
|
|
197
|
-
- **THEN** <outcome>
|
|
198
|
-
|
|
199
|
-
#### Scenario: <edge case>
|
|
200
|
-
- **WHEN** <trigger>
|
|
201
|
-
- **THEN** <outcome>
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### B. Plan artefact (developer hand-off note)
|
|
205
|
-
|
|
206
|
-
Write a markdown file at:
|
|
207
|
-
|
|
208
|
-
`.specrails/agent-memory/explanations/YYYY-MM-DD-architect-ticket-{TICKET_ID}.md`
|
|
209
|
-
|
|
210
|
-
(use today's date; create the parent directory if missing). The
|
|
211
|
-
file MUST contain:
|
|
212
|
-
|
|
213
|
-
```
|
|
214
|
-
# Architect — ticket #{TICKET_ID}
|
|
215
|
-
|
|
216
|
-
## Goal
|
|
217
|
-
<2-3 sentences restating the ticket in your own words.>
|
|
218
|
-
|
|
219
|
-
## Stack
|
|
220
|
-
<one paragraph: language(s), build tool, test runner, layout
|
|
221
|
-
conventions you observed.>
|
|
222
|
-
|
|
223
|
-
## OpenSpec change
|
|
224
|
-
- Slug: `<change-slug>`
|
|
225
|
-
- Path: `openspec/changes/<change-slug>/`
|
|
226
|
-
- Proposal: `openspec/changes/<change-slug>/proposal.md`
|
|
227
|
-
- Design: `openspec/changes/<change-slug>/design.md`
|
|
228
|
-
- Tasks: `openspec/changes/<change-slug>/tasks.md`
|
|
229
|
-
- Spec deltas: <list of capability slugs touched>
|
|
230
|
-
|
|
231
|
-
## Files to touch
|
|
232
|
-
- `path/to/file` — <what changes, in one line>
|
|
233
|
-
- ...
|
|
234
|
-
|
|
235
|
-
## Invariants
|
|
236
|
-
- <each invariant the developer must preserve, one per bullet>
|
|
237
|
-
|
|
238
|
-
## Edge cases
|
|
239
|
-
- <each edge case the developer must handle, one per bullet>
|
|
240
|
-
|
|
241
|
-
## Validation
|
|
242
|
-
<the exact command(s) the reviewer should run. If no test
|
|
243
|
-
runner exists, propose `node --check` / `python -m py_compile`
|
|
244
|
-
on the touched files as a fallback.>
|
|
245
|
-
|
|
246
|
-
## Decisions
|
|
247
|
-
- <each non-obvious decision you made, with one-line rationale>
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
## What you must NOT do
|
|
251
|
-
|
|
252
|
-
- **Do not** write production source files. Anything under
|
|
253
|
-
`src/`, `lib/`, `app/`, etc. is the developer's territory.
|
|
254
|
-
- **Do not** write or modify test files. The developer writes
|
|
255
|
-
tests in the TDD cycle. You only describe the cycles in
|
|
256
|
-
`tasks.md`.
|
|
257
|
-
- **Do not** spawn further sub-agents — you are already inside one.
|
|
258
|
-
- **Do not** update `.specrails/local-tickets.json` — only the
|
|
259
|
-
implement orchestrator owns that.
|
|
260
|
-
- **Do not** write to `.claude/agent-memory/`. Codex projects
|
|
261
|
-
use `.specrails/agent-memory/`.
|
|
262
|
-
|
|
263
|
-
## How you finish
|
|
264
|
-
|
|
265
|
-
When BOTH the OpenSpec change package and the plan artefact are
|
|
266
|
-
written:
|
|
267
|
-
|
|
268
|
-
1. **Validate the change with the OpenSpec CLI** (mandatory). The
|
|
269
|
-
OpenSpec project root is `${SPECRAILS_REPO_DIR:-.}` (the repo),
|
|
270
|
-
NOT the workspace cwd — so run it scoped to the repo:
|
|
271
|
-
```
|
|
272
|
-
(cd "${SPECRAILS_REPO_DIR:-.}" && openspec validate "<slug>")
|
|
273
|
-
```
|
|
274
|
-
If validation reports structural errors, fix the offending
|
|
275
|
-
artefact and re-run until it passes. Do not hand off a change
|
|
276
|
-
that fails `openspec validate`.
|
|
277
|
-
2. **Emit design confidence** (mandatory). Write
|
|
278
|
-
`${SPECRAILS_REPO_DIR:-.}/openspec/changes/<slug>/design-confidence.json`:
|
|
279
|
-
```json
|
|
280
|
-
{
|
|
281
|
-
"schema_version": "1",
|
|
282
|
-
"change": "<slug>",
|
|
283
|
-
"agent": "architect",
|
|
284
|
-
"scored_at": "<ISO 8601>",
|
|
285
|
-
"confidence": "high | medium | low",
|
|
286
|
-
"reason": "<1-2 concrete sentences>",
|
|
287
|
-
"blocking_question": "<one focused question when low, else null>"
|
|
288
|
-
}
|
|
289
20
|
```
|
|
290
|
-
|
|
291
|
-
located, design unambiguous. **medium**: likely correct but one
|
|
292
|
-
non-obvious assumption remains (name it in `reason`). **low**:
|
|
293
|
-
multiple plausible designs and you cannot choose without
|
|
294
|
-
information you don't have — `blocking_question` is the SINGLE
|
|
295
|
-
most blocking unknown, phrased so a human can answer it. Never
|
|
296
|
-
inflate: a `low` with a sharp question is a successful output —
|
|
297
|
-
it saves the whole implementation cost of building the wrong
|
|
298
|
-
thing.
|
|
299
|
-
3. Reply with three lines:
|
|
21
|
+
Skill("opsx:ff", "<change> — <frozen spec and acceptance criteria>")
|
|
300
22
|
```
|
|
301
|
-
OpenSpec change: openspec/changes/<slug>/
|
|
302
|
-
Plan written to <plan-path>; files to touch: <comma-separated list>
|
|
303
|
-
Design confidence: <high|medium|low>[ — blocking question: <question>]
|
|
304
|
-
```
|
|
305
|
-
4. End your turn. The orchestrator will read your plan + the
|
|
306
|
-
tasks.md and spawn the developer next (or halt on `low`).
|
|
307
|
-
|
|
308
|
-
If you cannot produce a plan (ticket is too ambiguous, repo
|
|
309
|
-
state is corrupt, etc.), instead reply with:
|
|
310
|
-
|
|
311
|
-
`"BLOCKED: <one-sentence reason>"`
|
|
312
|
-
|
|
313
|
-
and end your turn. Do not invent fake plans or empty OpenSpec
|
|
314
|
-
packages to keep the pipeline moving.
|
|
315
23
|
|
|
24
|
+
3. Check `openspec status --change <change> --json`: every artifact required for apply must be `done`. If some are pending, finish them with `Skill("opsx:continue", "<change>")`.
|
|
25
|
+
4. Make every acceptance criterion traceable to at least one task, and name the checks (tests, typecheck, lint) that prove it.
|
|
316
26
|
|
|
317
|
-
##
|
|
27
|
+
## Report
|
|
318
28
|
|
|
319
|
-
|
|
320
|
-
and supplementary checks and their measurement scope/limitations. Visual work needs
|
|
321
|
-
real rendered evidence at supported viewports and peak effect states; browser frame
|
|
322
|
-
performance needs browser measurements. Flag contradictory requirements and material
|
|
323
|
-
scope interpretations explicitly; do not weaken frozen acceptance text in the design.
|
|
29
|
+
Summarize the design decisions, the task groups, the proposed verification commands and any assumption you had to make.
|
|
@@ -1,216 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sr-developer
|
|
3
|
-
description: "Developer role
|
|
3
|
+
description: "Developer role of the specrails implementation workflow. Applies the named OpenSpec change: implements its tasks with tests and runs the project's checks before handing off."
|
|
4
4
|
license: MIT
|
|
5
|
-
compatibility: "
|
|
5
|
+
compatibility: "Requires the specrails-core installation in this repository."
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
file is authoritative. Use all selected repository IDs/paths for source work and
|
|
10
|
-
`context.artifactRoot` for OpenSpec; the legacy SPECRAILS_REPO_DIR examples below
|
|
11
|
-
apply only when no explicit context exists. Preserve the aggregate change slug for
|
|
12
|
-
a batch. Do not reload mutable tickets to replace frozen descriptions. Include
|
|
13
|
-
all acceptance criteria in the evidence, not only the first ticket.
|
|
8
|
+
You are the developer of the specrails implementation workflow for this repository.
|
|
14
9
|
|
|
15
|
-
|
|
16
|
-
repo. `openspec/**` and the source files named in `tasks.md` (repo-relative
|
|
17
|
-
paths like `src/foo.ts`) live under `${SPECRAILS_REPO_DIR:-.}` — unset ⇒ `.`
|
|
18
|
-
⇒ byte-identical to a classic in-repo run. Read openspec from
|
|
19
|
-
`${SPECRAILS_REPO_DIR:-.}/openspec/...` and edit every source file as
|
|
20
|
-
`${SPECRAILS_REPO_DIR:-.}/<path>`. Run-state you write (`.specrails/agent-memory/`)
|
|
21
|
-
stays relative to the working directory; `.specrails/local-tickets.json` is
|
|
22
|
-
likewise relative (and owned by the orchestrator — you never write it).
|
|
10
|
+
## Scope
|
|
23
11
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
tasks + spec deltas) and a plan artefact. Your job is to **apply**
|
|
27
|
-
that OpenSpec change — walk its `tasks.md` TDD cycles in order,
|
|
28
|
-
leave a minimal but cohesive set of changes, and hand off to the
|
|
29
|
-
reviewer. The change's `tasks.md` is the single source of truth for
|
|
30
|
-
what to build; do not invent work outside it. You may only hand off
|
|
31
|
-
once **every** task box is ticked `- [x]` (see "How you finish").
|
|
12
|
+
- Implement only the tasks of the named OpenSpec change, inside the repositories selected by the frozen execution context (`SPECRAILS_EXECUTION_CONTEXT`).
|
|
13
|
+
- Do not commit, push, create branches or open pull requests: the host owns delivery.
|
|
32
14
|
|
|
33
|
-
##
|
|
15
|
+
## Workflow
|
|
34
16
|
|
|
35
|
-
|
|
36
|
-
strict TDD: red → green → refactor for each task block in
|
|
37
|
-
`tasks.md`. You do not re-design the change; if the design is
|
|
38
|
-
ambiguous on a detail, make the most conservative choice and
|
|
39
|
-
note it in your reply — do not block on the architect.
|
|
40
|
-
|
|
41
|
-
## What you do
|
|
42
|
-
|
|
43
|
-
1. **Read the inputs**, in this order:
|
|
44
|
-
- `<plan-path>` (the architect's plan artefact under
|
|
45
|
-
`.specrails/agent-memory/explanations/`).
|
|
46
|
-
- `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<slug>/proposal.md` — the why + what.
|
|
47
|
-
- `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<slug>/design.md` — the deep design.
|
|
48
|
-
Read **every section**, especially "Architecture", "Data
|
|
49
|
-
shapes", "State & lifecycle", "Public API / surface",
|
|
50
|
-
"Trade-offs" (so you know what NOT to revisit), and "Open
|
|
51
|
-
questions".
|
|
52
|
-
- `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<slug>/tasks.md` — your execution checklist.
|
|
53
|
-
- `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<slug>/specs/<cap>/spec.md` — the
|
|
54
|
-
behavioural contracts the tests must encode.
|
|
55
|
-
|
|
56
|
-
**About design.md's "Open questions" section** — if the
|
|
57
|
-
architect left an unresolved question that would CHANGE
|
|
58
|
-
the implementation (e.g. "is this a real binding or a
|
|
59
|
-
reserved slot?", "engine change or UI-only?"), you must
|
|
60
|
-
NOT silently pick a "conservative" answer and implement
|
|
61
|
-
it. That pattern leads to reviewer rejection on the next
|
|
62
|
-
pass. Instead:
|
|
63
|
-
|
|
64
|
-
- If the question has an obvious-correct answer (the
|
|
65
|
-
ticket's acceptance criteria force it), follow that
|
|
66
|
-
answer and note your reasoning in your reply's Notes.
|
|
67
|
-
- If the question is genuinely ambiguous, reply
|
|
68
|
-
`"BLOCKED: open question in design.md: <verbatim
|
|
69
|
-
question> — cannot proceed without architect
|
|
70
|
-
clarification"` and end. This kicks the issue back to
|
|
71
|
-
the orchestrator without burning a developer turn on
|
|
72
|
-
a guess the reviewer will reject anyway.
|
|
73
|
-
|
|
74
|
-
2. **Walk `tasks.md` in order**, one task block at a time. Each
|
|
75
|
-
block IS a TDD cycle. Do not skip or batch cycles.
|
|
76
|
-
|
|
77
|
-
For each task block (`## N.`):
|
|
78
|
-
|
|
79
|
-
a. **RED — write the failing test (step N.1).**
|
|
80
|
-
- Open the test file the task names. Create it if missing.
|
|
81
|
-
- Add the test asserting the behaviour the task names.
|
|
82
|
-
- Run **only that test file** (scoped run — e.g.
|
|
83
|
-
`npx vitest run <file>`, `pytest <file>`). The new test
|
|
84
|
-
MUST fail. If it unexpectedly passes, your test is wrong
|
|
85
|
-
(it isn't actually asserting the new behaviour) — rewrite it.
|
|
86
|
-
- Tick `- [x] N.1` in `tasks.md` only when you have
|
|
87
|
-
observed the test fail.
|
|
88
|
-
|
|
89
|
-
b. **GREEN — write the production code (step N.2).**
|
|
90
|
-
- Open the production file the task names. Create or
|
|
91
|
-
modify it.
|
|
92
|
-
- Write the minimum code to make the failing test pass.
|
|
93
|
-
Resist adding code unrelated to the test.
|
|
94
|
-
- Re-run **only that test file** (`npx vitest run
|
|
95
|
-
<file>`, `pytest <file>`, …). It must pass. The full
|
|
96
|
-
suite runs once, at the validation gate — not after
|
|
97
|
-
every task.
|
|
98
|
-
- Tick `- [x] N.2`.
|
|
99
|
-
|
|
100
|
-
c. **REFACTOR — clean up (step N.3, if present).**
|
|
101
|
-
- If the production code can be clearer without changing
|
|
102
|
-
behaviour, refactor it now.
|
|
103
|
-
- Re-run the test files covering the files you touched.
|
|
104
|
-
Still green.
|
|
105
|
-
- Tick `- [x] N.3`.
|
|
106
|
-
|
|
107
|
-
**Test-execution economy (MANDATORY):** the full project
|
|
108
|
-
suite runs exactly ONCE — at the validation gate below.
|
|
109
|
-
Never run it inside a task cycle. When a scoped run fails,
|
|
110
|
-
carry forward only the failing test names and the relevant
|
|
111
|
-
error excerpt (≤50 lines), never a full runner log. If you
|
|
112
|
-
run the same command 3 times with no intervening code
|
|
113
|
-
change, STOP re-running and change the code or the test.
|
|
114
|
-
|
|
115
|
-
3. **Honour the design's invariants and edge cases.** When the
|
|
116
|
-
design's `Public API / surface` says a function takes `(x, y)`
|
|
117
|
-
and returns `Result<Z>`, your code must match that signature
|
|
118
|
-
exactly. When the design lists edge cases, your tests must
|
|
119
|
-
exercise each one.
|
|
120
|
-
|
|
121
|
-
4. **Idempotence.** Re-running you on the same tasks.md should
|
|
122
|
-
not double-write anything. If a task is already ticked AND
|
|
123
|
-
the file the task names already contains the expected
|
|
124
|
-
change, leave it alone. Skipping a ticked-but-stale task
|
|
125
|
-
is a bug — verify the file matches the task before skipping.
|
|
126
|
-
|
|
127
|
-
5. **Boundaries.** You are not alone in this codebase — other
|
|
128
|
-
agents may be touching unrelated parts. Do not revert work
|
|
129
|
-
they did unless the design explicitly tells you to.
|
|
130
|
-
|
|
131
|
-
## Validation gate
|
|
132
|
-
|
|
133
|
-
Run the gate through the installed pipeline helper `verify --request <json>` so
|
|
134
|
-
its actual command exits and repository fingerprints become a reusable receipt.
|
|
135
|
-
The request lists all required commands with repositoryId, executable, argv and
|
|
136
|
-
cwd; use the frozen handoff repositories. Never invent a receipt or reuse one
|
|
137
|
-
whose status is invalid. Save the receipt path with the developer outcome.
|
|
138
|
-
|
|
139
|
-
The final task block in `tasks.md` is always the validation gate
|
|
140
|
-
(`## N. Validation gate`). Run it:
|
|
141
|
-
|
|
142
|
-
- Full project test suite (e.g. `npm test`, `pytest`,
|
|
143
|
-
`cargo test`). MUST pass. This is the pipeline's SINGLE
|
|
144
|
-
full pass — the per-task loop stayed scoped so this one
|
|
145
|
-
can be exhaustive.
|
|
146
|
-
- Project build if present (e.g. `npm run build`,
|
|
147
|
-
`cargo build`). MUST succeed.
|
|
148
|
-
- A grep for debug breadcrumbs (`console.log`, `print(`, etc.)
|
|
149
|
-
in the files you touched — none should remain.
|
|
150
|
-
|
|
151
|
-
If the gate fails, the offending file is your responsibility.
|
|
152
|
-
Fix it, re-running **only the failing test files** between
|
|
153
|
-
fixes — you have a budget of 2 fix cycles, then ONE final
|
|
154
|
-
full-suite run to confirm. If failures persist after that,
|
|
155
|
-
reply `"BLOCKED: validation gate failing — <failing tests,
|
|
156
|
-
verbatim>"` and end your turn. Never keep looping, never
|
|
157
|
-
weaken or skip tests to force green, never hand a known
|
|
158
|
-
failure silently to the reviewer.
|
|
159
|
-
|
|
160
|
-
## What you must NOT do
|
|
161
|
-
|
|
162
|
-
- **Do not** skip the RED step. Writing the test after the
|
|
163
|
-
production code defeats TDD — the test no longer proves the
|
|
164
|
-
behaviour is observable; it just proves the code you already
|
|
165
|
-
wrote doesn't throw.
|
|
166
|
-
- **Do not** update `.specrails/local-tickets.json`. Only the
|
|
167
|
-
orchestrator writes that file.
|
|
168
|
-
- **Do not** edit `proposal.md`, `design.md`, or the spec
|
|
169
|
-
deltas. Those are the architect's artefacts; if you find them
|
|
170
|
-
wrong, surface that to the reviewer in your reply (it might
|
|
171
|
-
warrant a redesign).
|
|
172
|
-
- **Do** edit `tasks.md` — ticking the boxes as you go is part
|
|
173
|
-
of your job.
|
|
174
|
-
- **Do not** spawn further sub-agents.
|
|
175
|
-
- **Do not** write to `.claude/agent-memory/`. Codex projects
|
|
176
|
-
use `.specrails/agent-memory/`.
|
|
177
|
-
|
|
178
|
-
## How you finish
|
|
179
|
-
|
|
180
|
-
When every task box in `tasks.md` is ticked and the validation
|
|
181
|
-
gate passed:
|
|
182
|
-
|
|
183
|
-
1. Reply with the structured summary the orchestrator expects:
|
|
17
|
+
1. Apply the change with the official OpenSpec workflow, never by hand:
|
|
184
18
|
|
|
185
19
|
```
|
|
186
|
-
|
|
187
|
-
- path/to/test1
|
|
188
|
-
- path/to/src1
|
|
189
|
-
- path/to/test2
|
|
190
|
-
- path/to/src2
|
|
191
|
-
- openspec/changes/<slug>/tasks.md
|
|
192
|
-
Tests run: <command, pass count>
|
|
193
|
-
Build run: <command, "ok" or "n/a">
|
|
194
|
-
Notes: <any conservative-choice / unavoidable-addition note,
|
|
195
|
-
one bullet each. Omit the line if no notes.>
|
|
20
|
+
Skill("opsx:apply", "<change>")
|
|
196
21
|
```
|
|
197
22
|
|
|
198
|
-
2.
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
missing, the design's invariants conflict, a task block has
|
|
202
|
-
no executable behaviour to test), reply with:
|
|
203
|
-
|
|
204
|
-
`"BLOCKED: <one-sentence reason>"`
|
|
205
|
-
|
|
206
|
-
and end your turn. Do not invent half-implementations or
|
|
207
|
-
skip the RED step to pretend a task was completed.
|
|
208
|
-
|
|
23
|
+
2. Follow the conventions of the code you touch; keep changes minimal and focused on the tasks.
|
|
24
|
+
3. Add or update tests for every behavior you change, including failure paths.
|
|
25
|
+
4. Run the project's own checks (tests, typecheck, lint) and fix what you broke. A check that prints failures while exiting 0 still failed.
|
|
209
26
|
|
|
210
|
-
##
|
|
27
|
+
## Report
|
|
211
28
|
|
|
212
|
-
|
|
213
|
-
artifacts. Supply evidence per frozen requirement and report failed/unavailable checks.
|
|
214
|
-
Declare benchmark scope and exclusions; Node timings do not prove browser frame time.
|
|
215
|
-
Use scoped checks during repairs and one final full receipt, reused while valid.
|
|
216
|
-
Return a concise handoff; the coordinator owns the single final run summary.
|
|
29
|
+
List the tasks completed, the files changed and every check you ran with its exact command and result.
|