silvermoon 0.0.1 → 0.0.3

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.
@@ -1,25 +1,30 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://github.com/shazhou-ww/silvermoon/raw/refs/heads/main/schema/v1/definitions.schema.json",
4
- "title": "Silvermoon shared definitions v1",
5
- "description": "Shared value definitions for Silvermoon version 1 storage contracts.",
6
- "$defs": {
7
- "branch": {
8
- "type": "string",
9
- "pattern": "^(?!-)(?!/)(?!@$)(?!refs/)(?!remotes/)(?!.*\\.\\.)(?!.*@\\{)(?!.*[ ~^:?*\\[\\\\])(?!.*(?:^|/)\\.)(?!.*(?:^|/)[^/]*\\.lock(?:/|$))(?!.*//$)(?!.*//)(?!.*\\.$)(?!.*\/$).+$"
10
- },
11
- "repository": {
12
- "type": "string",
13
- "format": "uri",
14
- "pattern": "^https://(?:[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?|\\[[0-9a-f:.]+\\])(?::(?!443(?:/|$))[0-9]+)?/(?!/)(?!.*//)(?!.*\\\\)(?!.*(?:/\\.{1,2})(?:/|$))(?!.*%(?:2[eEfF]|5[cC]))(?!.*[?#])[^/](?:.*[^/])?$"
15
- },
16
- "ulid": {
17
- "type": "string",
18
- "pattern": "^[0-7][0-9A-HJKMNP-TV-Z]{25}$"
19
- },
20
- "objectId": {
21
- "type": "string",
22
- "pattern": "^(?:[0-9a-f]{40}|[0-9a-f]{64})$"
23
- }
24
- }
25
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/shazhou-ww/silvermoon/raw/refs/heads/main/schema/v1/definitions.schema.json",
4
+ "title": "Silvermoon shared definitions v1",
5
+ "description": "Shared value definitions for Silvermoon version 1 storage contracts.",
6
+ "$defs": {
7
+ "branch": {
8
+ "type": "string",
9
+ "pattern": "^(?!-)(?!/)(?!@$)(?!refs/)(?!remotes/)(?!.*\\.\\.)(?!.*@\\{)(?!.*[ ~^:?*\\[\\\\])(?!.*(?:^|/)\\.)(?!.*(?:^|/)[^/]*\\.lock(?:/|$))(?!.*//$)(?!.*//)(?!.*\\.$)(?!.*\/$).+$"
10
+ },
11
+ "repository": {
12
+ "type": "string",
13
+ "format": "uri",
14
+ "pattern": "^https://(?:[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?|\\[[0-9a-f:.]+\\])(?::(?!443(?:/|$))[0-9]+)?/(?!/)(?!.*//)(?!.*\\\\)(?!.*(?:/\\.{1,2})(?:/|$))(?!.*%(?:2[eEfF]|5[cC]))(?!.*[?#])[^/](?:.*[^/])?$"
15
+ },
16
+ "ulid": {
17
+ "type": "string",
18
+ "pattern": "^[0-7][0-9A-HJKMNP-TV-Z]{25}$"
19
+ },
20
+ "objectId": {
21
+ "type": "string",
22
+ "pattern": "^(?:[0-9a-f]{40}|[0-9a-f]{64})$"
23
+ },
24
+ "languageTag": {
25
+ "description": "Canonical BCP 47 language tag.",
26
+ "type": "string",
27
+ "pattern": "^(?:[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-(?:[A-Z]{2}|[0-9]{3}))?|[a-z]{4,8})(?:-[A-Za-z0-9]{5,8}|-[0-9][A-Za-z0-9]{3})*(?:-[0-9A-WY-Za-wy-z](?:-[A-Za-z0-9]{2,8})+)*(?:-x(?:-[A-Za-z0-9]{1,8})+)?$"
28
+ }
29
+ }
30
+ }
@@ -1,41 +1,44 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://github.com/shazhou-ww/silvermoon/raw/refs/heads/main/schema/v1/idea-status.schema.json",
4
- "title": "Silvermoon idea status v1",
5
- "description": "The repository-owned .silvermoon/ideas/<IDEA_ID>/status.yaml contract.",
6
- "type": "object",
7
- "additionalProperties": false,
8
- "required": [
9
- "version",
10
- "id"
11
- ],
12
- "properties": {
13
- "version": {
14
- "const": 1
15
- },
16
- "id": {
17
- "$ref": "definitions.schema.json#/$defs/ulid"
18
- },
19
- "alias": {
20
- "type": "string",
21
- "minLength": 1,
22
- "maxLength": 120,
23
- "pattern": "^(?!\\s)(?!.*\\s$)[^\\u0000-\\u001f\\u007f-\\u009f]+$"
24
- },
25
- "abandoned": {
26
- "const": true
27
- },
28
- "approvedRevision": {
29
- "description": "Accepted Ideal World (道心) tree object ID.",
30
- "$ref": "definitions.schema.json#/$defs/objectId"
31
- },
32
- "implementationAcceptedRevision": {
33
- "description": "Accepted Inner World (内景) tree object ID.",
34
- "$ref": "definitions.schema.json#/$defs/objectId"
35
- },
36
- "deploymentAcceptedRevision": {
37
- "description": "Accepted Outer World (现世) tree object ID.",
38
- "$ref": "definitions.schema.json#/$defs/objectId"
39
- }
40
- }
41
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/shazhou-ww/silvermoon/raw/refs/heads/main/schema/v1/idea-status.schema.json",
4
+ "title": "Silvermoon idea status v1",
5
+ "description": "The repository-owned .silvermoon/ideas/<IDEA_ID>/status.yaml contract.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "version",
10
+ "id"
11
+ ],
12
+ "properties": {
13
+ "version": {
14
+ "const": 1
15
+ },
16
+ "id": {
17
+ "$ref": "definitions.schema.json#/$defs/ulid"
18
+ },
19
+ "alias": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "maxLength": 120,
23
+ "pattern": "^(?!\\s)(?!.*\\s$)[^\\u0000-\\u001f\\u007f-\\u009f]+$"
24
+ },
25
+ "language": {
26
+ "$ref": "definitions.schema.json#/$defs/languageTag"
27
+ },
28
+ "abandoned": {
29
+ "const": true
30
+ },
31
+ "approvedRevision": {
32
+ "description": "Accepted Ideal World (道心) tree object ID.",
33
+ "$ref": "definitions.schema.json#/$defs/objectId"
34
+ },
35
+ "implementationAcceptedRevision": {
36
+ "description": "Accepted Inner World (内景) tree object ID.",
37
+ "$ref": "definitions.schema.json#/$defs/objectId"
38
+ },
39
+ "deploymentAcceptedRevision": {
40
+ "description": "Accepted Outer World (现世) tree object ID.",
41
+ "$ref": "definitions.schema.json#/$defs/objectId"
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/shazhou-ww/silvermoon/raw/refs/heads/main/schema/v1/user-config.schema.json",
4
+ "title": "Silvermoon user configuration v1",
5
+ "description": "The user-owned ~/.config/silvermoon/config.yaml contract.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "version"
10
+ ],
11
+ "properties": {
12
+ "version": {
13
+ "const": 1
14
+ },
15
+ "preferredLanguage": {
16
+ "$ref": "definitions.schema.json#/$defs/languageTag"
17
+ }
18
+ }
19
+ }
@@ -1,209 +1,216 @@
1
- ---
2
- name: silvermoon
3
- description: "Navigate or create repository-owned ideas, execute one safe action, and reobserve only after an observable delta."
4
- argument-hint: "[new | idea ULID or alias]"
5
- user-invocable: true
6
- ---
7
-
8
- # Silvermoon
9
-
10
- Use Silvermoon to navigate or explicitly create ideas against the configured
11
- remote primary. The CLI derives idea state and checks repository hygiene; the
12
- Agent performs suggested repository or external actions through ordinary tools
13
- and Git.
14
-
15
- ## Start From Primary
16
-
17
- 1. Preserve the user's intent when choosing the entry command:
18
- - For `/silvermoon new` or any other explicit request to create a new idea,
19
- run `silvermoon create-idea --json`.
20
- - Otherwise run `silvermoon whats-next [idea] --json`. Pass the selector only
21
- when the user supplied or previously selected one.
22
- 2. Treat the command, request, `observedPrimaryCommit`, `selectedIdea`, and
23
- action or created idea as one immutable observation. Do not combine guidance
24
- from different reports.
25
- 3. Read the complete `onboarding` doctor report. It lists every requirement,
26
- status, blocking flag, dependency, structured remediation, recommended
27
- action, and recheck command. For `adopt-silvermoon`, execute only the
28
- recommended explicit remediation (or safely resolve its conflict), then
29
- recheck; do not route idea work while blocking findings remain.
30
- 4. Execute only the highest-priority action. Do not skip worktree, conflict,
31
- sync, or selection guidance to reach a later idea-state action. An explicit
32
- create request is not idea selection: after resolving a blocking hygiene
33
- action, retry `create-idea`, not selector-less `whats-next`.
34
-
35
- `whats-next` may fetch and inspect. It never checkout, merges, edits, commits,
36
- stashes, deletes, resets, fast-forwards, or pushes. `create-idea` runs the same
37
- hygiene preflight and, only when it passes, creates the structured idea scaffold.
38
- Dependency installation and skill registration are separate explicit
39
- operations. The packaged skill is canonical, while registration and updates
40
- belong to the supported `npx skills add` interface. Silvermoon reports
41
- configuration and skill findings but owns no onboarding mutation command.
42
-
43
- ## Preserve Work
44
-
45
- - Read exact staged, unstaged, and untracked diffs before deciding ownership.
46
- - Preserve unknown, unrelated, or user-authored changes. Isolate them in
47
- another worktree or use an explicitly described stash only when needed.
48
- - Delete only paths created by the current operation or paths the user names
49
- after reviewing the current diff.
50
- - Never use force-push, `reset --hard`, broad clean commands, or silent history
51
- rewrites to satisfy guidance.
52
- - Publish with the observed primary tip as the expected remote tip. On rejection
53
- or concurrent movement, fetch and call `whats-next` again; never replay a stale
54
- approval or acceptance automatically.
55
-
56
- ## Execute Actions
57
-
58
- - `select-active-idea`: show the ordered candidates and obtain one explicit
59
- ULID or alias selection.
60
- - `continue-active-idea`: call `whats-next <id>` to obtain state guidance.
61
- - `create-idea`: this action is internal to the explicit `create-idea` command's
62
- preflight; do not replace the user's create intent with active-idea
63
- selection. After hygiene passes, the command creates one self-contained idea
64
- with structured `Idea.md`, `Implementation.md`, `Deployment.md`, and
65
- `ledger.md` entries plus alias-less `status.yaml`. It never stages, commits,
66
- pushes, or records a decision. Review every generated path before
67
- publication. During initial preparation, replace the `Idea.md` guidance with
68
- the requested Ideal World contract, but keep the Implementation, Deployment,
69
- and matching ledger placeholders synchronized until their lifecycle actions.
70
- An Agent may add a concise, unique alias derived from the user's request;
71
- do not interrupt the user only to ask them to name it.
72
- - `switch-to-primary`, `resolve-conflicts`, `inspect-worktree-changes`,
73
- `fast-forward-primary`, `integrate-primary`, `publish-primary`: perform the
74
- exact Git hygiene step without discarding either history or unknown work.
75
- - `prepare-idea`: edit `Idea.md` and supporting files in the Ideal World
76
- (道心). Supporting files must serve `Idea.md`, never replace it as a second
77
- contract. After lifecycle hygiene, use the reported `ledgerPath` to resume
78
- relevant unfinished work. After explicit approval, write the reported
79
- `idealRevision` to `approvedRevision`.
80
- - `implement-idea`: edit `Implementation.md`, its supporting Inner World
81
- (内景) files, and repository deliverables. Do not change the nested Ideal
82
- World unless the ideal truly changed and should return to preparing. After
83
- lifecycle hygiene, use the reported `ledgerPath` to resume relevant
84
- unfinished work. After explicit acceptance, write the reported
85
- `implementationRevision` to `implementationAcceptedRevision`.
86
- - `deploy-idea`: use `Deployment.md` and its supporting Outer World (现世)
87
- files to drive and verify the external world. Do not change repository
88
- deliverables as deployment work or modify a nested world unless that earlier
89
- contract truly changed. Publish a newly authored or materially changed
90
- deployment contract first, reobserve its stable `deploymentRevision`, then
91
- execute external checks against that revision and record their completion in
92
- the ledger. After lifecycle hygiene, use the reported `ledgerPath` to resume
93
- relevant unfinished work. After explicit acceptance, write the reported
94
- `deploymentRevision` to `deploymentAcceptedRevision`.
95
- - `review-abandoned`: keep `abandoned: true`, remove it after an explicit human
96
- decision, or create a different idea.
97
- - `review-completed`: revise the existing idea definition or create a new idea.
98
-
99
- ## Author The Three Worlds
100
-
101
- Every idea uses this fixed structure:
102
-
103
- ```text
104
- .silvermoon/ideas/<ULID>/
105
- ├── status.yaml
106
- ├── ledger.md
107
- └── outer/
108
- ├── Deployment.md
109
- └── inner/
110
- ├── Implementation.md
111
- └── ideal/
112
- └── Idea.md
113
- ```
114
-
115
- `Idea.md` is the canonical Ideal World (道心) entry, `Implementation.md` is the
116
- canonical Inner World (内景) entry, and `Deployment.md` is the canonical Outer
117
- World (现世) entry: 道心立意,内景成形,现世验真. Each world may contain
118
- additional files and nested directories, but those artifacts support their
119
- same-world entry and do not define a second contract.
120
-
121
- In `Implementation.md` and `Deployment.md`, put plans under `## Steps` and
122
- outcome contracts under `## Acceptance criteria`. Give every step and criterion
123
- a stable level-three heading: `I-Sxx`, `I-ACxx`, `D-Sxx`, or `D-ACxx`. A
124
- criterion must describe both its observable outcome and the method that proves
125
- it; do not add a separate validation section. Keep checkboxes out of world
126
- contracts. World content changes its world revision and every containing world
127
- revision; `status.yaml` and `ledger.md` stay outside all three world trees.
128
-
129
- ## Continue From The Ledger
130
-
131
- Every idea has an Agent-owned `ledger.md` at the path reported by `whats-next`.
132
- It is operational state, not a fourth world, normative contract, or human
133
- decision. Silvermoon requires the regular file but does not parse its body or
134
- derive lifecycle state from it.
135
-
136
- Mirror stable IDs and short titles from both world contracts:
137
-
138
- ```markdown
139
- # Ledger
140
-
141
- ## Implementation
142
-
143
- ### Steps
144
-
145
- - [x] **I-S01:** Completed step
146
- - [ ] **I-S02:** Remaining step
147
-
148
- ### Acceptance criteria
149
-
150
- - [x] **I-AC01:** Proven criterion
151
- - [ ] **I-AC02:** Unproven criterion
152
-
153
- ## Deployment
154
-
155
- ### Steps
156
-
157
- - [ ] **D-S01:** Deployment step
158
-
159
- ### Acceptance criteria
160
-
161
- - [ ] **D-AC01:** Deployment criterion
162
- ```
163
-
164
- When adding or removing a world step or criterion, update the matching ledger
165
- entry in the same change. Keep its stable ID when only the title or details are
166
- refined. Add new entries unchecked. If a completed item's requirement or proof
167
- method changes materially, reset its checkbox and re-run the work or proof.
168
- Infer the next action from `whats-next`, the world contracts, and unchecked
169
- ledger entries; do not maintain duplicate Current or Next summaries.
170
- If relevant ledger entries remain unchecked, continue the reported world
171
- action. If all relevant entries are checked, their evidence remains valid, and
172
- the candidate is published, stop editing and request explicit acceptance for
173
- the exact revision reported by `whats-next`.
174
-
175
- `[x]` means only that the Agent recorded work or a check as complete. It never
176
- approves an Ideal World, accepts implementation or deployment, changes
177
- `status.yaml`, or authorizes publication. Record test names, commands,
178
- artifacts, and results in the corresponding world criterion or concise ledger
179
- notes without creating a separate evidence schema or public API contract.
180
-
181
- ## Write Status Facts
182
-
183
- Silvermoon has no approval, acceptance, or abandonment mutation commands.
184
- Update the idea's `status.yaml` with ordinary file editing:
185
-
186
- 1. Reconfirm the decision applies to the selected idea and current
187
- world revision reported by `whats-next`.
188
- 2. Add or update only the corresponding revision field, or add/remove canonical
189
- `abandoned: true` after an explicit human decision.
190
- 3. Run `silvermoon check --worktree --json` while reviewing the complete
191
- candidate, then stage it and run `silvermoon check --staged --json`.
192
- 4. Commit the status decision separately when practical, then non-force push
193
- with the observation's `observedPrimaryCommit` as expected tip.
194
-
195
- Never infer a human decision from silence, prose, Git activity, or an outer
196
- command. Old revision values remain as history and become inactive naturally
197
- when the idea folder changes.
198
-
199
- ## Advance The Loop
200
-
201
- Re-run the intent-preserving entry command only after an expected repository
202
- delta, an unexpected input change, or a newly arrived external result: use
203
- `create-idea` for a pending explicit creation and `whats-next` otherwise. End
204
- the current turn when waiting for human/external input. Report an actionable
205
- error with its recovery condition, or report no progress and stop if guidance
206
- completed without a delta. Never poll the same observation.
207
-
208
- Follow [adoption.md](./references/adoption.md) when creating or explicitly
209
- converting a repository to Silvermoon.
1
+ ---
2
+ name: silvermoon
3
+ description: "Navigate or create repository-owned ideas, execute one safe action, and reobserve only after an observable delta."
4
+ argument-hint: "[new | idea ULID or alias]"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Silvermoon
9
+
10
+ Use Silvermoon to navigate or explicitly create ideas against the configured
11
+ remote primary. The CLI derives idea state and checks repository hygiene; the
12
+ Agent performs suggested repository or external actions through ordinary tools
13
+ and Git.
14
+
15
+ ## Start From Primary
16
+
17
+ 1. Preserve the user's intent when choosing the entry command:
18
+ - For `/silvermoon new` or any other explicit request to create a new idea,
19
+ run `silvermoon create-idea --json`.
20
+ - Otherwise run `silvermoon whats-next [idea] --json`. Pass the selector only
21
+ when the user supplied or previously selected one.
22
+ 2. Treat the command, request, `observedPrimaryCommit`, `selectedIdea`,
23
+ effective `language`, and action or created idea as one immutable
24
+ observation. Do not combine guidance from different reports. Use the
25
+ reported language for natural-language world content, supporting artifacts,
26
+ ledger text, and user-facing explanations; preserve commands, identifiers,
27
+ schema fields, protocol markers, and verbatim tool output.
28
+ 3. Read the complete `onboarding` doctor report. It lists every requirement,
29
+ status, blocking flag, dependency, structured remediation, recommended
30
+ action, and recheck command. For `adopt-silvermoon`, execute only the
31
+ recommended explicit remediation (or safely resolve its conflict), then
32
+ recheck; do not route idea work while blocking findings remain.
33
+ 4. Execute only the highest-priority action. Do not skip worktree, conflict,
34
+ sync, or selection guidance to reach a later idea-state action. An explicit
35
+ create request is not idea selection: after resolving a blocking hygiene
36
+ action, retry `create-idea`, not selector-less `whats-next`.
37
+
38
+ `whats-next` may fetch and inspect. It never checkout, merges, edits, commits,
39
+ stashes, deletes, resets, fast-forwards, or pushes. `create-idea` runs the same
40
+ hygiene preflight and, only when it passes, creates the structured idea scaffold.
41
+ Dependency installation and skill registration are separate explicit
42
+ operations. The packaged skill is canonical, while registration and updates
43
+ belong to the supported `npx skills add` interface. Silvermoon reports
44
+ configuration and skill findings but owns no onboarding mutation command.
45
+
46
+ ## Preserve Work
47
+
48
+ - Read exact staged, unstaged, and untracked diffs before deciding ownership.
49
+ - Preserve unknown, unrelated, or user-authored changes. Isolate them in
50
+ another worktree or use an explicitly described stash only when needed.
51
+ - Delete only paths created by the current operation or paths the user names
52
+ after reviewing the current diff.
53
+ - Never use force-push, `reset --hard`, broad clean commands, or silent history
54
+ rewrites to satisfy guidance.
55
+ - Publish with the observed primary tip as the expected remote tip. On rejection
56
+ or concurrent movement, fetch and call `whats-next` again; never replay a stale
57
+ approval or acceptance automatically.
58
+
59
+ ## Execute Actions
60
+
61
+ - `select-active-idea`: show the ordered candidates and obtain one explicit
62
+ ULID or alias selection.
63
+ - `continue-active-idea`: call `whats-next <id>` to obtain state guidance.
64
+ - `create-idea`: this action is internal to the explicit `create-idea` command's
65
+ preflight; do not replace the user's create intent with active-idea
66
+ selection. After hygiene passes, the command creates one self-contained idea
67
+ with structured `Idea.md`, `Implementation.md`, `Deployment.md`, and
68
+ `ledger.md` entries plus alias-less `status.yaml`. It never stages, commits,
69
+ pushes, or records a decision. Review every generated path before
70
+ publication. During initial preparation, replace the `Idea.md` guidance with
71
+ the requested Ideal World contract, but keep the Implementation, Deployment,
72
+ and matching ledger placeholders synchronized until their lifecycle actions.
73
+ An Agent may add a concise, unique alias derived from the user's request;
74
+ do not interrupt the user only to ask them to name it.
75
+ When the user explicitly requests a stable language for the new idea, pass
76
+ `--language <tag>`; otherwise omit it so the idea dynamically inherits the
77
+ project, user, or `en-US` default. Never add a language override to
78
+ `whats-next` or `check`.
79
+ - `switch-to-primary`, `resolve-conflicts`, `inspect-worktree-changes`,
80
+ `fast-forward-primary`, `integrate-primary`, `publish-primary`: perform the
81
+ exact Git hygiene step without discarding either history or unknown work.
82
+ - `prepare-idea`: edit `Idea.md` and supporting files in the Ideal World
83
+ (道心). Supporting files must serve `Idea.md`, never replace it as a second
84
+ contract. After lifecycle hygiene, use the reported `ledgerPath` to resume
85
+ relevant unfinished work. After explicit approval, write the reported
86
+ `idealRevision` to `approvedRevision`.
87
+ - `implement-idea`: edit `Implementation.md`, its supporting Inner World
88
+ (内景) files, and repository deliverables. Do not change the nested Ideal
89
+ World unless the ideal truly changed and should return to preparing. After
90
+ lifecycle hygiene, use the reported `ledgerPath` to resume relevant
91
+ unfinished work. After explicit acceptance, write the reported
92
+ `implementationRevision` to `implementationAcceptedRevision`.
93
+ - `deploy-idea`: use `Deployment.md` and its supporting Outer World (现世)
94
+ files to drive and verify the external world. Do not change repository
95
+ deliverables as deployment work or modify a nested world unless that earlier
96
+ contract truly changed. Publish a newly authored or materially changed
97
+ deployment contract first, reobserve its stable `deploymentRevision`, then
98
+ execute external checks against that revision and record their completion in
99
+ the ledger. After lifecycle hygiene, use the reported `ledgerPath` to resume
100
+ relevant unfinished work. After explicit acceptance, write the reported
101
+ `deploymentRevision` to `deploymentAcceptedRevision`.
102
+ - `review-abandoned`: keep `abandoned: true`, remove it after an explicit human
103
+ decision, or create a different idea.
104
+ - `review-completed`: revise the existing idea definition or create a new idea.
105
+
106
+ ## Author The Three Worlds
107
+
108
+ Every idea uses this fixed structure:
109
+
110
+ ```text
111
+ .silvermoon/ideas/<ULID>/
112
+ ├── status.yaml
113
+ ├── ledger.md
114
+ └── outer/
115
+ ├── Deployment.md
116
+ └── inner/
117
+ ├── Implementation.md
118
+ └── ideal/
119
+ └── Idea.md
120
+ ```
121
+
122
+ `Idea.md` is the canonical Ideal World (道心) entry, `Implementation.md` is the
123
+ canonical Inner World (内景) entry, and `Deployment.md` is the canonical Outer
124
+ World (现世) entry: 道心立意,内景成形,现世验真. Each world may contain
125
+ additional files and nested directories, but those artifacts support their
126
+ same-world entry and do not define a second contract.
127
+
128
+ In `Implementation.md` and `Deployment.md`, put plans under `## Steps` and
129
+ outcome contracts under `## Acceptance criteria`. Give every step and criterion
130
+ a stable level-three heading: `I-Sxx`, `I-ACxx`, `D-Sxx`, or `D-ACxx`. A
131
+ criterion must describe both its observable outcome and the method that proves
132
+ it; do not add a separate validation section. Keep checkboxes out of world
133
+ contracts. World content changes its world revision and every containing world
134
+ revision; `status.yaml` and `ledger.md` stay outside all three world trees.
135
+
136
+ ## Continue From The Ledger
137
+
138
+ Every idea has an Agent-owned `ledger.md` at the path reported by `whats-next`.
139
+ It is operational state, not a fourth world, normative contract, or human
140
+ decision. Silvermoon requires the regular file but does not parse its body or
141
+ derive lifecycle state from it.
142
+
143
+ Mirror stable IDs and short titles from both world contracts:
144
+
145
+ ```markdown
146
+ # Ledger
147
+
148
+ ## Implementation
149
+
150
+ ### Implementation steps
151
+
152
+ - [x] **I-S01:** Completed step
153
+ - [ ] **I-S02:** Remaining step
154
+
155
+ ### Implementation acceptance criteria
156
+
157
+ - [x] **I-AC01:** Proven criterion
158
+ - [ ] **I-AC02:** Unproven criterion
159
+
160
+ ## Deployment
161
+
162
+ ### Deployment steps
163
+
164
+ - [ ] **D-S01:** Deployment step
165
+
166
+ ### Deployment acceptance criteria
167
+
168
+ - [ ] **D-AC01:** Deployment criterion
169
+ ```
170
+
171
+ When adding or removing a world step or criterion, update the matching ledger
172
+ entry in the same change. Keep its stable ID when only the title or details are
173
+ refined. Add new entries unchecked. If a completed item's requirement or proof
174
+ method changes materially, reset its checkbox and re-run the work or proof.
175
+ Infer the next action from `whats-next`, the world contracts, and unchecked
176
+ ledger entries; do not maintain duplicate Current or Next summaries.
177
+ If relevant ledger entries remain unchecked, continue the reported world
178
+ action. If all relevant entries are checked, their evidence remains valid, and
179
+ the candidate is published, stop editing and request explicit acceptance for
180
+ the exact revision reported by `whats-next`.
181
+
182
+ `[x]` means only that the Agent recorded work or a check as complete. It never
183
+ approves an Ideal World, accepts implementation or deployment, changes
184
+ `status.yaml`, or authorizes publication. Record test names, commands,
185
+ artifacts, and results in the corresponding world criterion or concise ledger
186
+ notes without creating a separate evidence schema or public API contract.
187
+
188
+ ## Write Status Facts
189
+
190
+ Silvermoon has no approval, acceptance, or abandonment mutation commands.
191
+ Update the idea's `status.yaml` with ordinary file editing:
192
+
193
+ 1. Reconfirm the decision applies to the selected idea and current
194
+ world revision reported by `whats-next`.
195
+ 2. Add or update only the corresponding revision field, or add/remove canonical
196
+ `abandoned: true` after an explicit human decision.
197
+ 3. Run `silvermoon check --worktree --json` while reviewing the complete
198
+ candidate, then stage it and run `silvermoon check --staged --json`.
199
+ 4. Commit the status decision separately when practical, then non-force push
200
+ with the observation's `observedPrimaryCommit` as expected tip.
201
+
202
+ Never infer a human decision from silence, prose, Git activity, or an outer
203
+ command. Old revision values remain as history and become inactive naturally
204
+ when the idea folder changes.
205
+
206
+ ## Advance The Loop
207
+
208
+ Re-run the intent-preserving entry command only after an expected repository
209
+ delta, an unexpected input change, or a newly arrived external result: use
210
+ `create-idea` for a pending explicit creation and `whats-next` otherwise. End
211
+ the current turn when waiting for human/external input. Report an actionable
212
+ error with its recovery condition, or report no progress and stop if guidance
213
+ completed without a delta. Never poll the same observation.
214
+
215
+ Follow [adoption.md](./references/adoption.md) when creating or explicitly
216
+ converting a repository to Silvermoon.