@oevery/rsp 3.1.0-beta.5 → 3.1.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 +45 -351
- package/README.zh-CN.md +46 -335
- package/dist/{chunk-3X2V6IEW.mjs → chunk-3Z4IO2TD.mjs} +1 -1
- package/dist/{chunk-ZKZVWJQ7.mjs → chunk-MUNLLVVH.mjs} +1 -1
- package/dist/{chunk-UVYEXKYS.mjs → chunk-WJXKLLIF.mjs} +1 -2
- package/dist/cli.mjs +5 -5
- package/dist/{entry-ETZGIFKP.mjs → entry-IPHJBI53.mjs} +2 -2
- package/dist/{entry-BKEJDNOQ.mjs → entry-KAWA2AS4.mjs} +2 -2
- package/package.json +10 -3
- package/skills/rsp-commit/SKILL.md +3 -1
package/README.md
CHANGED
|
@@ -4,387 +4,81 @@ English | [简体中文](./README.zh-CN.md)
|
|
|
4
4
|
|
|
5
5
|
**A repository-native engineering workflow for humans and AI agents.**
|
|
6
6
|
|
|
7
|
-
RSP
|
|
8
|
-
|
|
9
|
-
The workflow rests on a lightweight artifact foundation of **Rules, Specs, and Plans**.
|
|
7
|
+
RSP turns unclear intent into shaped, implemented, reviewed, and verified software changes while keeping project knowledge durable and work recoverable. It uses ordinary repository files—Rules, Specs, and Plans—rather than hidden workflow state.
|
|
10
8
|
|
|
11
9
|
## What RSP helps you do
|
|
12
10
|
|
|
13
|
-
- Shape ambiguous work into
|
|
14
|
-
- Resolve
|
|
15
|
-
- Route
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- Prepare or reconcile release documentation for an explicit confirmed release operation; use a Release Change only when material coordination needs a persistent owner.
|
|
19
|
-
|
|
20
|
-
## How the workflow fits together
|
|
11
|
+
- Shape ambiguous work into an executable Change.
|
|
12
|
+
- Resolve design questions from repository evidence before implementation.
|
|
13
|
+
- Route diagnosis, implementation, TDD, review, and release work to explicit capabilities.
|
|
14
|
+
- Preserve current facts, lasting rationale, scoped instructions, and completed history in the right owners.
|
|
15
|
+
- Keep authority visible: RSP never infers permission to commit, publish, deploy, or approve work.
|
|
21
16
|
|
|
22
17
|
```text
|
|
23
|
-
intent
|
|
24
|
-
|
|
25
|
-
→ design when needed
|
|
26
|
-
→ diagnose | TDD | implement
|
|
27
|
-
→ review → address accepted findings
|
|
28
|
-
→ release docs for an explicit confirmed operation
|
|
29
|
-
→ durable review → archive
|
|
18
|
+
intent → shape → design when needed → diagnose | TDD | implement
|
|
19
|
+
→ review → durable review → archive
|
|
30
20
|
```
|
|
31
21
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## Quick start
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npx -y @oevery/rsp@3.1.0-beta.5 init
|
|
38
|
-
npx -y @oevery/rsp@3.1.0-beta.5 doctor
|
|
39
|
-
```
|
|
22
|
+
## Five-minute start
|
|
40
23
|
|
|
41
|
-
|
|
24
|
+
RSP 3.1 requires Node.js 22 or later. Use the current stable release:
|
|
42
25
|
|
|
43
26
|
```bash
|
|
44
|
-
npx -y @oevery/rsp@
|
|
27
|
+
npx -y @oevery/rsp@latest init --with-project-setup
|
|
45
28
|
# fill .rsp/changes/project-setup.md
|
|
46
29
|
# fill .rsp/specs/design.md
|
|
47
|
-
npx -y @oevery/rsp@
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Artifact foundation
|
|
51
|
-
|
|
52
|
-
`Reliable Software Practice` is the product promise; `Rules, Specs, Plans` describes the lightweight artifact model that makes the workflow repository-native:
|
|
53
|
-
|
|
54
|
-
- nearest `AGENTS.md` stores scoped project or module instructions.
|
|
55
|
-
- `rsp-rules.md` is the minimal tool-agnostic fallback protocol.
|
|
56
|
-
- `specs/` stores project-level source-of-truth docs.
|
|
57
|
-
- `changes/` stores open work in a single-file format.
|
|
58
|
-
- `focus.d/` mirrors current focused changes with empty marker files.
|
|
59
|
-
- `archives/` stores completed work.
|
|
60
|
-
|
|
61
|
-
```text
|
|
62
|
-
.rsp/
|
|
63
|
-
├── rsp-rules.md # minimal fallback protocol
|
|
64
|
-
├── specs/
|
|
65
|
-
│ ├── 00-index.md # auto-generated direct-child navigation
|
|
66
|
-
│ ├── design.md
|
|
67
|
-
│ ├── decisions/ # authoritative Decision Records by default; excluded from Specs indexes
|
|
68
|
-
│ └── <domain>/
|
|
69
|
-
│ ├── 00-index.md # auto-generated direct-child navigation
|
|
70
|
-
│ └── <spec>.md
|
|
71
|
-
├── changes/
|
|
72
|
-
│ ├── <name>.md
|
|
73
|
-
│ └── <group>/
|
|
74
|
-
│ ├── 00-brief.md
|
|
75
|
-
│ └── <change>.md
|
|
76
|
-
├── focus.d/
|
|
77
|
-
│ └── <name>
|
|
78
|
-
└── archives/
|
|
79
|
-
└── YYYY-MM-DD_<change>.md
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Concepts
|
|
83
|
-
|
|
84
|
-
- `specs/` describes durable project facts and current agreed design.
|
|
85
|
-
- Decision Records describe lasting rationale, alternatives, tradeoffs, and consequences for hard-to-reverse choices. They default to `.rsp/specs/decisions/` or use one configured external path.
|
|
86
|
-
- `changes/` captures open work, including features, fixes, refactors, docs, ops, and research.
|
|
87
|
-
- A change is always a single Markdown file with explicit sections for proposal, spec, design, tasks, verification, and blockers.
|
|
88
|
-
- Keep each Change as a current-plan and final-evidence snapshot: choose the smallest decisive verification, retain new tests only when they add lasting value, and keep temporary probes and execution chronology out of persistent artifacts. Persistent prose names the real domain, system, user, or operator; it mentions AI or agents only when they are actual product participants or constraints.
|
|
89
|
-
- An exact blocker line, `- requires \`<change-work-ref>\`: <reason>`, declares a dependency on another executable Change. Free-form blockers stay external; RSP never guesses edges from prose. Archived prerequisites resolve automatically.
|
|
90
|
-
- Change names are either flat (`<change>`) or one direct grouped child (`<group>/<change>`). Recursive work directories are rejected.
|
|
91
|
-
- A Change Group is optional and is the only composite work shape. Its non-executable, non-focusable logical identity `<group>/brief`, physically stored as `<group>/00-brief.md`, owns the shared goal, constraints, declared slices, completion conditions, durable outcomes, and blockers for at least two direct child Changes.
|
|
92
|
-
- Create a group before its children. Every grouped Change must be declared by the brief, is focused and archived independently, and includes the brief in its context. With no focus, `status` uses Brief declaration order and current blockers to recommend the first executable slice. `status`, `check`, and `doctor` derive group health and completion without persisting another state; `rsp group close` archives only a completed brief. `rsp group create` never reuses an archived identity; `rsp group reopen <group> --reason <text>` explicitly restores one retained Brief snapshot as unfinished, unfocused continuation of that same Group.
|
|
93
|
-
- A Group Brief blocker is inherited by its direct children as an external blocker in the derived execution plan; it does not create guessed dependency edges.
|
|
94
|
-
- A Markdown file and directory cannot claim the same work identity.
|
|
95
|
-
- `rsp status`, `rsp check`, and `rsp doctor` inspect the same complete work tree and dependency facts. `status` derives exact edges with their reasons, ready work, blockers, and stable waves without a graph file; `check` and `doctor` reject incomplete archive inspection, malformed or missing targets, self-dependencies, and cycles. The `changes/` root must exist as a real directory, and existing focus/archive roots and group prefixes must also be real directories. Unsupported directories, non-Markdown entries, symlinks, missing or unreadable current work, incomplete reads, and identity collisions are visible errors. `status` exits non-zero instead of hiding invalid work.
|
|
96
|
-
- `rsp init`, `rsp update`, `rsp add spec`, and the generated Specs index builder apply the same no-follow managed-path checks. Archive discovery accepts only flat archive files or one real group directory; recursively organized Specs accept only real directories and regular files.
|
|
97
|
-
- Final managed files—such as the project `AGENTS.md`, focus markers, fallback/config files, the generated Specs index, and placeholders—must also be regular files; RSP rejects static symlink targets before reading or writing them.
|
|
98
|
-
- Completed changes move to `archives/`. Stable current facts belong in Specs; lasting rationale belongs in Decision Records; stable scoped operating instructions belong in nearest project-owned `AGENTS.md`.
|
|
99
|
-
- When later evidence shows that the original acceptance was not actually met, `rsp reopen <work-ref> --reason <text>` restores the same executable WorkRef as focused open work and retains the selected archive as history. If its Group is closed, first use `rsp group reopen <group> --reason <text>`, then reopen only the incomplete child. Multiple matching Change or Group archives require an exact `--from .rsp/archives/...` path. Group reopen creates no focus and never reopens children or dependents. Use a new corrective Change for genuinely new scope or an independently delivered correction; reopening never rewrites Git or published history.
|
|
100
|
-
- Do not promote task history, debugging notes, or one-off implementation context into Specs, Decision Records, or project instructions.
|
|
101
|
-
- Managed progress questions report current evidence and do not implicitly pause an authorized run. Explicit pause confirms active work has stopped but preserves the focused WorkRef; only explicit release or `rsp unfocus` clears selection. Blocked or paused runs return a response-only continuation, and resume rereads authority, status, diff, blockers, and verification before requalifying Manage. RSP persists no paused or controller state.
|
|
102
|
-
- Change `Spec` delta markers (`### ADDED`, `### MODIFIED`, `### REMOVED`) are planning aids only. `rsp archive` does not automatically promote them into Specs or Decision Records. Durable writeback remains an explicit semantic decision.
|
|
103
|
-
- `rsp check` performs deterministic hygiene checks. It warns about unfinished template placeholders and unresolved clarification markers, but those warnings do not replace the semantic durable-update decision.
|
|
104
|
-
|
|
105
|
-
## File ownership
|
|
106
|
-
|
|
107
|
-
- `AGENTS.md`: only the `<!-- rsp:begin --> ... <!-- rsp:end -->` block is managed by RSP.
|
|
108
|
-
- `.rsp/specs/**/00-index.md`: fully generated direct-child navigation for the root and populated Spec directories. Reconcile all local indexes with `rsp update`; `rsp add spec` refreshes only the affected directory chain.
|
|
109
|
-
- `.rsp/specs/design.md`: created by `rsp init`, then owned by the project.
|
|
110
|
-
- `.rsp/specs/decisions/`: the default authoritative Decision Record directory; configure `decisions.path` only when the Host Project already owns one external ADR directory.
|
|
111
|
-
- `.rsp/rsp-rules.md`: generated minimal fallback protocol; use the `rsp` skill when available.
|
|
112
|
-
- Keep project-wide boundaries in `.rsp/specs/design.md`; use the nearest `00-index.md` to discover cohesive reusable facts in the smallest domain Spec.
|
|
113
|
-
- Treat every `00-index.md` as generated navigation, never as an editable current-fact or rationale owner. Each index lists only direct child Specs and populated child Spec directories; Decision Records are excluded.
|
|
114
|
-
- Keep stable scoped workflow and validation instructions in the nearest project-owned `AGENTS.md`, outside the managed RSP block.
|
|
115
|
-
|
|
116
|
-
## Decision Record path
|
|
117
|
-
|
|
118
|
-
The default authoritative directory is `.rsp/specs/decisions/`. If the Host Project already owns ADRs elsewhere, configure exactly one project-relative external path:
|
|
119
|
-
|
|
120
|
-
```yaml
|
|
121
|
-
decisions:
|
|
122
|
-
path: docs/adr
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
The path cannot be absolute, escape the Host Project, or point at another `.rsp/` core location. `rsp init` and `rsp update` validate routing before managed writes and ensure the directory exists; `rsp show` and `rsp ready` refuse unsafe routing; `rsp doctor` validates directory readability and migration health. These commands never create a Decision Record. Switching to an external path does not migrate existing default records: `rsp doctor` reports inactive `.rsp/specs/decisions/*.md` files until they are moved or deliberately removed.
|
|
126
|
-
|
|
127
|
-
## AGENTS integration
|
|
128
|
-
|
|
129
|
-
Managed block example:
|
|
130
|
-
|
|
131
|
-
```md
|
|
132
|
-
<!-- rsp:begin -->
|
|
133
|
-
## RSP Entry
|
|
134
|
-
|
|
135
|
-
RSP tracks current work, stable specs, and archives under `.rsp/`.
|
|
136
|
-
|
|
137
|
-
Read in order:
|
|
138
|
-
1. Nearest `AGENTS.md` for project or module instructions.
|
|
139
|
-
2. Root `CONTEXT-MAP.md` if present, then the relevant nearest `CONTEXT.md`.
|
|
140
|
-
3. The `rsp` skill; if unavailable, read `.rsp/rsp-rules.md` as the fallback protocol.
|
|
141
|
-
4. `.rsp/focus.d/`; for grouped work read the sibling Group Brief, then the explicitly selected focused Change.
|
|
142
|
-
5. Only the relevant Specs and Decision Records under the configured authoritative path.
|
|
143
|
-
|
|
144
|
-
If `.rsp/focus.d/` is empty and the user has not provided a concrete task, ask what to work on or suggest `npx -y @oevery/rsp create <name>` for tracked work.
|
|
145
|
-
Do not treat `.rsp/specs/` or `.rsp/changes/` as replacements for nearest `AGENTS.md` or `CONTEXT.md`.
|
|
146
|
-
<!-- rsp:end -->
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
`rsp init --agents-mode <mode>`:
|
|
150
|
-
|
|
151
|
-
- `managed`: create `AGENTS.md` when needed and insert/update the managed block.
|
|
152
|
-
- `print`: initialize normally and also print the resulting `AGENTS.md` content.
|
|
153
|
-
|
|
154
|
-
## Skills
|
|
155
|
-
|
|
156
|
-
RSP publishes eleven default host-neutral lifecycle Skills for on-demand loading, plus one explicitly installed project-level audit Skill:
|
|
157
|
-
|
|
158
|
-
| Skill | Role |
|
|
159
|
-
|---|---|
|
|
160
|
-
| `rsp` | Derive the next action; guide setup, durable review, and archive decisions. |
|
|
161
|
-
| `rsp-shape` | Shape one executable Change or justified shallow Group without implementation. |
|
|
162
|
-
| `rsp-design` | Resolve one bounded domain, module/seam, or reversible-exploration question before or within tracked work. |
|
|
163
|
-
| `rsp-implement` | Implement one selected ready Change with fresh verification. |
|
|
164
|
-
| `rsp-diagnose` | Confirm a cause, or return a truthful unresolved diagnosis, before correction. |
|
|
165
|
-
| `rsp-tdd` | Drive one clear behavior through RED, GREEN, and safe REFACTOR. |
|
|
166
|
-
| `rsp-review` | Review a fixed code, document, or mixed comparison without mutation. |
|
|
167
|
-
| `rsp-resolve-findings` | Dispose fixed findings, correct accepted ones, verify, and request re-review. |
|
|
168
|
-
| `rsp-commit` | Create one authorized exact-scope local commit with a repository-consistent structured message. |
|
|
169
|
-
| `rsp-release-docs` | Draft, audit, finalize, or reconcile evidence-based release surfaces. |
|
|
170
|
-
| `rsp-manage` | Continue one explicitly requested or project-enabled eligible ready Change or shallow Group. |
|
|
171
|
-
| `rsp-structural-audit` (optional) | Audit one bounded repository or subtree for evidence-backed structural risks without mutation. |
|
|
172
|
-
|
|
173
|
-
Each lifecycle Skill returns to an existing project or RSP owner. Report-only Pre-Change Design and `rsp-structural-audit` may return one bounded result directly to the user without inventing an artifact owner. The suite adds no hidden workflow state or recursive Skill orchestration. No Skill infers commit, push, publication, deployment, approval, or human-acceptance authority.
|
|
174
|
-
|
|
175
|
-
Response language is user/session-owned; artifact and commit-message language are durable project surfaces. Project `.rsp/config.yaml` never selects response language: response prose follows an explicit current request, user/host personal instructions, then conversation language. A project may set one durable `language.default` and independently override `language.artifacts` or `language.commit`. New authorized artifact prose follows an explicit artifact request, the configured effective artifact language, artifact-specific project instructions, then conversation language; existing artifacts keep their established language unless translation is explicitly authorized. Commit prose follows an explicit current commit-language instruction, configured effective commit language, repository commit authority, then clear recent non-merge history. Configuration changes never rewrite existing artifacts. CLI-generated scaffolds contain canonical structural tokens, neutral `<…>` placeholders, and verbatim user input instead of a locale catalog or silent English prose fallback; Core and discipline Skills fill their authorized natural-language content. Canonical RSP headings, paths, commands, identifiers, Conventional Commit types/scopes, trailers, and machine-consumed values remain unchanged; WorkRefs use the safe Unicode identity contract rather than the prose-language fallback chain.
|
|
176
|
-
|
|
177
|
-
```yaml
|
|
178
|
-
language:
|
|
179
|
-
default: en
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
`default` is required when the mapping is present and supplies both durable surfaces. Optional `artifacts` and `commit` override only their respective surfaces. `response` is intentionally unsupported because a shared repository must not constrain each collaborator's conversation language. Omit `language` entirely to leave both durable values unset. Plain status shows configured durable values, while status JSON always exposes `language.artifacts` and `language.commit` as a canonical language tag or `null`. Language configuration never grants staging, commit, push, or publication authority.
|
|
183
|
-
|
|
184
|
-
Compose the suite from evidence: an explicit bounded question may enter report-only Pre-Change Design before Shape; otherwise Shape settles the executable owner and Tracked Design returns one material question to it. Core then chooses Diagnose, TDD, or Implement; Review stays report-only; Resolve Findings corrects accepted findings and requests re-review; Core performs the durable decision before archive. An explicit release operation with a confirmed identity or range may enter Release Docs without a Release Change; create one only for material decisions, coordination, recovery, blockers, or acceptance. Manage is optional: it accepts one selected ready Change or shallow Group that needs independent dispatch, long continuation, or recovery, while small or coupled work stays direct. Projects may keep explicit activation or let Core select eligible managed work automatically.
|
|
185
|
-
|
|
186
|
-
### Managed automation policy
|
|
187
|
-
|
|
188
|
-
Configure automatic selection and local closeout independently in `.rsp/config.yaml`:
|
|
189
|
-
|
|
190
|
-
```yaml
|
|
191
|
-
manage:
|
|
192
|
-
activation: auto
|
|
193
|
-
closeout: lifecycle
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
`activation` is `explicit` or `auto`. `auto` authorizes Core to select Manage for an eligible requested completion or continuation; it does not grant planning, product-mutation, lifecycle, Git, or external authority. `closeout` is one of:
|
|
197
|
-
|
|
198
|
-
- `manual`: neither archive nor commit is automatic.
|
|
199
|
-
- `lifecycle`: archive may follow durable review, but commit still needs separate authority.
|
|
200
|
-
- `local`: lifecycle closeout plus separately justified recovery checkpoints; after lifecycle closeout, a qualified clean verified terminal non-small boundary routes once to `rsp-commit`, while terminal small work stays uncommitted.
|
|
201
|
-
|
|
202
|
-
Change granularity follows one observable outcome and its shared acceptance, verification, review, archive, and rollback boundary; it does not prescribe Git commit count. Each `rsp-commit` invocation still creates exactly one local commit.
|
|
203
|
-
|
|
204
|
-
New `rsp init` config templates use the shown `auto` plus `lifecycle` policy. If `manage` is absent, RSP instead resolves `activation: explicit` and `closeout: local` for compatibility with the previous explicitly requested Manage behavior. Plain `rsp status` and the top-level `manage` object in `rsp status --json` show the resolved values. Nearest scoped restrictions and host enforcement can narrow the configured ceiling. RSP intentionally has no `full` preset: push, tag, publication, deployment, approval, and human acceptance remain explicit and external.
|
|
205
|
-
|
|
206
|
-
Humans should start with this README. Agents should follow the nearest `AGENTS.md`, prefer `skills/rsp/SKILL.md`, and use `.rsp/rsp-rules.md` only when the Skill is unavailable.
|
|
207
|
-
|
|
208
|
-
When this README shows `rsp <command>`, it assumes the command is already available in your environment. For opt-in beta evaluation, pin the exact prerelease identity, such as `npx -y @oevery/rsp@3.1.0-beta.5 <command>`; stable users can keep using the unversioned package entrypoint for npm `latest`.
|
|
209
|
-
|
|
210
|
-
Install the exact package's default lifecycle suite into the current project:
|
|
211
|
-
|
|
212
|
-
```bash
|
|
213
|
-
rsp skills install --dry-run
|
|
214
|
-
rsp skills install
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
On a dual TTY, `rsp skills` opens the interactive manager: the default suite is selected and locked, while optional project Skills can be selected before one confirmed atomic install. For scripts, redirected terminals, and CI, use the deterministic discovery and install commands:
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
rsp skills list
|
|
221
|
-
rsp skills list --json
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
The command preflights the eleven default package-owned targets, leaves unrelated `.agents/skills` entries (including optional Skills) untouched, and requires explicit `--force` before replacing a divergent selected directory. Install the optional project-level audit Skill by exact name:
|
|
225
|
-
|
|
226
|
-
When upgrading an installation that still contains `rsp-address-review` or `rsp-codebase-audit`, their replacements are `rsp-resolve-findings` and `rsp-structural-audit`. The installer stops without mutation until `--force` explicitly authorizes transactional removal of the obsolete package-owned directory; `--dry-run --force` previews both removal and installation.
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
rsp skills install rsp-structural-audit --dry-run
|
|
230
|
-
rsp skills install rsp-structural-audit
|
|
30
|
+
npx -y @oevery/rsp@latest doctor
|
|
231
31
|
```
|
|
232
32
|
|
|
233
|
-
|
|
33
|
+
Then create and focus one tracked change:
|
|
234
34
|
|
|
235
35
|
```bash
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
Exact prerelease identities avoid depending on a moving dist-tag. `rsp update` refreshes RSP-managed project files only; run `rsp skills install` separately to refresh the package-owned Skill suite.
|
|
241
|
-
|
|
242
|
-
## Migrating from 2.x
|
|
243
|
-
|
|
244
|
-
Version 3 uses `.rsp/rsp-rules.md` as the only runtime fallback path and removes project rules from the RSP model:
|
|
245
|
-
|
|
246
|
-
See the [complete 3.0 migration guide](https://github.com/oevery/rsp/blob/v3.0.0/docs/migrations/3.0.md) for compatibility, recovery, and validation details.
|
|
247
|
-
|
|
248
|
-
1. Upgrade the RSP CLI.
|
|
249
|
-
2. Run `rsp update` to create the canonical fallback and remove the obsolete generated `.rsp/rules/rsp-rules.md`.
|
|
250
|
-
3. If `.rsp/rules/` remains, move only stable scoped instructions from its residual entries into the nearest project-owned `AGENTS.md`, then remove the obsolete entries.
|
|
251
|
-
4. Flatten any work path deeper than `.rsp/changes/<group>/<change>.md`, and resolve any `.rsp/changes/<name>.md` versus `.rsp/changes/<name>/` collision manually.
|
|
252
|
-
5. Run `rsp doctor` and resolve every remaining migration issue.
|
|
253
|
-
|
|
254
|
-
Repository maintainers can track external skill and workflow sources as offline review inputs. This tooling is intentionally excluded from the published package; see the [source-checkout maintainer guide](https://github.com/oevery/rsp/blob/main/docs/upstreams.md).
|
|
255
|
-
|
|
256
|
-
## Work Model
|
|
257
|
-
|
|
258
|
-
```text
|
|
259
|
-
open → archived
|
|
36
|
+
rsp create improve-login "Make login failures actionable"
|
|
37
|
+
rsp focus improve-login
|
|
38
|
+
rsp show --focused
|
|
260
39
|
```
|
|
261
40
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
- `changes/`: open changes
|
|
265
|
-
- `focus.d/`: currently focused changes
|
|
266
|
-
- `archives/`: completed history
|
|
267
|
-
|
|
268
|
-
Inside `open`, typical work includes:
|
|
269
|
-
|
|
270
|
-
- `create`: create and scope a change.
|
|
271
|
-
- `focus` / `unfocus`: decide which open change is currently foregrounded.
|
|
272
|
-
- Edit the change file directly — fill sections, mark tasks, write design decisions.
|
|
273
|
-
- Review whether durable updates are needed before archive.
|
|
274
|
-
|
|
275
|
-
During implementation, keep the change file and the actual work in sync: complete `## Tasks` checkboxes as code lands, update `## Verify` with the checks actually run, and revise `## Design` if implementation discoveries change the plan.
|
|
276
|
-
|
|
277
|
-
`archive` moves completed work into history. Archive never blocks — it warns but leaves the final decision to the agent or human.
|
|
278
|
-
|
|
279
|
-
Agents should treat only entries in `focus.d/` as current work. Unfocused files in `changes/` are still open, but should not be treated as the current target unless the user explicitly asks for them or they are re-focused.
|
|
280
|
-
|
|
281
|
-
Durable review makes two independent semantic choices: whether current facts or scoped instructions need an update, and whether lasting rationale needs a Decision Record. The RSP skill or a human reviewer owns both judgments.
|
|
282
|
-
|
|
283
|
-
`rsp ready` and `rsp show` expose deterministic readiness and semantic-review signals without turning deterministic success into an archive action. Deterministic readiness comes from checkboxes, blockers, and scenarios; Core or a human still owns the durable-update decision and the advisory archive recommendation.
|
|
284
|
-
|
|
285
|
-
`rsp ready --json` and `rsp show --json` include `durableReview.factDecisions`, `rationaleDecisions`, `factCandidateTargets`, and the one authoritative `decisionRecordsPath`. This is routing guidance only; RSP does not fabricate filenames or promote Change content automatically.
|
|
286
|
-
|
|
287
|
-
## Recommended workflow
|
|
288
|
-
|
|
289
|
-
New project:
|
|
41
|
+
Follow the nearest `AGENTS.md`, edit the focused Change as work progresses, run fresh project checks, make the durable-update decision, and archive only after acceptance is satisfied.
|
|
290
42
|
|
|
291
|
-
|
|
292
|
-
2. Prefer `npx -y @oevery/rsp@3.1.0-beta.5 init --with-project-setup`, or run `rsp create project-setup` manually
|
|
293
|
-
3. Fill `.rsp/specs/design.md`
|
|
294
|
-
4. Use `rsp add spec <name>` only when a new durable project doc is needed
|
|
295
|
-
5. Keep lasting rationale in the configured Decision Record directory and stable scoped operating instructions in the nearest project-owned `AGENTS.md`
|
|
296
|
-
6. For tracked open work, start with `rsp create <name>`
|
|
297
|
-
7. If you want an existing open change to become current work, use `rsp focus <name>`
|
|
298
|
-
8. Use `rsp unfocus <name>` when you want to remove a change from the current focus set
|
|
299
|
-
9. Edit the change file directly to implement the work and mark tasks complete
|
|
300
|
-
10. Use the RSP skill or a human review to decide whether durable updates are needed
|
|
301
|
-
11. After Core recommends archive, run `rsp archive <name>` before final Git delivery; inspect the complete resulting worktree and obtain Git authority separately
|
|
302
|
-
12. If later evidence invalidates the original completion, run `rsp reopen <name> --reason <text>` and resolve the restored unfinished Task and Verify evidence under the same WorkRef
|
|
43
|
+
[Read the full getting-started guide](./docs/site/en/getting-started.md).
|
|
303
44
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
1. `npx -y @oevery/rsp@3.1.0-beta.5 init`
|
|
307
|
-
2. Keep the managed block thin
|
|
308
|
-
3. Keep project-wide boundaries and navigation in `.rsp/specs/design.md`, and route cohesive durable facts to the smallest domain Spec
|
|
309
|
-
4. Use `rsp add spec <name>` only when another durable current-fact document is needed
|
|
310
|
-
|
|
311
|
-
AI-assisted setup:
|
|
312
|
-
|
|
313
|
-
1. `npx -y @oevery/rsp@3.1.0-beta.5 init --agents-mode print --with-project-setup`
|
|
314
|
-
2. Keep the managed block as generated and adapt only the surrounding human-owned content if needed
|
|
315
|
-
3. Have the AI review and fill `.rsp/changes/project-setup.md`
|
|
316
|
-
4. Have the AI fill `.rsp/specs/design.md`
|
|
317
|
-
5. Run `rsp doctor`
|
|
318
|
-
|
|
319
|
-
## CLI
|
|
45
|
+
## Artifact model
|
|
320
46
|
|
|
321
47
|
```text
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
rsp skills install [name] [--dry-run] [--force]
|
|
329
|
-
Install the default eleven Skills or one exact optional Skill into .agents/skills
|
|
330
|
-
rsp add spec <name> Create .rsp/specs/<name>.md and rebuild specs index
|
|
331
|
-
rsp create <name> [summary] Create .rsp/changes/<name>.md; add --lite or --issue <url> [--issue-relation relates|closes]
|
|
332
|
-
rsp group create <name> [goal] Create an unfocused .rsp/changes/<name>/00-brief.md
|
|
333
|
-
rsp group close <name> Archive a completed Group Brief after every child is archived
|
|
334
|
-
rsp group reopen <name> --reason <text> [--from <archive-path>]
|
|
335
|
-
Restore the same Group Brief as unfinished, unfocused open work and retain history
|
|
336
|
-
rsp focus <name> Mark an open change as currently focused
|
|
337
|
-
rsp unfocus <name> Remove an open change from the current focus set
|
|
338
|
-
rsp archive <name> Archive to .rsp/archives/
|
|
339
|
-
rsp archive --dry-run <name> Deprecated compatibility route to rsp ready; never moves the change
|
|
340
|
-
rsp reopen <name> --reason <text> [--from <archive-path>]
|
|
341
|
-
Restore the same WorkRef as focused open work and retain archive history
|
|
342
|
-
rsp ready <name> [--json [--compact]] [--verbose]
|
|
343
|
-
Canonical read-only archive readiness projection
|
|
344
|
-
rsp show <name|--focused> [--json [--compact]] [--verbose]
|
|
345
|
-
Show change context with readiness signals and context paths
|
|
346
|
-
rsp history [--limit <n>] [--since <date>] [--until <date>] [--kind <kind>] [--group <group>] [--search <text>] [--json [--compact]]
|
|
347
|
-
List bounded archived Change summaries (default 20, maximum 100)
|
|
348
|
-
rsp history <work-ref> [--json [--compact]]
|
|
349
|
-
Show bounded evidence detail for one exact archived Change
|
|
350
|
-
rsp status [--focused|--blocked|--stale <days>] [--json [--compact]] [--verbose]
|
|
351
|
-
Show project status plus derived dependency plan with focus-aware filters
|
|
352
|
-
rsp check [--focused] [--json [--compact]] [--verbose]
|
|
353
|
-
Validate change files and lightly lint template/scenario structure
|
|
354
|
-
rsp doctor [--fix] [--json [--compact]] [--verbose]
|
|
355
|
-
Check setup health and common issues
|
|
48
|
+
.rsp/
|
|
49
|
+
├── rsp-rules.md # minimal fallback protocol
|
|
50
|
+
├── specs/ # durable current facts
|
|
51
|
+
├── changes/ # open work
|
|
52
|
+
├── focus.d/ # empty markers selecting current work
|
|
53
|
+
└── archives/ # completed history
|
|
356
54
|
```
|
|
357
55
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
On a real interactive terminal, bare `rsp` opens the same read-only dashboard as `rsp ui`. CI, pipes, redirected streams, and `TERM=dumb` stay on static command output; use `rsp status` for a human snapshot or `rsp status --json` for automation. The dashboard never creates, focuses, or archives work.
|
|
56
|
+
A Change is one Markdown file with canonical Proposal, Spec, Design, Tasks, Verify, and Blockers sections. Stable facts belong in Specs, lasting rationale in Decision Records, and scoped operating instructions in the nearest project-owned `AGENTS.md`.
|
|
361
57
|
|
|
362
|
-
|
|
58
|
+
## Documentation
|
|
363
59
|
|
|
364
|
-
|
|
60
|
+
- [Getting started](./docs/site/en/getting-started.md)
|
|
61
|
+
- [Core concepts and artifact ownership](./docs/site/en/concepts.md)
|
|
62
|
+
- [Daily workflow](./docs/site/en/guides/daily-workflow.md)
|
|
63
|
+
- [Skills and managed work](./docs/site/en/guides/skills.md)
|
|
64
|
+
- [Configuration reference](./docs/site/en/reference/configuration.md)
|
|
65
|
+
- [CLI reference](./docs/site/en/reference/cli.md)
|
|
66
|
+
- [3.0 migration guide](./docs/migrations/3.0.md) and [3.1 migration guide](./docs/migrations/3.1.md)
|
|
67
|
+
- [Release notes](./docs/releases/3.1.1.md)
|
|
68
|
+
- [Design philosophy](./docs/maintainers/design-philosophy.md) and [maintainer upstream research](./docs/maintainers/upstreams.md)
|
|
365
69
|
|
|
366
|
-
|
|
70
|
+
Run the documentation locally:
|
|
367
71
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
Examples:
|
|
373
|
-
|
|
374
|
-
```sh
|
|
375
|
-
rsp history --since 2026-07-01 --kind fix --limit 10 --json
|
|
376
|
-
rsp history --search migration --limit 10 --json
|
|
377
|
-
rsp history cli-machine-output/add-bounded-history-query --json --compact
|
|
72
|
+
```bash
|
|
73
|
+
pnpm docs:dev
|
|
74
|
+
pnpm docs:check
|
|
75
|
+
pnpm docs:build
|
|
378
76
|
```
|
|
379
77
|
|
|
380
|
-
The
|
|
381
|
-
|
|
382
|
-
`rsp create --lite` is a shorter template for explicitly tracked small changes; simple current-session tasks should not create RSP changes unless tracking is intentionally needed.
|
|
383
|
-
|
|
384
|
-
`rsp create <name> --issue <url>` attaches one validated external issue without network access and defaults to `relation: relates`; `--issue-relation closes` must be explicit and requires `--issue`. Issue options never update an existing Change: that invocation fails without changing the Change or focus. RSP stores only the canonical URL and relationship, never credentials, fetched title/body, or retrieval state. `status --json`, `show`, and `history` preserve valid relationships; immutable archives with older issue metadata remain readable but omit that opaque legacy projection. Shape may use available host access to retrieve real issue content, but failed access degrades to login retry, pasted source data, or a link-only draft rather than fabrication. Commit may add a closing keyword only for a terminal commit with completed acceptance and an owned `closes` relationship; otherwise it keeps a non-closing canonical URL reference.
|
|
78
|
+
The site is only a presentation layer over the Markdown in this repository. It adds bilingual navigation, local search, and page outlines without introducing a content database or runtime service.
|
|
385
79
|
|
|
386
|
-
|
|
80
|
+
## Platform support
|
|
387
81
|
|
|
388
|
-
|
|
82
|
+
RSP is a tool-agnostic file convention and works with any assistant or editor that can read project files. Humans start here; agents follow the nearest `AGENTS.md`, load `skills/rsp/SKILL.md` when available, and use `.rsp/rsp-rules.md` only when the Skill is unavailable.
|
|
389
83
|
|
|
390
|
-
|
|
84
|
+
RSP is licensed under the [MIT License](./LICENSE).
|
package/README.zh-CN.md
CHANGED
|
@@ -2,372 +2,83 @@
|
|
|
2
2
|
|
|
3
3
|
[English](./README.md) | 简体中文
|
|
4
4
|
|
|
5
|
-
**面向人类与 AI
|
|
5
|
+
**面向人类与 AI 智能体的仓库原生工程工作流。**
|
|
6
6
|
|
|
7
|
-
RSP
|
|
8
|
-
|
|
9
|
-
这套工作流建立在轻量的 **Rules、Specs、Plans** artifact foundation 之上。
|
|
7
|
+
RSP 把模糊意图转化为经过塑造、实现、审查和验证的软件变更,同时让项目知识可持久化、工作可恢复。它使用普通仓库文件——规则、规格和计划——而不是隐藏的工作流状态。
|
|
10
8
|
|
|
11
9
|
## RSP 帮助你完成什么
|
|
12
10
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- 为显式且已确认的 release operation 准备或校准发布文档;只有重大协调需要持久 owner 时才使用 Release Change。
|
|
19
|
-
|
|
20
|
-
## 工作流如何组合
|
|
11
|
+
- 把模糊工作塑造成一个可执行 Change。
|
|
12
|
+
- 在实现前根据仓库证据解决设计问题。
|
|
13
|
+
- 把诊断、实现、TDD、审查和发布工作路由给明确的能力。
|
|
14
|
+
- 把当前事实、长期理由、作用域指令和完成历史保存在正确的归属位置。
|
|
15
|
+
- 保持权限可见:RSP 不会推断提交、发布、部署或批准权限。
|
|
21
16
|
|
|
22
17
|
```text
|
|
23
|
-
意图
|
|
24
|
-
|
|
25
|
-
→ 按需 Design
|
|
26
|
-
→ Diagnose | TDD | Implement
|
|
27
|
-
→ Review → Address accepted findings
|
|
28
|
-
→ 显式且确认后的 Release Docs
|
|
29
|
-
→ Durable Review → Archive
|
|
18
|
+
意图 → 塑造 → 必要时设计 → 诊断 | TDD | 实现
|
|
19
|
+
→ 审查 → 持久化审查 → 归档
|
|
30
20
|
```
|
|
31
21
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## 快速开始
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npx -y @oevery/rsp@3.1.0-beta.5 init
|
|
38
|
-
npx -y @oevery/rsp@3.1.0-beta.5 doctor
|
|
39
|
-
```
|
|
22
|
+
## 五分钟入门
|
|
40
23
|
|
|
41
|
-
|
|
24
|
+
RSP 3.1 需要 Node.js 22 或更高版本。使用当前稳定版本:
|
|
42
25
|
|
|
43
26
|
```bash
|
|
44
|
-
npx -y @oevery/rsp@
|
|
27
|
+
npx -y @oevery/rsp@latest init --with-project-setup
|
|
45
28
|
# 填写 .rsp/changes/project-setup.md
|
|
46
29
|
# 填写 .rsp/specs/design.md
|
|
47
|
-
npx -y @oevery/rsp@
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Artifact foundation
|
|
51
|
-
|
|
52
|
-
`Reliable Software Practice` 表达产品承诺;`Rules、Specs、Plans` 描述让这套工作流保持仓库原生的轻量 artifact model:
|
|
53
|
-
|
|
54
|
-
- nearest `AGENTS.md` 存放有作用域的项目或模块操作指令。
|
|
55
|
-
- `rsp-rules.md` 是最小、tool-agnostic 的 fallback protocol。
|
|
56
|
-
- `specs/` 存放项目级 source-of-truth 文档。
|
|
57
|
-
- `changes/` 以单文件格式存放 open work。
|
|
58
|
-
- `focus.d/` 用空标记文件镜像当前聚焦的 changes。
|
|
59
|
-
- `archives/` 存放已完成工作。
|
|
60
|
-
|
|
61
|
-
```text
|
|
62
|
-
.rsp/
|
|
63
|
-
├── rsp-rules.md # 最小 fallback protocol
|
|
64
|
-
├── specs/
|
|
65
|
-
│ ├── 00-index.md # 自动生成的直接子项导航
|
|
66
|
-
│ ├── design.md
|
|
67
|
-
│ ├── decisions/ # 默认的权威 Decision Records;不进入 Specs 索引
|
|
68
|
-
│ └── <domain>/
|
|
69
|
-
│ ├── 00-index.md # 自动生成的直接子项导航
|
|
70
|
-
│ └── <spec>.md
|
|
71
|
-
├── changes/
|
|
72
|
-
│ ├── <name>.md
|
|
73
|
-
│ └── <group>/
|
|
74
|
-
│ ├── 00-brief.md
|
|
75
|
-
│ └── <change>.md
|
|
76
|
-
├── focus.d/
|
|
77
|
-
│ └── <name>
|
|
78
|
-
└── archives/
|
|
79
|
-
└── YYYY-MM-DD_<change>.md
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## 概念
|
|
83
|
-
|
|
84
|
-
- `specs/` 描述长期稳定的项目事实和当前认可的设计。
|
|
85
|
-
- Decision Records 描述难以逆转选择的长期理由、备选方案、取舍和后果;默认位于 `.rsp/specs/decisions/`,也可以配置唯一的外部权威路径。
|
|
86
|
-
- `changes/` 描述 open work,包括 feature、fix、refactor、docs、ops 和 research。
|
|
87
|
-
- 每个 change 始终是单个 Markdown 文件,并包含 proposal、spec、design、tasks、verification 与 blockers 等明确 section。
|
|
88
|
-
- Change 保持为“当前计划与最终证据”的收敛快照:选择足以证明结果的最小验证,只保留具有长期价值的新测试,并让临时 probe 和执行流水留在持久产物之外。持久正文描述真实的领域、系统、用户或操作员;只有 AI 或 agent 确实是产品参与者或约束时才提及它们。
|
|
89
|
-
- 精确 blocker 行 `- requires \`<change-work-ref>\`: <reason>` 表示依赖另一个可执行 Change。自由文本 blocker 保持为外部阻塞,RSP 不会从 prose 猜测依赖边;前置 Change 归档后依赖会自动解除。
|
|
90
|
-
- Change 名称只能是扁平的 `<change>` 或一层直接子项 `<group>/<change>`;递归 work 目录会被拒绝。
|
|
91
|
-
- Change Group 是可选且唯一的复合 work 形态。其不可执行、不可 focus 的逻辑身份 `<group>/brief` 在磁盘上存储为 `<group>/00-brief.md`,为至少两个直接子 Change 统一拥有目标、共享约束、slice 声明、整体完成条件、durable outcomes 和 blockers。
|
|
92
|
-
- 必须先创建 Group 再创建子 Change。每个 grouped Change 都必须由 brief 声明,独立 focus、独立归档,并将 brief 纳入上下文。没有 focus 时,`status` 按 Brief 声明顺序和当前 blockers 推荐第一个可执行 slice。`status`、`check` 和 `doctor` 从文件事实推导 Group 健康度和完成度,不持久化额外状态;`rsp group close` 只归档已完成的 brief。已归档的 Group 身份不能重新打开。
|
|
93
|
-
- Group Brief blocker 会作为外部 blocker 派生到其直接子 Change,但不会生成猜测的依赖边。
|
|
94
|
-
- 同一个 work 身份不能同时由 Markdown 文件和目录占用。
|
|
95
|
-
- `rsp status`、`rsp check` 和 `rsp doctor` 使用同一套完整 work-tree 与依赖事实检查。`status` 无需 graph 文件即可派生带原因的精确依赖边、ready work、blockers 和稳定 waves;`check` 与 `doctor` 会拒绝不完整的 archive inspection、格式错误或缺失的依赖目标、自依赖与循环。`changes/` 根目录必须存在且是真实目录,已有的 focus/archive 根目录和 group 前缀也必须是真实目录;非法目录、非 Markdown 条目、符号链接、缺失或不可读的当前 work、不完整读取和身份冲突都会成为可见错误。`status` 会返回非零状态,而不是隐藏非法 work。
|
|
96
|
-
- `rsp init`、`rsp update`、`rsp add spec` 和生成索引使用相同的 no-follow managed-path 检查。archive discovery 只接受扁平 archive 文件或一层真实 group 目录;递归组织的 Specs 只接受真实目录和普通文件。
|
|
97
|
-
- 项目 `AGENTS.md`、focus marker、fallback/config、生成索引和 placeholder 等最终 managed file 也必须是普通文件;RSP 会在读写前拒绝静态 symlink 目标。
|
|
98
|
-
- 完成后的 change 会移动到 `archives/`。稳定当前事实写入 Specs;长期理由写入 Decision Records;稳定的作用域操作指令写入 nearest project-owned `AGENTS.md`。
|
|
99
|
-
- 不要把任务历史、排障笔记或一次性实现上下文提升到 Specs、Decision Records 或项目指令。
|
|
100
|
-
- Change `Spec` 中的 delta 标记仅为规划辅助。`rsp archive` 不会自动将它们提升到 Specs 或 Decision Records。
|
|
101
|
-
- `rsp check` 会执行 deterministic 的卫生检查。它会对未完成的模板占位符和未解决的 clarification 标记发出 warning,但这些 warning 不会替代 durable update 的语义判断。
|
|
102
|
-
|
|
103
|
-
## 文件所有权
|
|
104
|
-
|
|
105
|
-
- `AGENTS.md`:只有 `<!-- rsp:begin --> ... <!-- rsp:end -->` 受管块由 RSP 维护。
|
|
106
|
-
- `.rsp/specs/**/00-index.md`:为根目录及含内容的 Spec 目录生成直接子项导航。使用 `rsp update` 对齐全部本地索引;`rsp add spec` 只刷新受影响的目录链。
|
|
107
|
-
- `.rsp/specs/design.md`:由 `rsp init` 创建,之后由项目维护。
|
|
108
|
-
- `.rsp/specs/decisions/`:默认的权威 Decision Record 目录;只有 Host Project 已有外部 ADR 目录时才配置 `decisions.path`。
|
|
109
|
-
- `.rsp/rsp-rules.md`:生成的最小 fallback protocol;可用时优先加载 `rsp` skill。
|
|
110
|
-
- 将项目级边界放在 `.rsp/specs/design.md`;通过最近的 `00-index.md` 发现归属于最小领域 Spec 的成组、可复用事实。
|
|
111
|
-
- 所有 `00-index.md` 都只是生成导航,不能作为可编辑的当前事实或理由 owner。每个索引只列直接子 Spec 与含内容的直接子目录,并排除 Decision Records。
|
|
112
|
-
- 将稳定且有作用域的工作流、验证和本地运行指令放在 nearest project-owned `AGENTS.md` 的非受管区域。
|
|
113
|
-
|
|
114
|
-
## Decision Record 路径
|
|
115
|
-
|
|
116
|
-
默认权威目录是 `.rsp/specs/decisions/`。如果 Host Project 已在其他位置维护 ADR,只配置一个项目相对的外部路径:
|
|
117
|
-
|
|
118
|
-
```yaml
|
|
119
|
-
decisions:
|
|
120
|
-
path: docs/adr
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
该路径不能是绝对路径、不能逃逸 Host Project,也不能指向其他 `.rsp/` 核心位置。`rsp init` 和 `rsp update` 会在写入受管文件前校验路由并确保目录存在,`rsp show` 与 `rsp ready` 会拒绝不安全路由,`rsp doctor` 检查目录可读性和迁移健康;这些命令都不会创建 Decision Record。切换到外部路径不会自动迁移默认目录中的记录;在旧 `.rsp/specs/decisions/*.md` 被迁移或明确删除前,`rsp doctor` 会持续报告问题。
|
|
124
|
-
|
|
125
|
-
## AGENTS 接入
|
|
126
|
-
|
|
127
|
-
受管块示例:
|
|
128
|
-
|
|
129
|
-
```md
|
|
130
|
-
<!-- rsp:begin -->
|
|
131
|
-
## RSP Entry
|
|
132
|
-
|
|
133
|
-
RSP tracks current work, stable specs, and archives under `.rsp/`.
|
|
134
|
-
|
|
135
|
-
Read in order:
|
|
136
|
-
1. Nearest `AGENTS.md` for project or module instructions.
|
|
137
|
-
2. Root `CONTEXT-MAP.md` if present, then the relevant nearest `CONTEXT.md`.
|
|
138
|
-
3. The `rsp` skill; if unavailable, read `.rsp/rsp-rules.md` as the fallback protocol.
|
|
139
|
-
4. `.rsp/focus.d/`; for grouped work read the sibling Group Brief, then the explicitly selected focused Change.
|
|
140
|
-
5. Only the relevant Specs and Decision Records under the configured authoritative path.
|
|
141
|
-
|
|
142
|
-
If `.rsp/focus.d/` is empty and the user has not provided a concrete task, ask what to work on or suggest `npx -y @oevery/rsp create <name>` for tracked work.
|
|
143
|
-
Do not treat `.rsp/specs/` or `.rsp/changes/` as replacements for nearest `AGENTS.md` or `CONTEXT.md`.
|
|
144
|
-
<!-- rsp:end -->
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
`rsp init --agents-mode <mode>`:
|
|
148
|
-
|
|
149
|
-
- `managed`:在需要时创建 `AGENTS.md`,并插入或更新受管块。
|
|
150
|
-
- `print`:正常初始化,并额外打印最终的 `AGENTS.md` 内容。
|
|
151
|
-
|
|
152
|
-
## Skills
|
|
153
|
-
|
|
154
|
-
RSP 发布十一个默认、宿主无关、按需加载的生命周期 Skills,以及一个需要显式安装的项目级审计 Skill:
|
|
155
|
-
|
|
156
|
-
| Skill | 职责 |
|
|
157
|
-
|---|---|
|
|
158
|
-
| `rsp` | 派生下一动作,指导 setup、durable review 与 archive 判断。 |
|
|
159
|
-
| `rsp-shape` | 在不实现的前提下塑造一个可执行 Change 或合理的 shallow Group。 |
|
|
160
|
-
| `rsp-design` | 解决一个受跟踪的 domain、module/seam 或 reversible-exploration 问题。 |
|
|
161
|
-
| `rsp-implement` | 实现一个 selected ready Change,并提供 fresh verification。 |
|
|
162
|
-
| `rsp-diagnose` | 修正前确认原因,或如实返回 unresolved diagnosis。 |
|
|
163
|
-
| `rsp-tdd` | 让一个清晰行为经过 RED、GREEN 与安全的 REFACTOR。 |
|
|
164
|
-
| `rsp-review` | 对固定的 Code、Document 或 mixed comparison 做只读审查。 |
|
|
165
|
-
| `rsp-resolve-findings` | 处置固定 findings,修正 accepted 项,验证并请求复审。 |
|
|
166
|
-
| `rsp-commit` | 使用与仓库一致的结构化消息创建一个已授权、精确范围的本地提交。 |
|
|
167
|
-
| `rsp-release-docs` | 起草、审计、定稿或校准基于证据的发布表面。 |
|
|
168
|
-
| `rsp-manage` | 继续一个显式请求或项目启用且符合条件的 ready Change 或 shallow Group。 |
|
|
169
|
-
| `rsp-structural-audit`(可选) | 只读审计一个有界仓库或子树,发现有证据支撑的结构风险。 |
|
|
170
|
-
|
|
171
|
-
每个生命周期 Skill 都把结果返回现有项目或 RSP owner。只读的 Pre-Change Design 与 `rsp-structural-audit` 可以把一个有界结果直接返回用户,而不虚构 artifact owner。套件不引入隐藏 workflow state 或递归 Skill 编排。任何 Skill 都不会推断 commit、push、publication、deployment、approval 或 human-acceptance 权限。
|
|
172
|
-
|
|
173
|
-
响应语言归用户和会话所有;产物与 commit message 语言才是项目持久表面。项目 `.rsp/config.yaml` 绝不选择响应语言:响应正文依次遵循当前明确请求、用户/宿主个人指令和会话语言。项目可以设置共享的 `language.default`,并通过 `language.artifacts` 或 `language.commit` 分别覆盖。新产物正文依次遵循明确产物语言、有效产物语言、项目产物指令和会话语言;已有产物除非明确授权翻译,否则保持现有语言。Commit 正文依次遵循当前明确的 commit 语言、有效 commit 语言、仓库 commit 规则和清晰的近期非 merge 历史。配置变化不会重写历史。CLI 生成的脚手架只包含 canonical 结构 token、中立的 `<…>` 占位符和用户原样输入,不维护 locale 字典,也不会静默回退为英文正文;Core 与 discipline Skills 再按授权语言填写自然语言内容。RSP 的 canonical headings、路径、命令、标识符、Conventional Commit type/scope、trailers 和机器消费值保持不变;WorkRef 遵循安全 Unicode 身份契约。
|
|
174
|
-
|
|
175
|
-
```yaml
|
|
176
|
-
language:
|
|
177
|
-
default: en
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
配置了 `language` mapping 时,`default` 必填并同时为产物和 commit 提供持久默认值;可选的 `artifacts` 与 `commit` 只覆盖对应表面。`response` 被明确禁止,因为共享仓库不应限制每位协作者的会话语言。完全省略 `language` 时,两项持久有效值都保持未设置。普通 status 显示持久语言值,status JSON 则始终把 `language.artifacts` 与 `language.commit` 投影为规范化语言标签或 `null`。语言配置不会授予 stage、commit、push 或 publication 权限。
|
|
181
|
-
|
|
182
|
-
按证据组合套件:Shape 确定 owner;Design 返回一个关键问题;Core 在 Diagnose、TDD 与 Implement 之间选择;Review 保持只读;Resolve Findings 修正 accepted findings 并请求复审;Core 在 archive 前执行 durable decision。显式 release operation 在 identity 或 range 已确认时,可以不创建 Release Change 就进入 Release Docs;只有重大决策、协调、恢复、blocker 或 acceptance 需要持久 owner 时才创建。Manage 是可选能力:它接受一个 selected ready Change 或 shallow Group,并要求独立调度、长时 continuation 或恢复需求;小型或紧耦合工作保持直接执行。项目可以保持显式启用,也可以让 Core 自动选择符合条件的 managed work。
|
|
183
|
-
|
|
184
|
-
### Managed automation policy
|
|
185
|
-
|
|
186
|
-
在 `.rsp/config.yaml` 中分别配置自动选择与本地收尾:
|
|
187
|
-
|
|
188
|
-
```yaml
|
|
189
|
-
manage:
|
|
190
|
-
activation: auto
|
|
191
|
-
closeout: lifecycle
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
`activation` 可取 `explicit` 或 `auto`。`auto` 只授权 Core 为符合条件且已经请求完成或继续的工作选择 Manage;它不授予 planning、product mutation、lifecycle、Git 或外部权限。`closeout` 可取:
|
|
195
|
-
|
|
196
|
-
- `manual`:archive 与 commit 都不会自动执行。
|
|
197
|
-
- `lifecycle`:durable review 后可以 archive,但 commit 仍需要独立权限。
|
|
198
|
-
- `local`:允许 lifecycle closeout 和有独立依据的 recovery checkpoint;lifecycle closeout 后,符合条件且 clean、已验证的非小型终态边界会调用一次 `rsp-commit`,小型终态仍不提交。
|
|
199
|
-
|
|
200
|
-
Change 粒度由一个可观察结果及其共享的 acceptance、verification、review、archive 和 rollback 边界决定,不规定 Git commit 数量。每次 `rsp-commit` 调用仍只创建一个本地 commit。
|
|
201
|
-
|
|
202
|
-
新的 `rsp init` config template 使用上面的 `auto` 加 `lifecycle` policy。如果省略 `manage`,RSP 则为兼容既有显式 Manage 行为解析为 `activation: explicit` 与 `closeout: local`。普通 `rsp status` 和 `rsp status --json` 顶层的 `manage` 对象都会显示解析后的值。nearest scoped restriction 与 host enforcement 可以缩小该配置上限。RSP 有意不提供 `full` preset:push、tag、publication、deployment、approval 与 human acceptance 始终保持显式且属于外部边界。
|
|
203
|
-
|
|
204
|
-
人类应从本 README 开始;agent 应遵循 nearest `AGENTS.md`,优先加载 `skills/rsp/SKILL.md`,仅在 Skill 不可用时读取 `.rsp/rsp-rules.md`。
|
|
205
|
-
|
|
206
|
-
如果文档中写的是 `rsp <command>`,默认前提是你的环境里已经能直接运行 `rsp`。进行 opt-in beta 评估时,应固定精确 prerelease 身份,例如 `npx -y @oevery/rsp@3.1.0-beta.5 <command>`;stable 用户仍可使用不带版本的入口获取 npm `latest`。
|
|
207
|
-
|
|
208
|
-
将当前精确包内置的默认生命周期 Skill 套件安装到当前项目:
|
|
209
|
-
|
|
210
|
-
```bash
|
|
211
|
-
rsp skills install --dry-run
|
|
212
|
-
rsp skills install
|
|
30
|
+
npx -y @oevery/rsp@latest doctor
|
|
213
31
|
```
|
|
214
32
|
|
|
215
|
-
|
|
33
|
+
然后创建并聚焦一个受跟踪变更:
|
|
216
34
|
|
|
217
35
|
```bash
|
|
218
|
-
rsp
|
|
219
|
-
rsp
|
|
36
|
+
rsp create improve-login "让登录失败信息可供用户采取行动"
|
|
37
|
+
rsp focus improve-login
|
|
38
|
+
rsp show --focused
|
|
220
39
|
```
|
|
221
40
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
升级仍包含 `rsp-address-review` 或 `rsp-codebase-audit` 的安装时,其替代项分别是 `rsp-resolve-findings` 和 `rsp-structural-audit`。安装器会在变更前停止,直到 `--force` 显式授权事务性移除这个过时的 package-owned 目录;`--dry-run --force` 可同时预览移除与安装。
|
|
41
|
+
遵循最近的 `AGENTS.md`,在工作推进时同步当前聚焦的 Change,运行最新的项目检查,判断是否需要持久化更新,并仅在满足验收条件后归档。
|
|
225
42
|
|
|
226
|
-
|
|
227
|
-
rsp skills install rsp-structural-audit --dry-run
|
|
228
|
-
rsp skills install rsp-structural-audit
|
|
229
|
-
```
|
|
43
|
+
[阅读完整入门指南](./docs/site/zh-CN/getting-started.md)。
|
|
230
44
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
```bash
|
|
234
|
-
npx -y @oevery/rsp@3.1.0-beta.5 skills install --dry-run
|
|
235
|
-
npx -y @oevery/rsp@3.1.0-beta.5 skills install
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
精确 prerelease 身份可以避免依赖持续移动的 dist-tag。`rsp update` 只刷新由 RSP 管理的项目文件;刷新 package-owned Skill 套件需要单独运行 `rsp skills install`。
|
|
239
|
-
|
|
240
|
-
## 从 2.x 迁移
|
|
241
|
-
|
|
242
|
-
版本 3 仅使用 `.rsp/rsp-rules.md` 作为运行时 fallback,并从 RSP 模型中移除了 project rules:
|
|
243
|
-
|
|
244
|
-
完整的兼容性、恢复与验证说明见 [3.0 migration guide](https://github.com/oevery/rsp/blob/v3.0.0/docs/migrations/3.0.md)。
|
|
245
|
-
|
|
246
|
-
1. 升级 RSP CLI。
|
|
247
|
-
2. 运行 `rsp update`,生成 canonical fallback 并删除旧的 `.rsp/rules/rsp-rules.md` 生成文件。
|
|
248
|
-
3. 如果 `.rsp/rules/` 仍然存在,只把残留内容中稳定且有作用域的指令迁入 nearest project-owned `AGENTS.md`,然后删除旧条目。
|
|
249
|
-
4. 将深于 `.rsp/changes/<group>/<change>.md` 的 work path 扁平化,并手动解决 `.rsp/changes/<name>.md` 与 `.rsp/changes/<name>/` 的身份冲突。
|
|
250
|
-
5. 运行 `rsp doctor`,处理所有剩余迁移问题。
|
|
251
|
-
|
|
252
|
-
仓库维护者可以把外部 skill 和 workflow 来源作为离线评审输入进行跟踪。该工具有意不进入发布包;具体用法见[源码仓库维护指南](https://github.com/oevery/rsp/blob/main/docs/upstreams.md)。
|
|
253
|
-
|
|
254
|
-
## 工作模型
|
|
45
|
+
## 产物模型
|
|
255
46
|
|
|
256
47
|
```text
|
|
257
|
-
|
|
48
|
+
.rsp/
|
|
49
|
+
├── rsp-rules.md # 最小后备协议
|
|
50
|
+
├── specs/ # 持久化的当前事实
|
|
51
|
+
├── changes/ # 未完成工作
|
|
52
|
+
├── focus.d/ # 选择当前工作的空标记文件
|
|
53
|
+
└── archives/ # 已完成历史
|
|
258
54
|
```
|
|
259
55
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
- `changes/`:open changes
|
|
263
|
-
- `focus.d/`:当前聚焦的 changes
|
|
264
|
-
- `archives/`:完成后的历史
|
|
56
|
+
一个 Change 是包含规范的 Proposal、Spec、Design、Tasks、Verify 和 Blockers 章节的单个 Markdown 文件。稳定事实属于 Specs,长期理由属于 Decision Records,稳定且有作用域的操作指令属于最近的项目自有 `AGENTS.md`。
|
|
265
57
|
|
|
266
|
-
|
|
58
|
+
## 文档
|
|
267
59
|
|
|
268
|
-
-
|
|
269
|
-
-
|
|
270
|
-
-
|
|
271
|
-
-
|
|
60
|
+
- [开始使用](./docs/site/zh-CN/getting-started.md)
|
|
61
|
+
- [核心概念与产物归属](./docs/site/zh-CN/concepts.md)
|
|
62
|
+
- [日常工作流](./docs/site/zh-CN/guides/daily-workflow.md)
|
|
63
|
+
- [Skills 与受管工作](./docs/site/zh-CN/guides/skills.md)
|
|
64
|
+
- [配置参考](./docs/site/zh-CN/reference/configuration.md)
|
|
65
|
+
- [CLI 参考](./docs/site/zh-CN/reference/cli.md)
|
|
66
|
+
- [3.0 迁移指南](./docs/migrations/3.0.md)与 [3.1 迁移指南](./docs/migrations/3.1.md)
|
|
67
|
+
- [发布说明](./docs/releases/3.1.1.md)
|
|
68
|
+
- [设计哲学](./docs/maintainers/design-philosophy.md)与[维护者上游研究](./docs/maintainers/upstreams.md)
|
|
272
69
|
|
|
273
|
-
|
|
70
|
+
在本地运行文档:
|
|
274
71
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
durable review 包含两个独立语义判断:是否更新当前事实或作用域指令,以及是否需要记录长期理由的 Decision Record;两者都由 RSP skill 或人工 reviewer 完成。
|
|
280
|
-
|
|
281
|
-
`rsp ready` 和 `rsp show` 会暴露 deterministic readiness 与 semantic-review 信号,但不会把确定性通过直接变成 archive 动作。deterministic readiness 来自 checkbox、blocker 和 scenario;durable update 判断和 advisory archive 建议仍由 Core 或人工负责。
|
|
282
|
-
|
|
283
|
-
`rsp ready --json` 和 `rsp show --json` 会提供 `durableReview.factDecisions`、`rationaleDecisions`、`factCandidateTargets` 和唯一的 `decisionRecordsPath`。这只是路由指导;RSP 不会虚构文件名或自动提升 Change 内容。
|
|
284
|
-
|
|
285
|
-
## 推荐工作流
|
|
286
|
-
|
|
287
|
-
新项目:
|
|
288
|
-
|
|
289
|
-
1. `npx -y @oevery/rsp@3.1.0-beta.5 init`
|
|
290
|
-
2. 优先使用 `npx -y @oevery/rsp@3.1.0-beta.5 init --with-project-setup`,或手动执行 `rsp create project-setup`
|
|
291
|
-
3. 填写 `.rsp/specs/design.md`
|
|
292
|
-
4. 仅在需要新的长期项目文档时使用 `rsp add spec <name>`
|
|
293
|
-
5. 将长期理由写入配置的 Decision Record 目录,将稳定的作用域操作指令写入 nearest project-owned `AGENTS.md`
|
|
294
|
-
6. 对需要跟踪的 open work,使用 `rsp create <name>` 开始
|
|
295
|
-
7. 如果要让某个已有 open change 成为当前工作,使用 `rsp focus <name>`
|
|
296
|
-
8. 如果要将某个 change 移出当前焦点集合,使用 `rsp unfocus <name>`
|
|
297
|
-
9. 直接编辑 change 文件并完成实现、勾选 tasks
|
|
298
|
-
10. 使用 RSP skill 或人工 review 判断是否需要 durable updates
|
|
299
|
-
11. Core 建议 archive 后,在最终 Git 交付前运行 `rsp archive <name>`;重新检查完整工作树,并单独取得 Git 权限
|
|
300
|
-
|
|
301
|
-
已有复杂 `AGENTS.md` 的项目:
|
|
302
|
-
|
|
303
|
-
1. `npx -y @oevery/rsp@3.1.0-beta.5 init`
|
|
304
|
-
2. 保持受管块尽量薄
|
|
305
|
-
3. 将项目级边界与导航放在 `.rsp/specs/design.md`,把成组的长期事实放入最小领域 Spec
|
|
306
|
-
4. 只有需要额外的 durable current-fact 文档时才使用 `rsp add spec <name>`
|
|
307
|
-
|
|
308
|
-
AI 协助接入:
|
|
309
|
-
|
|
310
|
-
1. `npx -y @oevery/rsp@3.1.0-beta.5 init --agents-mode print --with-project-setup`
|
|
311
|
-
2. 保持受管块原样,只在需要时调整周围由人维护的内容
|
|
312
|
-
3. 让 AI 审阅并填写 `.rsp/changes/project-setup.md`
|
|
313
|
-
4. 让 AI 填写 `.rsp/specs/design.md`
|
|
314
|
-
5. 运行 `rsp doctor`
|
|
315
|
-
|
|
316
|
-
## CLI
|
|
317
|
-
|
|
318
|
-
```text
|
|
319
|
-
rsp init --agents-mode <mode> 搭建 .rsp/,并确保 AGENTS.md 含有 RSP 入口块
|
|
320
|
-
rsp init --with-project-setup 同时创建 .rsp/changes/project-setup.md
|
|
321
|
-
rsp update 刷新受管项目文件,不更新 packaged Skills
|
|
322
|
-
rsp ui [--lang auto|en|zh-CN] 打开只读交互式仪表盘
|
|
323
|
-
rsp skills 在 dual TTY 中打开交互式项目 Skill 管理器
|
|
324
|
-
rsp skills list [--json] 列出内置 Skills 及其精确项目安装状态
|
|
325
|
-
rsp skills install [name] [--dry-run] [--force]
|
|
326
|
-
将默认十一个 Skills 或一个精确可选 Skill 安装到 .agents/skills
|
|
327
|
-
rsp add spec <name> 创建 .rsp/specs/<name>.md 并重建 specs 索引
|
|
328
|
-
rsp create <name> [summary] 创建 .rsp/changes/<name>.md;可加 --lite 使用更短模板
|
|
329
|
-
rsp group create <name> [goal] 创建不进入 focus 的 .rsp/changes/<name>/00-brief.md
|
|
330
|
-
rsp group close <name> 所有子 Change 归档后关闭并归档 Group Brief
|
|
331
|
-
rsp focus <name> 将一个 open change 标记为当前聚焦
|
|
332
|
-
rsp unfocus <name> 将一个 open change 移出当前聚焦集合
|
|
333
|
-
rsp archive <name> 归档到 .rsp/archives/
|
|
334
|
-
rsp archive --dry-run <name> 已弃用的 rsp ready 兼容入口;不会移动 change
|
|
335
|
-
rsp ready <name> [--json [--compact]] [--verbose]
|
|
336
|
-
canonical 只读归档就绪投影
|
|
337
|
-
rsp show <name|--focused> [--json [--compact]] [--verbose]
|
|
338
|
-
显示 change 上下文,带就绪信号和上下文路径
|
|
339
|
-
rsp history [--limit <n>] [--since <date>] [--until <date>] [--kind <kind>] [--group <group>] [--search <text>] [--json [--compact]]
|
|
340
|
-
列出有界的已归档 Change 摘要(默认 20,最大 100)
|
|
341
|
-
rsp history <work-ref> [--json [--compact]]
|
|
342
|
-
显示一个精确已归档 Change 的有界证据详情
|
|
343
|
-
rsp status [--focused|--blocked|--stale <days>] [--json [--compact]] [--verbose]
|
|
344
|
-
查看项目状态与派生依赖计划,并支持当前聚焦相关的轻量筛选
|
|
345
|
-
rsp check [--focused] [--json [--compact]] [--verbose]
|
|
346
|
-
校验 change 文件,并对 template/scenario 结构做轻量 lint
|
|
347
|
-
rsp doctor [--fix] [--json [--compact]] [--verbose]
|
|
348
|
-
检查接入健康和常见问题
|
|
72
|
+
```bash
|
|
73
|
+
pnpm docs:dev
|
|
74
|
+
pnpm docs:check
|
|
75
|
+
pnpm docs:build
|
|
349
76
|
```
|
|
350
77
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
在真实交互式终端中,裸 `rsp` 会打开与 `rsp ui` 相同的只读仪表盘。CI、管道、重定向流和 `TERM=dumb` 继续使用静态命令输出;人类快照使用 `rsp status`,自动化使用 `rsp status --json`。仪表盘不会创建、聚焦或归档工作。
|
|
354
|
-
|
|
355
|
-
仪表盘快捷键:`Tab` 按 Changes/Groups/History 顺序切换,方向键或 `j`/`k` 移动,`/` 筛选当前 scope,`Enter` 打开全宽详情,`r` 刷新当前 scope,`?` 显示帮助,`q`、`Ctrl-C` 或顶层 `Esc` 退出。History 首次进入时才加载默认有界的近期结果,只有选中记录并按 `Enter` 后才按唯一 archive path 加载结构化详情;更早的记录使用 `rsp history` 过滤查询。可设置 `RSP_UI_LANG=en|zh-CN` 或传入 `rsp ui --lang`;只有仪表盘自有标签会本地化。该 UI 设置不会本地化 CLI help、纯文本输出、JSON、路径、命令、Skills 或已有产物。WorkRef 可使用安全 Unicode 身份契约,新产物正文则遵循上文的项目语言策略。
|
|
356
|
-
|
|
357
|
-
当没有 focused change 时,`rsp status` 和 `rsp show --focused --json` 会输出 `nextActions`,但不会自动猜测哪个 open change 是当前工作。
|
|
358
|
-
|
|
359
|
-
人类可读的 `rsp status` 会把执行指引渲染成依赖森林:父节点依赖其子节点,共享前置依赖以引用方式显示而不重复展开,`Next action` 直接指出当前可执行的 Change。
|
|
360
|
-
|
|
361
|
-
`rsp status --json` 会在 `plan.nodes`、`plan.ready`、`plan.edges`、`plan.blocked` 和 `plan.waves` 中返回同一份依赖图。节点会区分过滤器选中的 Change 与仅用于解释的前置依赖上下文;过滤后的计划会保留解释结果所需的传递前置依赖闭包。由于同一个前置依赖可能被多个 Change 共享,JSON 保持扁平图结构而不嵌套 children。每条边都读作“`change` requires `requires`”。这些内容是派生的导航事实,不是执行授权或持久化 workflow state。
|
|
362
|
-
|
|
363
|
-
`rsp history` 直接检查权威 archive 文件;系统不再生成或读取 Archive Index。列表按 archive date 降序、WorkRef、source path 排序,在 1–100 的结果上限前应用 inclusive date、精确 kind、精确 Group 以及 WorkRef/summary 的大小写不敏感字面搜索。详情只返回有界 summary、scenario/checkbox counts 与结构化 Tasks/Verify/Blockers evidence,不返回 raw Markdown;重复 WorkRef、不可读或格式错误的 archive 会 fail closed。`status` archive trend 与 TUI History 使用同一份已验证 inspection。
|
|
364
|
-
|
|
365
|
-
产生 JSON 的 `status`、`show`、`ready`、`check`、`doctor` 和 `history` 都支持 `--json --compact`:内容与普通 `--json` 解析结果相同,但序列化为一行并以 LF 结尾。`--compact` 必须与 `--json` 同时使用,其他命令会在执行行为前拒绝它。
|
|
366
|
-
|
|
367
|
-
`rsp create --lite` 是用于显式跟踪小 change 的短模板;简单的当前会话任务默认不应创建 RSP change,除非确实需要跟踪。
|
|
78
|
+
网站只是本仓库 Markdown 的展示层。它提供双语导航、本地搜索和页面目录,不引入内容数据库或运行时服务。
|
|
368
79
|
|
|
369
|
-
|
|
80
|
+
## 平台支持
|
|
370
81
|
|
|
371
|
-
|
|
82
|
+
RSP 是与工具无关的文件约定,适用于任何能读取项目文件的助手或编辑器。人类从这里开始;AI 智能体遵循最近的 `AGENTS.md`,优先加载 `skills/rsp/SKILL.md`,仅在 Skill 不可用时使用 `.rsp/rsp-rules.md` 后备协议。
|
|
372
83
|
|
|
373
|
-
|
|
84
|
+
RSP 使用 [MIT 许可证](./LICENSE)。
|
|
@@ -651,8 +651,7 @@ function getChangeTemplateByKind(kind) {
|
|
|
651
651
|
why: placeholder,
|
|
652
652
|
scope: placeholder,
|
|
653
653
|
nonGoals: placeholder,
|
|
654
|
-
specSection:
|
|
655
|
-
### ${delta}
|
|
654
|
+
specSection: `### ${delta}
|
|
656
655
|
- Requirement: ${placeholder}
|
|
657
656
|
- ${placeholder}`,
|
|
658
657
|
acceptanceSection: `#### Scenario: ${placeholder}
|
package/dist/cli.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
installPackagedSkills,
|
|
5
5
|
printPackagedSkillInventory,
|
|
6
6
|
printSkillInstallResult
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3Z4IO2TD.mjs";
|
|
8
8
|
import {
|
|
9
9
|
ArchiveHistoryError,
|
|
10
10
|
GROUP_BRIEF_FILENAME,
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
resolveWorkRef,
|
|
38
38
|
selectArchiveHistoryRecord,
|
|
39
39
|
selectArchivedGroupBrief
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-MUNLLVVH.mjs";
|
|
41
41
|
import {
|
|
42
42
|
ARCHIVES_DIR,
|
|
43
43
|
CHANGES_DIR,
|
|
@@ -101,7 +101,7 @@ import {
|
|
|
101
101
|
validateDecisionRecordsFilesystemPath,
|
|
102
102
|
walkMarkdownFiles,
|
|
103
103
|
writeManagedFile
|
|
104
|
-
} from "./chunk-
|
|
104
|
+
} from "./chunk-WJXKLLIF.mjs";
|
|
105
105
|
|
|
106
106
|
// src/cli.ts
|
|
107
107
|
import { resolve } from "path";
|
|
@@ -3607,7 +3607,7 @@ async function runCli(rawArgs = process.argv.slice(2)) {
|
|
|
3607
3607
|
if (shouldLaunchSkillsUi(rawArgs, terminalEnvironment)) {
|
|
3608
3608
|
const { resolveUiLocale } = await import("./locale-HT44UIUP.mjs");
|
|
3609
3609
|
const locale = resolveUiLocale("auto", process.env.RSP_UI_LANG, process.env.LC_ALL ?? process.env.LC_MESSAGES ?? process.env.LANG ?? new Intl.DateTimeFormat().resolvedOptions().locale);
|
|
3610
|
-
const { runSkillsTui } = await import("./entry-
|
|
3610
|
+
const { runSkillsTui } = await import("./entry-KAWA2AS4.mjs");
|
|
3611
3611
|
const selection = await runSkillsTui(locale);
|
|
3612
3612
|
if (selection.kind === "confirmed") {
|
|
3613
3613
|
const result = await installPackagedSkills({ names: selection.names, force: selection.force });
|
|
@@ -3625,7 +3625,7 @@ async function runCli(rawArgs = process.argv.slice(2)) {
|
|
|
3625
3625
|
} else {
|
|
3626
3626
|
const { resolveUiLocale } = await import("./locale-HT44UIUP.mjs");
|
|
3627
3627
|
const locale = resolveUiLocale(lang, process.env.RSP_UI_LANG, process.env.LC_ALL ?? process.env.LC_MESSAGES ?? process.env.LANG ?? new Intl.DateTimeFormat().resolvedOptions().locale);
|
|
3628
|
-
const { runTui } = await import("./entry-
|
|
3628
|
+
const { runTui } = await import("./entry-IPHJBI53.mjs");
|
|
3629
3629
|
const exitCode = await runTui(locale);
|
|
3630
3630
|
if (exitCode !== 0)
|
|
3631
3631
|
process.exitCode = exitCode;
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
projectDependencyForest,
|
|
8
8
|
queryArchiveHistory,
|
|
9
9
|
readArchiveHistoryDetail
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-MUNLLVVH.mjs";
|
|
11
11
|
import {
|
|
12
12
|
displayWidth,
|
|
13
13
|
openTerminalSession,
|
|
14
14
|
truncateDisplay,
|
|
15
15
|
wrapDisplay
|
|
16
16
|
} from "./chunk-JOMFFQRG.mjs";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-WJXKLLIF.mjs";
|
|
18
18
|
|
|
19
19
|
// src/tui/entry.tsx
|
|
20
20
|
import process from "process";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
inspectPackagedSkillInventory
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3Z4IO2TD.mjs";
|
|
5
5
|
import {
|
|
6
6
|
openTerminalSession,
|
|
7
7
|
truncateDisplay
|
|
8
8
|
} from "./chunk-JOMFFQRG.mjs";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-WJXKLLIF.mjs";
|
|
10
10
|
|
|
11
11
|
// src/skills-tui/entry.tsx
|
|
12
12
|
import process from "process";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oevery/rsp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.1",
|
|
5
5
|
"description": "RSP (Reliable Software Practice), a repository-native engineering workflow for humans and AI agents",
|
|
6
6
|
"author": "oevery",
|
|
7
7
|
"license": "MIT",
|
|
@@ -37,13 +37,18 @@
|
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"prepare": "pnpm run build",
|
|
40
|
-
"release:check": "pnpm run release:metadata-check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run release:package-check",
|
|
40
|
+
"release:check": "pnpm run release:metadata-check && pnpm run docs:check && pnpm run docs:build && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run release:package-check",
|
|
41
41
|
"release:candidate-check": "node scripts/release-candidate-check.mjs && pnpm run release:check",
|
|
42
42
|
"release:metadata-check": "node scripts/release-metadata-check.mjs",
|
|
43
43
|
"release:package-check": "node scripts/clean-install-check.mjs",
|
|
44
44
|
"prepublishOnly": "pnpm run release:candidate-check",
|
|
45
45
|
"build": "tsup",
|
|
46
46
|
"dev": "tsup --watch",
|
|
47
|
+
"docs:build": "vitepress build docs",
|
|
48
|
+
"docs:check": "node scripts/docs-check.mjs",
|
|
49
|
+
"docs:deploy": "wrangler deploy",
|
|
50
|
+
"docs:dev": "vitepress dev docs",
|
|
51
|
+
"docs:preview": "vitepress preview docs",
|
|
47
52
|
"lint": "eslint .",
|
|
48
53
|
"lint:fix": "eslint --fix .",
|
|
49
54
|
"typecheck": "tsc --noEmit",
|
|
@@ -65,6 +70,8 @@
|
|
|
65
70
|
"ink-testing-library": "4.0.0",
|
|
66
71
|
"tsup": "^8.5.1",
|
|
67
72
|
"typescript": "^5.9.3",
|
|
68
|
-
"
|
|
73
|
+
"vitepress": "^1.6.4",
|
|
74
|
+
"vitest": "^4.1.10",
|
|
75
|
+
"wrangler": "^4.114.0"
|
|
69
76
|
}
|
|
70
77
|
}
|
|
@@ -37,7 +37,9 @@ Project every owned issue relationship as a non-closing `Issue: <canonical-url>`
|
|
|
37
37
|
|
|
38
38
|
Stage only the explicit allowed paths. Re-read `git status --short`, inspect the complete cached path list and cached diff, and confirm they represent exactly one owner boundary with no sensitive material. If the cached boundary is wrong, stop and leave unrelated work untouched; do not repair it by broad staging, destructive reset, or history rewrite.
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Transport a structured multiline message with actual line breaks or a safely prepared message file. Do not rely on ordinary quoted `\n` escape sequences as portable newlines; a host shell may pass those characters through literally.
|
|
41
|
+
|
|
42
|
+
Create one local commit with the prepared subject, optional body, and trailers. Do not push, tag, publish, amend, rebase, or force-push. Afterward observe `HEAD`, the raw complete committed message, committed paths, remaining worktree state, and remote refs when required. A successful commit is still a post-commit mismatch when the observed message differs from the prepared message, including unintended literal `\n` sequences; report and stop without inferring amend or second-commit authority.
|
|
41
43
|
|
|
42
44
|
## Return the receipt
|
|
43
45
|
|