silvermoon 0.0.3 → 0.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 +36 -13
- package/README.zh-CN.md +32 -13
- package/assets/silvermoon-avatar.svg +395 -0
- package/docs/core-concepts.md +14 -12
- package/docs/getting-started.md +71 -29
- package/docs/maintaining.md +15 -3
- package/docs/npm-package-releases.md +25 -7
- package/docs/operations.md +96 -37
- package/docs/reference.md +223 -38
- package/docs/repository-tasks.md +34 -13
- package/package.json +2 -2
- package/schema/v1/idea-status.schema.json +3 -3
- package/skills/silvermoon/SKILL.md +147 -187
- package/skills/silvermoon/references/adoption.md +34 -20
- package/src/adoption.js +136 -260
- package/src/cli.js +123 -110
- package/src/create-idea.js +222 -110
- package/src/dialogue.js +327 -0
- package/src/git.js +172 -97
- package/src/idea-layout.js +59 -123
- package/src/index.js +240 -170
- package/src/language.js +37 -0
- package/src/observation.js +350 -0
- package/src/trace.js +171 -0
- package/src/whatsnext.js +541 -378
package/docs/getting-started.md
CHANGED
|
@@ -9,23 +9,28 @@ This guide is the authoritative setup and first-use path for Silvermoon.
|
|
|
9
9
|
- Permission to fetch that branch and to publish ordinary non-force commits
|
|
10
10
|
through the repository's normal collaboration path.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Run Silvermoon And Register Its Skill
|
|
13
13
|
|
|
14
|
-
Install Silvermoon
|
|
15
|
-
version:
|
|
14
|
+
Install Silvermoon independently of the target project's dependency graph, or
|
|
15
|
+
invoke a chosen version temporarily:
|
|
16
16
|
|
|
17
17
|
```sh
|
|
18
|
-
npm install --
|
|
18
|
+
npm install --global silvermoon
|
|
19
|
+
silvermoon whats-next
|
|
20
|
+
# or: npx silvermoon@<version> whats-next
|
|
19
21
|
```
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
The setup report gives the exact path for the running installation. Use it to
|
|
24
|
+
register the bundled canonical skill through the universal `skills` target:
|
|
22
25
|
|
|
23
26
|
```sh
|
|
24
|
-
npx skills add
|
|
27
|
+
npx skills add <path-to-running-silvermoon>/skills --skill silvermoon --agent universal --yes --copy
|
|
25
28
|
```
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
The registration lives only at `.agents/skills/silvermoon`. Silvermoon checks
|
|
31
|
+
that its content exactly matches the running installation. It does not require
|
|
32
|
+
the target repository to use Node, contain `package.json`, declare a
|
|
33
|
+
Silvermoon dependency, or have `node_modules`, and it never mutates skill
|
|
29
34
|
registration itself.
|
|
30
35
|
|
|
31
36
|
## Configure The Shared Primary
|
|
@@ -43,10 +48,10 @@ The repository URL is credential-free, canonical shared state. Credentials,
|
|
|
43
48
|
named remotes, and URL rewrites remain local Git concerns. Silvermoon metadata
|
|
44
49
|
paths are fixed and cannot be overridden by configuration.
|
|
45
50
|
|
|
46
|
-
## Configure
|
|
51
|
+
## Configure Content And Output Language
|
|
47
52
|
|
|
48
53
|
All language values are canonical BCP 47 tags such as `en` or `zh-CN`.
|
|
49
|
-
Silvermoon resolves
|
|
54
|
+
Silvermoon resolves the language for project-owned content in this order:
|
|
50
55
|
|
|
51
56
|
1. optional idea `status.yaml` `language`;
|
|
52
57
|
2. optional project `.silvermoon/config.yaml` `preferredLanguage`;
|
|
@@ -62,45 +67,82 @@ preferredLanguage: zh-CN
|
|
|
62
67
|
|
|
63
68
|
Inherited values remain dynamic and are not copied into an idea. Use
|
|
64
69
|
`create-idea --language <tag>` only when the new idea needs a stable override.
|
|
65
|
-
|
|
70
|
+
That command continues to accept any canonical BCP 47 tag.
|
|
71
|
+
|
|
72
|
+
For one invocation's Silvermoon-owned output, `whats-next` and `check` accept
|
|
73
|
+
only the built-in `en-US` and `zh-CN` locales. Input casing is normalized, so
|
|
74
|
+
`EN-us` and `zh-cn` are accepted. This override has higher display precedence
|
|
75
|
+
than idea, project, or user content language and is never persisted:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
silvermoon whats-next <idea> --language zh-CN
|
|
79
|
+
silvermoon check --worktree --language en-US
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Every observation reports the actual built-in locale as `outputLanguage`.
|
|
83
|
+
When configuration is available, `configuration.preferredLanguage` remains
|
|
84
|
+
the resolved content language and can therefore differ from `outputLanguage`.
|
|
85
|
+
Without a temporary override, Chinese content tags use `zh-CN` output and all
|
|
86
|
+
other content tags use the built-in `en-US` output.
|
|
66
87
|
|
|
67
88
|
## Create The First Idea
|
|
68
89
|
|
|
69
90
|
Run:
|
|
70
91
|
|
|
71
92
|
```sh
|
|
72
|
-
|
|
73
|
-
|
|
93
|
+
silvermoon create-idea
|
|
94
|
+
silvermoon create-idea --language zh-cn
|
|
74
95
|
```
|
|
75
96
|
|
|
76
|
-
The command
|
|
77
|
-
|
|
78
|
-
idea scaffold with
|
|
79
|
-
`
|
|
80
|
-
human decision.
|
|
81
|
-
|
|
82
|
-
Replace the guidance in `Idea.md` with the desired outcome,
|
|
83
|
-
constraints. Keep
|
|
84
|
-
|
|
85
|
-
|
|
97
|
+
The command requires the configured primary branch and upstream plus a clean
|
|
98
|
+
local worktree. It does not fetch or require local HEAD to match the remote
|
|
99
|
+
tip. When those checks pass, it creates one untracked idea scaffold with
|
|
100
|
+
`Idea.md`, `Implementation.md`, `Deployment.md`, `ledger.md`, and
|
|
101
|
+
`status.yaml`. It never stages, commits, pushes, or records a human decision.
|
|
102
|
+
|
|
103
|
+
Replace the guidance in the `Idea.md` ideal contract with the desired outcome,
|
|
104
|
+
scope, and constraints. Keep the `Implementation.md` inner implementation
|
|
105
|
+
contract and `Deployment.md` real-world deployment contract placeholders
|
|
106
|
+
synchronized until their lifecycle phases. Review every generated path,
|
|
107
|
+
validate the complete candidate, and commit and publish the prepared idea to
|
|
108
|
+
the configured primary through the repository's normal non-force publication
|
|
109
|
+
path. Verify it is reachable from refreshed primary before asking the user to
|
|
110
|
+
review or approve the exact reported ideal revision. If publication requires a
|
|
111
|
+
pull request, wait until it reaches primary; never ask for approval of an
|
|
112
|
+
unpublished local candidate. Publication does not itself approve the idea.
|
|
86
113
|
|
|
87
114
|
Then ask what comes next with the generated ULID or an exact unique alias:
|
|
88
115
|
|
|
89
116
|
```sh
|
|
90
|
-
|
|
117
|
+
silvermoon whats-next <idea>
|
|
91
118
|
```
|
|
92
119
|
|
|
93
|
-
The
|
|
94
|
-
|
|
95
|
-
|
|
120
|
+
The default dialogue uses lightweight Markdown headings for intent,
|
|
121
|
+
observation, and ordered next instructions; actions and outcomes appear only
|
|
122
|
+
when an operation was attempted. Add `--json` only when a programmatic
|
|
123
|
+
consumer needs the `intention / observation / outcomes / instructions`
|
|
124
|
+
envelope. Execute the applicable instructions in order and run the same
|
|
125
|
+
command again only after an expected repository change, an unexpected input
|
|
126
|
+
change, or a newly arrived external result.
|
|
96
127
|
|
|
97
128
|
## Make Decisions Explicit
|
|
98
129
|
|
|
99
130
|
Silvermoon never infers approval or acceptance. After a person explicitly
|
|
100
131
|
approves the current ideal, accepts the current implementation, or accepts the
|
|
101
132
|
current deployment, record the exact revision reported by `whats-next` in the
|
|
102
|
-
corresponding `status.yaml` field. Validate the full candidate
|
|
103
|
-
|
|
133
|
+
corresponding `status.yaml` field. Validate the full candidate with
|
|
134
|
+
`silvermoon check --worktree`, stage it, then run `silvermoon check --staged`
|
|
135
|
+
to validate the index before publishing a normal non-force commit. Default
|
|
136
|
+
`check` validates committed `HEAD`, not the pending commit; only a successful
|
|
137
|
+
project validation exits `0`.
|
|
138
|
+
|
|
139
|
+
When requesting any approval or acceptance, include the idea's alias and ULID,
|
|
140
|
+
the decision and exact world revision, plus a clickable permalink to the
|
|
141
|
+
canonical world entry pinned to the published primary commit. Link to
|
|
142
|
+
`Idea.md`, `Implementation.md`, or `Deployment.md` as appropriate. Do not use
|
|
143
|
+
a local workspace path or a branch-floating link; if the host has no known
|
|
144
|
+
permalink format, provide the primary commit and repository-relative path and
|
|
145
|
+
explain the limitation.
|
|
104
146
|
|
|
105
147
|
Continue with [Core Concepts](./core-concepts.md) before changing lifecycle
|
|
106
148
|
contracts, or use [Operating Silvermoon](./operations.md) for the routine
|
package/docs/maintaining.md
CHANGED
|
@@ -14,7 +14,8 @@ pnpm install --frozen-lockfile
|
|
|
14
14
|
Use the smallest check that covers a change:
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
|
-
pnpm sync:skills # refresh the generated
|
|
17
|
+
pnpm sync:skills # refresh the generated universal skill copy
|
|
18
|
+
pnpm lint:markdown # Markdown lint and link checks
|
|
18
19
|
pnpm test # fast unit and repository contract tests
|
|
19
20
|
pnpm test:integration # real filesystem and Git behavior
|
|
20
21
|
pnpm test:e2e # packed and installed CLI behavior
|
|
@@ -22,10 +23,18 @@ pnpm check # complete release-grade validation
|
|
|
22
23
|
pnpm check:skills # skill discovery and structure
|
|
23
24
|
```
|
|
24
25
|
|
|
26
|
+
`pnpm check` runs the independent release-grade checks concurrently and waits
|
|
27
|
+
for all of them before reporting every failure. Run the narrower commands above
|
|
28
|
+
while iterating, then use `pnpm check` before delivery.
|
|
29
|
+
|
|
25
30
|
Edit the canonical skill only under `skills/silvermoon`, then run
|
|
26
|
-
`pnpm sync:skills`. The checked-in `.
|
|
31
|
+
`pnpm sync:skills`. The checked-in `.agents/skills/silvermoon` directory is a
|
|
27
32
|
generated copy so repository skill discovery works without symbolic-link
|
|
28
33
|
support. `pnpm check:skills` rejects a stale or manually edited copy.
|
|
34
|
+
The repository-only publish skill is maintained directly under
|
|
35
|
+
`.agents/skills/publish`; it is not part of the generated copy or npm package.
|
|
36
|
+
For documentation and skill changes, run `pnpm lint:markdown`,
|
|
37
|
+
`pnpm check:skills`, and `node --test test/contract/skill.test.mjs`.
|
|
29
38
|
|
|
30
39
|
Run `pnpm check` after CLI, schema, repository model, release, or skill changes.
|
|
31
40
|
Documentation work must also preserve Markdown links, package contents,
|
|
@@ -53,4 +62,7 @@ Use [npm package releases](./npm-package-releases.md) for trusted publishing,
|
|
|
53
62
|
tag rules, release validation, and failure recovery. Publishing occurs only
|
|
54
63
|
through `.github/workflows/publish-npm.yml` from an immutable
|
|
55
64
|
`npm/silvermoon/v<version>` tag whose commit is reachable from `origin/main`.
|
|
56
|
-
|
|
65
|
+
The workflow generates both package READMEs in an isolated staging tree,
|
|
66
|
+
validates and publishes one tarball, then checks its registry integrity,
|
|
67
|
+
package-level README, provenance, and commit-pinned jsDelivr assets. Never
|
|
68
|
+
publish locally or add an npm token.
|
|
@@ -92,13 +92,24 @@ The [`publish-npm.yml`](../.github/workflows/publish-npm.yml) workflow then:
|
|
|
92
92
|
1. verifies the tagged commit is reachable from refreshed `origin/main`;
|
|
93
93
|
2. installs the frozen pnpm dependencies;
|
|
94
94
|
3. runs the allowlisted release planner and confirms the version is absent
|
|
95
|
-
from npm;
|
|
95
|
+
from npm, or records that an exact-version rerun must skip publication;
|
|
96
96
|
4. runs `pnpm test:unit`, `pnpm test:contract`, `pnpm test:integration`, and
|
|
97
97
|
`pnpm check:skills`;
|
|
98
|
-
5.
|
|
99
|
-
|
|
100
|
-
6.
|
|
101
|
-
|
|
98
|
+
5. creates an isolated `git archive` staging tree and generates commit-pinned
|
|
99
|
+
English and Chinese package READMEs without changing the tagged checkout;
|
|
100
|
+
6. creates one tarball, records its path, SHA-256, npm shasum, registry
|
|
101
|
+
integrity, and complete file list, then passes that same file to
|
|
102
|
+
`npm run pack:check` and `npm run test:e2e`;
|
|
103
|
+
7. publishes that exact tarball with provenance and the derived npm dist-tag
|
|
104
|
+
when the version was absent; and
|
|
105
|
+
8. runs `verify-npm-release.mjs` until the registry is consistent or the
|
|
106
|
+
bounded retry window expires.
|
|
107
|
+
|
|
108
|
+
The post-publication verifier requires the exact version and dist-tag, registry
|
|
109
|
+
integrity and tarball bytes, package-level README, both tarball READMEs, npm
|
|
110
|
+
publish and SLSA provenance attestations, tagged Git commit, and commit-pinned
|
|
111
|
+
jsDelivr SVG responses to match the candidate. A successful run prints
|
|
112
|
+
`VERIFY_NPM_RELEASE_OK` with the verified identities.
|
|
102
113
|
|
|
103
114
|
Release runs are serialized within this repository. The registry preflight and
|
|
104
115
|
`npm publish` cannot form one cross-system transaction, so an external
|
|
@@ -110,13 +121,20 @@ duplicate publication without replacing the existing version.
|
|
|
110
121
|
Publication stops before `npm publish` when the tag is malformed, the release
|
|
111
122
|
key is unknown, the package is private, the package name or version differs
|
|
112
123
|
from the mapping and tag, the npm publish configuration is not public npmjs,
|
|
113
|
-
the commit is outside `origin/main`,
|
|
114
|
-
|
|
124
|
+
the commit is outside `origin/main`, registry state cannot be observed, or
|
|
125
|
+
validation fails. If the exact version already exists during a workflow rerun,
|
|
126
|
+
the publish step is skipped and the verifier must prove that registry content
|
|
127
|
+
is byte-identical to the rebuilt candidate and carries the expected provenance.
|
|
128
|
+
Any mismatch is a hard failure.
|
|
115
129
|
|
|
116
130
|
For a transient GitHub or registry failure before publication, rerun the same
|
|
117
131
|
workflow run. Do not move or recreate the tag. For a source, manifest, or
|
|
118
132
|
validation failure, make a new commit on `main`, choose a new version, and push
|
|
119
133
|
a new tag after the fix is merged. npm versions and release tags are immutable.
|
|
134
|
+
For a transient verification failure after publication, rerun only the failed
|
|
135
|
+
workflow job when GitHub offers that option; the planner recognizes the
|
|
136
|
+
existing version, skips `npm publish`, and performs the same complete
|
|
137
|
+
verification again.
|
|
120
138
|
|
|
121
139
|
## Add another package
|
|
122
140
|
|
package/docs/operations.md
CHANGED
|
@@ -9,64 +9,91 @@ publishing Silvermoon ideas.
|
|
|
9
9
|
npx silvermoon whats-next
|
|
10
10
|
npx silvermoon whats-next 01M36QGPNTXEPP61DA4KP4AVZF
|
|
11
11
|
npx silvermoon whats-next publish-documentation --json
|
|
12
|
+
npx silvermoon whats-next publish-documentation --language zh-CN
|
|
12
13
|
```
|
|
13
14
|
|
|
14
15
|
Without a selector, Silvermoon asks for a choice among multiple active ideas,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
and the option to discuss and create a new idea. This remains true with zero,
|
|
17
|
+
one, or many active ideas: only a selector chooses work. Completed and abandoned
|
|
18
|
+
ideas are excluded from default candidates. A selector is either a canonical
|
|
19
|
+
uppercase ULID or an exact, unique, case-sensitive alias.
|
|
20
|
+
|
|
21
|
+
The shared observation exposes the resolved content preference as
|
|
22
|
+
`configuration.preferredLanguage` and the built-in rendering locale as
|
|
23
|
+
`outputLanguage`. Instructions use the content preference for world entries,
|
|
24
|
+
same-world supporting artifacts, and the ledger. A caller may use
|
|
25
|
+
`--language en-US|zh-CN` to override only Silvermoon-owned output for one
|
|
26
|
+
`whats-next` invocation. Commands, identifiers, schema fields, protocol
|
|
27
|
+
markers, and verbatim tool output retain their original form.
|
|
28
|
+
|
|
29
|
+
Every invocation follows three strict layers. It first checks Git,
|
|
30
|
+
configuration compatibility, and `.agents/skills/silvermoon`. It then checks
|
|
31
|
+
local conflicts, changes, HEAD, and upstream identity before any remote access.
|
|
32
|
+
Only after those checks pass does it fetch primary, compare ancestry, and
|
|
33
|
+
route idea work. It never edits, checks out, merges, commits, stashes, deletes,
|
|
34
|
+
resets, fast-forwards, or pushes.
|
|
29
35
|
|
|
30
36
|
## Create An Idea
|
|
31
37
|
|
|
32
38
|
Explicit creation uses:
|
|
33
39
|
|
|
34
40
|
```sh
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
silvermoon create-idea
|
|
42
|
+
silvermoon create-idea --language zh-cn
|
|
37
43
|
```
|
|
38
44
|
|
|
39
45
|
Creation intent is distinct from active-idea selection. If hygiene blocks the
|
|
40
46
|
command, perform only the reported remediation and retry `create-idea`; do not
|
|
41
47
|
replace the request with selector-less navigation.
|
|
42
48
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
Creation checks project readiness, then requires the configured primary branch
|
|
50
|
+
and upstream plus a clean worktree. It does not fetch, compare ancestry, or
|
|
51
|
+
require local HEAD to be aligned with the remote tip. Its preparation reports
|
|
52
|
+
omit the active-idea inventory because existing work does not replace explicit
|
|
53
|
+
creation intent.
|
|
54
|
+
|
|
55
|
+
For `create-idea`, `--language` normalizes any valid BCP 47 tag and writes it
|
|
56
|
+
to the new idea's `status.yaml` as a persistent content-language preference.
|
|
57
|
+
Without the option, creation writes no language field and the idea dynamically
|
|
58
|
+
inherits project, user, or `en-US` defaults. This is distinct from the
|
|
59
|
+
non-persistent `en-US|zh-CN` output override accepted by `whats-next` and
|
|
60
|
+
`check`.
|
|
47
61
|
|
|
48
62
|
The generated files remain untracked for review. Complete `Idea.md`, optionally
|
|
49
63
|
add a concise unique alias, inspect every path, and publish the initial idea
|
|
50
|
-
through ordinary Git.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
through ordinary Git. Validate and commit the complete prepared idea, then make
|
|
65
|
+
that commit reachable from configured primary using the repository's normal
|
|
66
|
+
non-force publication path before asking the user to review or approve it. If
|
|
67
|
+
publication requires a pull request, wait until it reaches primary. Reobserve
|
|
68
|
+
the exact `idealRevision` after publication; never ask for approval of an
|
|
69
|
+
unpublished local candidate, and never treat publication as approval.
|
|
70
|
+
|
|
71
|
+
## Follow One Observation
|
|
72
|
+
|
|
73
|
+
Treat `intention`, `observation`, `outcomes`, and `instructions` as one
|
|
74
|
+
immutable dialogue report for `whats-next` and `create-idea`. Default output
|
|
75
|
+
uses lightweight Markdown headings and lists for intent, observation, and
|
|
76
|
+
next instructions, including actions and outcomes only if an operation was
|
|
77
|
+
attempted. `--json` serializes the same model, retaining `outcomes: []` when
|
|
78
|
+
none were attempted.
|
|
79
|
+
|
|
80
|
+
Project setup takes precedence over repository synchronization, which takes
|
|
81
|
+
precedence over lifecycle work. Instructions include every known remediation
|
|
82
|
+
for the current layer in priority order. Large change sets report complete
|
|
83
|
+
counts, bounded path samples, omitted counts, and exact commands for the full
|
|
84
|
+
diff. Preserve unknown and concurrent work. Never force-push, use
|
|
85
|
+
`reset --hard`, broadly clean the worktree, or silently rewrite history.
|
|
61
86
|
|
|
62
87
|
After an observable change, run `whats-next` again. Do not poll an unchanged
|
|
63
|
-
observation.
|
|
88
|
+
observation. When the invocation used `--language`, every generated retry
|
|
89
|
+
command preserves the same canonical output-language option.
|
|
64
90
|
|
|
65
91
|
## Author World Contracts
|
|
66
92
|
|
|
67
|
-
`Idea.md` is the Ideal World
|
|
68
|
-
|
|
69
|
-
|
|
93
|
+
`Idea.md` is the Ideal World's ideal contract. `Implementation.md` is the
|
|
94
|
+
Inner World's inner implementation contract, and `Deployment.md` is the Outer
|
|
95
|
+
World's real-world deployment contract. The latter two contain `## Steps` and
|
|
96
|
+
`## Acceptance criteria`. Every item uses a stable level-three heading:
|
|
70
97
|
|
|
71
98
|
- implementation steps: `I-Sxx`
|
|
72
99
|
- implementation criteria: `I-ACxx`
|
|
@@ -94,14 +121,46 @@ the current reported world revision. Edit only the corresponding status fact:
|
|
|
94
121
|
Validate the complete candidate:
|
|
95
122
|
|
|
96
123
|
```sh
|
|
97
|
-
|
|
124
|
+
silvermoon check --worktree
|
|
125
|
+
silvermoon check --worktree --language zh-CN
|
|
98
126
|
git add .silvermoon/ideas/<ULID>/status.yaml
|
|
99
|
-
|
|
127
|
+
silvermoon check --staged
|
|
100
128
|
```
|
|
101
129
|
|
|
130
|
+
`check` is a project-only validator, not a navigation command. It does not
|
|
131
|
+
check worktree hygiene, upstream, or ancestry and does not suggest next steps.
|
|
132
|
+
Without a target it validates committed `HEAD`, not the pending commit.
|
|
133
|
+
`--worktree` validates the full candidate, while `--staged` validates exactly
|
|
134
|
+
the index and is the pre-commit hook target. Its JSON has `intention` and
|
|
135
|
+
`observation` only; it has no `outcomes` or `instructions`. Exit status `0`
|
|
136
|
+
means the chosen project snapshot is valid; `1` means invalid or unavailable
|
|
137
|
+
and must block the commit; `2` means invalid CLI usage. Do not treat the
|
|
138
|
+
existence of a report as permission to commit.
|
|
139
|
+
|
|
140
|
+
`check --language en-US|zh-CN` changes only Silvermoon-owned report framing.
|
|
141
|
+
It is orthogonal to every check target and never changes the selected snapshot,
|
|
142
|
+
validation conclusion, problems, or exit status.
|
|
143
|
+
|
|
144
|
+
`check` does not infer that a status field was newly written, prove who
|
|
145
|
+
authorized it, compare it with a commit parent, or search history for its
|
|
146
|
+
origin. Those are workflow responsibilities: match an explicit human decision
|
|
147
|
+
to the exact revision reported by `whats-next`, edit only the corresponding
|
|
148
|
+
status fact, review the candidate, and publish without rewriting concurrent
|
|
149
|
+
history. Old decision revisions may remain in status after a world changes;
|
|
150
|
+
their mismatch is what derives the idea's earlier lifecycle state.
|
|
151
|
+
|
|
102
152
|
Prefer a status-only decision commit, publish through the repository's normal
|
|
103
153
|
non-force path, and verify the commit is reachable from refreshed primary.
|
|
104
154
|
|
|
155
|
+
When asking for approval or acceptance, identify the idea by alias and ULID,
|
|
156
|
+
state the exact reported world revision, and link the corresponding canonical
|
|
157
|
+
entry at the published primary commit: `Idea.md` for ideal approval,
|
|
158
|
+
`Implementation.md` for implementation acceptance, or `Deployment.md` for
|
|
159
|
+
deployment acceptance. Use a commit-pinned web permalink rather than a local
|
|
160
|
+
workspace path or a branch name that can move. The linked revision and
|
|
161
|
+
publication are review context only; the user must still make the decision
|
|
162
|
+
explicitly.
|
|
163
|
+
|
|
105
164
|
## Publish Work
|
|
106
165
|
|
|
107
166
|
Before publication, compare with the observed primary tip, run checks focused
|