universal-dev-standards 5.3.1 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/ai/standards/agent-communication-protocol.ai.yaml +32 -166
- package/bundled/ai/standards/agent-dispatch.ai.yaml +32 -58
- package/bundled/ai/standards/branch-completion.ai.yaml +34 -70
- package/bundled/ai/standards/change-batching-standards.ai.yaml +31 -180
- package/bundled/ai/standards/execution-history.ai.yaml +30 -288
- package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +28 -169
- package/bundled/ai/standards/workflow-enforcement.ai.yaml +34 -240
- package/bundled/ai/standards/workflow-state-protocol.ai.yaml +31 -107
- package/bundled/locales/zh-CN/CHANGELOG.md +9 -2
- package/bundled/locales/zh-CN/README.md +1 -1
- package/bundled/locales/zh-TW/CHANGELOG.md +9 -2
- package/bundled/locales/zh-TW/README.md +1 -1
- package/package.json +1 -1
- package/src/commands/update.js +83 -11
- package/standards-registry.json +51 -11
|
@@ -1,253 +1,47 @@
|
|
|
1
|
-
# Workflow Enforcement Standards -
|
|
2
|
-
#
|
|
1
|
+
# Workflow Enforcement Standards - DEPRECATED STUB
|
|
2
|
+
# This file has been migrated to DevAP per DEC-049 (UDS/DevAP responsibility split).
|
|
3
|
+
# Canonical location: dev-autopilot/standards/flow/workflow-enforcement.ai.yaml
|
|
4
|
+
# Migration: XSPEC-086 Phase 2 (2026-04-27)
|
|
5
|
+
#
|
|
6
|
+
# Human-readable standard: core/workflow-enforcement.md (remains in UDS)
|
|
7
|
+
# Deprecation schedule: UDS 5.4.0 deprecated → UDS 6.0.0 removed
|
|
3
8
|
|
|
4
9
|
id: workflow-enforcement
|
|
5
10
|
meta:
|
|
6
|
-
version: "1.0.
|
|
7
|
-
updated: "2026-
|
|
11
|
+
version: "1.0.1"
|
|
12
|
+
updated: "2026-04-27"
|
|
13
|
+
deprecated: true
|
|
14
|
+
deprecated_since: "5.4.0"
|
|
15
|
+
removal_version: "6.0.0"
|
|
16
|
+
canonical_owner: devap
|
|
17
|
+
canonical_path: "dev-autopilot/standards/flow/workflow-enforcement.ai.yaml"
|
|
8
18
|
source: core/workflow-enforcement.md
|
|
9
|
-
description:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
enforce:
|
|
13
|
-
description: Block phase transition, show guidance to correct phase
|
|
14
|
-
behavior: AI refuses to proceed and explains which prerequisite is missing
|
|
15
|
-
default: true
|
|
16
|
-
|
|
17
|
-
suggest:
|
|
18
|
-
description: Show warning but allow override with user confirmation
|
|
19
|
-
behavior: AI warns about skipped prerequisites but proceeds if user insists
|
|
20
|
-
|
|
21
|
-
off:
|
|
22
|
-
description: No enforcement checks
|
|
23
|
-
behavior: AI follows workflow steps without gate checks
|
|
24
|
-
|
|
25
|
-
config_location: ".uds/config.yaml"
|
|
26
|
-
config_key: "workflow.enforcement_mode"
|
|
27
|
-
|
|
28
|
-
gates:
|
|
29
|
-
sdd:
|
|
30
|
-
description: Spec-Driven Development phase gates
|
|
31
|
-
phases:
|
|
32
|
-
- phase: discuss
|
|
33
|
-
prerequisites: []
|
|
34
|
-
note: Entry point, no prerequisites
|
|
35
|
-
|
|
36
|
-
- phase: create
|
|
37
|
-
prerequisites:
|
|
38
|
-
- check: orphan_specs
|
|
39
|
-
command: "ls docs/specs/SPEC-*.md 2>/dev/null"
|
|
40
|
-
condition: warn_if_non_terminal_specs_exist
|
|
41
|
-
on_fail: warn_and_offer_cleanup
|
|
42
|
-
blocking: false
|
|
43
|
-
|
|
44
|
-
- phase: review
|
|
45
|
-
prerequisites:
|
|
46
|
-
- check: spec_exists
|
|
47
|
-
command: "ls docs/specs/SPEC-*.md"
|
|
48
|
-
condition: at_least_one_spec_exists
|
|
49
|
-
on_fail: guide_to_create
|
|
50
|
-
blocking: true
|
|
51
|
-
- check: spec_status_draft
|
|
52
|
-
command: "grep -m1 '^status:' docs/specs/SPEC-XXX.md"
|
|
53
|
-
condition: status_is_draft
|
|
54
|
-
on_fail: guide_to_create
|
|
55
|
-
blocking: true
|
|
56
|
-
|
|
57
|
-
- phase: approve
|
|
58
|
-
prerequisites:
|
|
59
|
-
- check: spec_in_review
|
|
60
|
-
condition: status_is_review
|
|
61
|
-
on_fail: guide_to_review
|
|
62
|
-
blocking: true
|
|
63
|
-
- check: review_comments_addressed
|
|
64
|
-
condition: no_unresolved_comments
|
|
65
|
-
on_fail: guide_to_resolve_comments
|
|
66
|
-
blocking: true
|
|
67
|
-
|
|
68
|
-
- phase: implement
|
|
69
|
-
prerequisites:
|
|
70
|
-
- check: spec_exists
|
|
71
|
-
command: "ls docs/specs/SPEC-*.md"
|
|
72
|
-
condition: at_least_one_spec_exists
|
|
73
|
-
on_fail: guide_to_create
|
|
74
|
-
blocking: true
|
|
75
|
-
- check: spec_approved
|
|
76
|
-
condition: status_is_approved
|
|
77
|
-
on_fail: guide_to_approve
|
|
78
|
-
blocking: true
|
|
79
|
-
- check: workflow_state
|
|
80
|
-
command: "ls .workflow-state/sdd-*.yaml 2>/dev/null"
|
|
81
|
-
condition: check_for_resumable_state
|
|
82
|
-
on_fail: start_fresh
|
|
83
|
-
blocking: false
|
|
84
|
-
|
|
85
|
-
- phase: verify
|
|
86
|
-
prerequisites:
|
|
87
|
-
- check: implementation_exists
|
|
88
|
-
condition: spec_has_implementation_commits
|
|
89
|
-
on_fail: guide_to_implement
|
|
90
|
-
blocking: true
|
|
91
|
-
- check: ac_coverage
|
|
92
|
-
condition: all_ac_have_code_and_tests
|
|
93
|
-
on_fail: list_incomplete_acs
|
|
94
|
-
blocking: true
|
|
95
|
-
|
|
96
|
-
tdd:
|
|
97
|
-
description: Test-Driven Development phase gates
|
|
98
|
-
phases:
|
|
99
|
-
- phase: red
|
|
100
|
-
prerequisites:
|
|
101
|
-
- check: feature_defined
|
|
102
|
-
condition: user_has_described_behavior
|
|
103
|
-
on_fail: ask_for_behavior_description
|
|
104
|
-
blocking: true
|
|
105
|
-
- check: sdd_spec_if_applicable
|
|
106
|
-
condition: if_sdd_project_spec_exists_and_approved
|
|
107
|
-
on_fail: guide_to_sdd
|
|
108
|
-
blocking: false
|
|
109
|
-
|
|
110
|
-
- phase: green
|
|
111
|
-
prerequisites:
|
|
112
|
-
- check: failing_test_exists
|
|
113
|
-
command: "npm test 2>&1 | grep -E 'FAIL|failing'"
|
|
114
|
-
condition: at_least_one_test_failing
|
|
115
|
-
on_fail: guide_to_red_phase
|
|
116
|
-
blocking: true
|
|
117
|
-
|
|
118
|
-
- phase: refactor
|
|
119
|
-
prerequisites:
|
|
120
|
-
- check: all_tests_passing
|
|
121
|
-
command: "npm test"
|
|
122
|
-
condition: zero_test_failures
|
|
123
|
-
on_fail: guide_to_green_phase
|
|
124
|
-
blocking: true
|
|
125
|
-
|
|
126
|
-
bdd:
|
|
127
|
-
description: Behavior-Driven Development phase gates
|
|
128
|
-
phases:
|
|
129
|
-
- phase: discovery
|
|
130
|
-
prerequisites:
|
|
131
|
-
- check: behavior_identified
|
|
132
|
-
condition: user_has_identified_behavior
|
|
133
|
-
on_fail: ask_for_behavior
|
|
134
|
-
blocking: true
|
|
135
|
-
|
|
136
|
-
- phase: formulation
|
|
137
|
-
prerequisites:
|
|
138
|
-
- check: examples_collected
|
|
139
|
-
condition: discovery_produced_examples
|
|
140
|
-
on_fail: guide_to_discovery
|
|
141
|
-
blocking: true
|
|
142
|
-
|
|
143
|
-
- phase: automation
|
|
144
|
-
prerequisites:
|
|
145
|
-
- check: feature_file_exists
|
|
146
|
-
command: "ls tests/features/*.feature 2>/dev/null"
|
|
147
|
-
condition: at_least_one_feature_file
|
|
148
|
-
on_fail: guide_to_formulation
|
|
149
|
-
blocking: true
|
|
150
|
-
- check: gherkin_format
|
|
151
|
-
condition: scenarios_use_given_when_then
|
|
152
|
-
on_fail: fix_scenario_format
|
|
153
|
-
blocking: true
|
|
154
|
-
|
|
155
|
-
- phase: living_docs
|
|
156
|
-
prerequisites:
|
|
157
|
-
- check: steps_implemented
|
|
158
|
-
condition: step_definitions_exist
|
|
159
|
-
on_fail: guide_to_automation
|
|
160
|
-
blocking: true
|
|
161
|
-
- check: scenarios_passing
|
|
162
|
-
condition: all_scenarios_pass
|
|
163
|
-
on_fail: fix_failing_scenarios
|
|
164
|
-
blocking: true
|
|
165
|
-
|
|
166
|
-
commit:
|
|
167
|
-
description: Commit workflow gates
|
|
168
|
-
phases:
|
|
169
|
-
- phase: commit
|
|
170
|
-
prerequisites:
|
|
171
|
-
- check: staged_changes
|
|
172
|
-
command: "git diff --cached --stat"
|
|
173
|
-
condition: has_staged_changes
|
|
174
|
-
on_fail: guide_to_git_add
|
|
175
|
-
blocking: true
|
|
176
|
-
- check: no_merge_conflicts
|
|
177
|
-
condition: no_conflict_markers_in_staged
|
|
178
|
-
on_fail: resolve_conflicts
|
|
179
|
-
blocking: true
|
|
180
|
-
- check: tests_pass
|
|
181
|
-
condition: tests_passing_for_feat_fix
|
|
182
|
-
on_fail: fix_tests
|
|
183
|
-
blocking: true
|
|
184
|
-
- check: spec_reference
|
|
185
|
-
condition: feat_fix_should_reference_spec
|
|
186
|
-
on_fail: suggest_spec_reference
|
|
187
|
-
blocking: false
|
|
19
|
+
description: >
|
|
20
|
+
DEPRECATED: This standard has moved to DevAP (flow orchestration layer).
|
|
21
|
+
Install DevAP and load standards/flow/workflow-enforcement.ai.yaml instead.
|
|
188
22
|
|
|
189
23
|
rules:
|
|
190
|
-
- id:
|
|
191
|
-
trigger:
|
|
24
|
+
- id: deprecation-notice
|
|
25
|
+
trigger: any workflow enforcement check
|
|
192
26
|
instruction: >
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
guide the user to the correct prerequisite phase. Non-blocking
|
|
197
|
-
prerequisites generate warnings but allow proceeding.
|
|
198
|
-
priority: required
|
|
27
|
+
This standard (workflow-enforcement.ai.yaml) has been migrated to DevAP.
|
|
28
|
+
For the canonical executable definition, load:
|
|
29
|
+
dev-autopilot/standards/flow/workflow-enforcement.ai.yaml
|
|
199
30
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
instruction: >
|
|
203
|
-
Read the project's enforcement mode from .uds/config.yaml
|
|
204
|
-
(workflow.enforcement_mode). If 'enforce' (default), block on
|
|
205
|
-
failed prerequisites. If 'suggest', warn but allow override.
|
|
206
|
-
If 'off', skip all checks.
|
|
207
|
-
priority: required
|
|
31
|
+
The human-readable standard remains at:
|
|
32
|
+
universal-dev-standards/core/workflow-enforcement.md
|
|
208
33
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
instruction: >
|
|
212
|
-
When a prerequisite fails, provide actionable guidance:
|
|
213
|
-
1. Explain WHAT is missing (e.g., "No approved spec found")
|
|
214
|
-
2. Explain WHY it matters (e.g., "SDD requires approved specs before implementation")
|
|
215
|
-
3. Show HOW to fix it (e.g., "Run /sdd approve SPEC-XXX.md first")
|
|
216
|
-
Never just say "blocked" — always provide the path forward.
|
|
34
|
+
To install DevAP: npm install -g @devap/cli
|
|
35
|
+
See: https://github.com/AsiaOstrich/dev-autopilot
|
|
217
36
|
priority: required
|
|
218
37
|
|
|
219
|
-
- id:
|
|
220
|
-
trigger:
|
|
221
|
-
instruction: >
|
|
222
|
-
Before starting a fresh workflow, check .workflow-state/ for
|
|
223
|
-
existing state files. If an active workflow exists for the same
|
|
224
|
-
spec or feature, offer to resume instead of starting fresh.
|
|
225
|
-
priority: required
|
|
226
|
-
|
|
227
|
-
- id: feat-commit-spec-suggestion
|
|
228
|
-
trigger: committing a feat or fix type change
|
|
38
|
+
- id: enforce-phase-order
|
|
39
|
+
trigger: AI assistant receives a workflow phase command
|
|
229
40
|
instruction: >
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
to the commit footer. If no specs exist and the change is
|
|
233
|
-
significant (>3 files changed or new API), suggest creating a
|
|
234
|
-
spec via /sdd. This is advisory, not blocking.
|
|
235
|
-
priority: recommended
|
|
236
|
-
|
|
237
|
-
quick_reference:
|
|
238
|
-
enforcement_modes:
|
|
239
|
-
columns: [Mode, Behavior, Config Value]
|
|
240
|
-
rows:
|
|
241
|
-
- [Enforce, "Block + Guide", "enforce"]
|
|
242
|
-
- [Suggest, "Warn + Allow", "suggest"]
|
|
243
|
-
- [Off, "No checks", "off"]
|
|
41
|
+
DEPRECATED — load dev-autopilot/standards/flow/workflow-enforcement.ai.yaml
|
|
42
|
+
for the current executable gate definitions.
|
|
244
43
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
- [SDD, verify, "All ACs must have code + tests"]
|
|
250
|
-
- [TDD, green, "At least one failing test"]
|
|
251
|
-
- [TDD, refactor, "All tests passing"]
|
|
252
|
-
- [BDD, automation, ".feature file must exist"]
|
|
253
|
-
- [Commit, feat/fix, "Suggest spec reference"]
|
|
44
|
+
Minimal fallback: Before executing any workflow phase, check that
|
|
45
|
+
prerequisites for the phase are met. If not, stop and guide the user
|
|
46
|
+
to the correct prerequisite phase.
|
|
47
|
+
priority: required
|
|
@@ -1,121 +1,45 @@
|
|
|
1
|
-
# Workflow State Protocol -
|
|
2
|
-
#
|
|
1
|
+
# Workflow State Protocol - DEPRECATED STUB
|
|
2
|
+
# This file has been migrated to DevAP per DEC-049 (UDS/DevAP responsibility split).
|
|
3
|
+
# Canonical location: dev-autopilot/standards/flow/workflow-state-protocol.ai.yaml
|
|
4
|
+
# Migration: XSPEC-086 Phase 2 (2026-04-27)
|
|
5
|
+
#
|
|
6
|
+
# Human-readable standard: core/workflow-state-protocol.md (remains in UDS)
|
|
7
|
+
# Deprecation schedule: UDS 5.4.0 deprecated → UDS 6.0.0 removed
|
|
3
8
|
|
|
4
9
|
id: workflow-state-protocol
|
|
5
10
|
meta:
|
|
6
|
-
version: "1.0.
|
|
7
|
-
updated: "2026-
|
|
11
|
+
version: "1.0.1"
|
|
12
|
+
updated: "2026-04-27"
|
|
13
|
+
deprecated: true
|
|
14
|
+
deprecated_since: "5.4.0"
|
|
15
|
+
removal_version: "6.0.0"
|
|
16
|
+
canonical_owner: devap
|
|
17
|
+
canonical_path: "dev-autopilot/standards/flow/workflow-state-protocol.ai.yaml"
|
|
8
18
|
source: core/workflow-state-protocol.md
|
|
9
|
-
description:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
state_persistence:
|
|
13
|
-
rule: Multi-phase workflows must save state at phase transitions
|
|
14
|
-
rationale: Enables resumption after session boundaries without state loss
|
|
15
|
-
|
|
16
|
-
event_sourcing:
|
|
17
|
-
rule: Important decisions and transitions are logged in append-only event log
|
|
18
|
-
rationale: Provides audit trail and enables understanding of workflow history
|
|
19
|
-
|
|
20
|
-
session_independence:
|
|
21
|
-
rule: Each AI session should be able to resume any workflow from saved state
|
|
22
|
-
rationale: Context window limits make single-session completion unreliable
|
|
23
|
-
|
|
24
|
-
state_file:
|
|
25
|
-
location: ".workflow-state/{workflow}-{id}.yaml"
|
|
26
|
-
required_fields:
|
|
27
|
-
- workflow # Workflow type (sdd, feature-dev, etc.)
|
|
28
|
-
- spec_id # Spec or task identifier
|
|
29
|
-
- current_phase # Active phase ID
|
|
30
|
-
- status # in-progress | paused | blocked | completed | abandoned
|
|
31
|
-
- updated # Last update timestamp (ISO 8601)
|
|
32
|
-
- phases_completed # Ordered list of completed phase IDs
|
|
33
|
-
optional_fields:
|
|
34
|
-
- title
|
|
35
|
-
- iteration_count
|
|
36
|
-
- created
|
|
37
|
-
- artifacts
|
|
38
|
-
- progress_summary
|
|
39
|
-
- completed_steps
|
|
40
|
-
- next_steps
|
|
41
|
-
- open_questions
|
|
42
|
-
- decisions
|
|
43
|
-
|
|
44
|
-
event_log:
|
|
45
|
-
location: ".workflow-state/{workflow}-{id}.log.yaml"
|
|
46
|
-
format: append-only YAML list
|
|
47
|
-
event_types:
|
|
48
|
-
- phase_enter # Workflow enters a new phase
|
|
49
|
-
- phase_exit # Workflow exits a phase
|
|
50
|
-
- checkpoint # Notable milestone
|
|
51
|
-
- decision # Important decision made
|
|
52
|
-
- error # Error or failure
|
|
53
|
-
- interruption # Workflow paused (HITL or context limit)
|
|
54
|
-
- resumption # Workflow resumed from saved state
|
|
55
|
-
required_event_fields:
|
|
56
|
-
- timestamp
|
|
57
|
-
- event_type
|
|
58
|
-
- phase
|
|
59
|
-
- summary
|
|
19
|
+
description: >
|
|
20
|
+
DEPRECATED: This standard has moved to DevAP (flow orchestration layer).
|
|
21
|
+
Install DevAP and load standards/flow/workflow-state-protocol.ai.yaml instead.
|
|
60
22
|
|
|
61
23
|
rules:
|
|
62
|
-
- id:
|
|
63
|
-
trigger: workflow
|
|
24
|
+
- id: deprecation-notice
|
|
25
|
+
trigger: any workflow state operation
|
|
64
26
|
instruction: >
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
27
|
+
This standard (workflow-state-protocol.ai.yaml) has been migrated to DevAP.
|
|
28
|
+
For the canonical executable definition, load:
|
|
29
|
+
dev-autopilot/standards/flow/workflow-state-protocol.ai.yaml
|
|
30
|
+
|
|
31
|
+
The human-readable standard remains at:
|
|
32
|
+
universal-dev-standards/core/workflow-state-protocol.md
|
|
33
|
+
|
|
34
|
+
To install DevAP: npm install -g @devap/cli
|
|
69
35
|
priority: required
|
|
70
36
|
|
|
71
37
|
- id: state-load-on-resume
|
|
72
38
|
trigger: session start or workflow command invocation
|
|
73
39
|
instruction: >
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
of active workflows and offer to resume. When a workflow command
|
|
77
|
-
is invoked (e.g., /sdd implement SPEC-042), check for existing
|
|
78
|
-
state before starting fresh.
|
|
79
|
-
priority: required
|
|
40
|
+
DEPRECATED — load dev-autopilot/standards/flow/workflow-state-protocol.ai.yaml
|
|
41
|
+
for the current executable state protocol.
|
|
80
42
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
instruction: >
|
|
84
|
-
Before ending a session during an active workflow, save current
|
|
85
|
-
progress to the state file. Update progress_summary, next_steps,
|
|
86
|
-
and open_questions to enable seamless resumption.
|
|
43
|
+
Minimal fallback: At session start, check .workflow-state/ for active workflows
|
|
44
|
+
and offer to resume if found.
|
|
87
45
|
priority: required
|
|
88
|
-
|
|
89
|
-
- id: event-log-on-decision
|
|
90
|
-
trigger: important design or scope decision made
|
|
91
|
-
instruction: >
|
|
92
|
-
When a significant decision is made during a workflow (design choice,
|
|
93
|
-
scope change, technology selection), append a 'decision' event to the
|
|
94
|
-
event log with the decision summary and reasoning.
|
|
95
|
-
priority: recommended
|
|
96
|
-
|
|
97
|
-
- id: state-staleness-warning
|
|
98
|
-
trigger: loading state file older than 7 days
|
|
99
|
-
instruction: >
|
|
100
|
-
If a state file's 'updated' timestamp is more than 7 days old,
|
|
101
|
-
warn the user that the workflow state may be stale and suggest
|
|
102
|
-
reviewing it before continuing.
|
|
103
|
-
priority: recommended
|
|
104
|
-
|
|
105
|
-
- id: gitignore-workflow-state
|
|
106
|
-
trigger: creating .workflow-state/ directory
|
|
107
|
-
instruction: >
|
|
108
|
-
Recommend adding .workflow-state/ to .gitignore as workflow state
|
|
109
|
-
is session-specific. Exception: teams sharing state across developers
|
|
110
|
-
may version-control it but should clean up completed workflows.
|
|
111
|
-
priority: recommended
|
|
112
|
-
|
|
113
|
-
quick_reference:
|
|
114
|
-
state_lifecycle:
|
|
115
|
-
columns: [Event, Action]
|
|
116
|
-
rows:
|
|
117
|
-
- [Phase transition, Update state file + append event log]
|
|
118
|
-
- [Important decision, Record in state decisions + event log]
|
|
119
|
-
- [Session ending, Save progress_summary and next_steps]
|
|
120
|
-
- [Session starting, Check .workflow-state/ for active workflows]
|
|
121
|
-
- [Workflow complete, Set status to completed]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../CHANGELOG.md
|
|
3
|
-
source_version: 5.
|
|
4
|
-
translation_version: 5.
|
|
3
|
+
source_version: 5.4.0
|
|
4
|
+
translation_version: 5.4.0
|
|
5
5
|
last_synced: 2026-04-27
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
@@ -17,6 +17,13 @@ status: current
|
|
|
17
17
|
|
|
18
18
|
## [Unreleased]
|
|
19
19
|
|
|
20
|
+
## [5.3.2] - 2026-04-27
|
|
21
|
+
|
|
22
|
+
> **修补版本发布**:Bug 修复 —— `uds update -y` 现在会自动安装/更新 Skills 和 Commands,不再只显示提示信息。
|
|
23
|
+
|
|
24
|
+
### 修复
|
|
25
|
+
- **`uds update --yes` / `-y`**(`cli/src/commands/update.js`):`--yes` 标志此前对 Skills 和 Commands 安装完全跳过,只显示「New features available」提示。现在与交互模式行为一致 —— 缺少的 Skills/Commands 立即安装,过时的直接更新,并同步刷新 manifest 与集成文件。修复了 `uds update -y` 让 `.claude/` Skills 保持不变而交互式 `uds update` 正常更新的行为差异。
|
|
26
|
+
|
|
20
27
|
## [5.3.1] - 2026-04-27
|
|
21
28
|
|
|
22
29
|
> **修补版本发布**:Bug 修复 —— `uds update` 后 `uds check` 不再误报「AGENTS.md 标准不同步」。
|
|
@@ -14,7 +14,7 @@ status: current
|
|
|
14
14
|
|
|
15
15
|
> **语言**: [English](../../README.md) | [繁體中文](../zh-TW/README.md) | 简体中文
|
|
16
16
|
|
|
17
|
-
**版本**: 5.
|
|
17
|
+
**版本**: 5.4.0 | **发布日期**: 2026-04-13 | **授权**: [双重授权](../../LICENSE) (CC BY 4.0 + MIT)
|
|
18
18
|
|
|
19
19
|
语言无关、框架无关的软件项目文档标准。通过 AI 原生工作流,确保不同技术栈之间的一致性、质量和可维护性。
|
|
20
20
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../CHANGELOG.md
|
|
3
|
-
source_version: 5.
|
|
4
|
-
translation_version: 5.
|
|
3
|
+
source_version: 5.4.0
|
|
4
|
+
translation_version: 5.4.0
|
|
5
5
|
last_synced: 2026-04-27
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
@@ -17,6 +17,13 @@ status: current
|
|
|
17
17
|
|
|
18
18
|
## [Unreleased]
|
|
19
19
|
|
|
20
|
+
## [5.3.2] - 2026-04-27
|
|
21
|
+
|
|
22
|
+
> **修補版本發布**:Bug 修復 —— `uds update -y` 現在會自動安裝/更新 Skills 和 Commands,不再只顯示提示訊息。
|
|
23
|
+
|
|
24
|
+
### 修復
|
|
25
|
+
- **`uds update --yes` / `-y`**(`cli/src/commands/update.js`):`--yes` 旗標先前對 Skills 和 Commands 安裝完全跳過,只顯示「New features available」提示。現在與互動模式行為一致 —— 缺少的 Skills/Commands 立即安裝,過時的直接更新,並同步刷新 manifest 與整合檔案。修復了 `uds update -y` 讓 `.claude/` Skills 保持不變而互動式 `uds update` 正常更新的行為差異。
|
|
26
|
+
|
|
20
27
|
## [5.3.1] - 2026-04-27
|
|
21
28
|
|
|
22
29
|
> **修補版本發布**:Bug 修復 —— `uds update` 後 `uds check` 不再誤報「AGENTS.md 標準不同步」。
|
|
@@ -14,7 +14,7 @@ status: current
|
|
|
14
14
|
|
|
15
15
|
> **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
|
|
16
16
|
|
|
17
|
-
**版本**: 5.
|
|
17
|
+
**版本**: 5.4.0 | **發布日期**: 2026-04-13 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
|
|
18
18
|
|
|
19
19
|
語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
|
|
20
20
|
|
package/package.json
CHANGED
package/src/commands/update.js
CHANGED
|
@@ -967,24 +967,96 @@ export async function updateCommand(options) {
|
|
|
967
967
|
writeManifest(manifest, projectPath);
|
|
968
968
|
}
|
|
969
969
|
} else {
|
|
970
|
-
// --yes mode:
|
|
971
|
-
|
|
972
|
-
|
|
970
|
+
// --yes mode: auto-install/update Skills and Commands (treat -y as confirming all prompts)
|
|
971
|
+
const skillsLocale = resolveLocale(manifest, projectPath);
|
|
972
|
+
let hasChanges = false;
|
|
973
|
+
|
|
973
974
|
if (missingSkills.length > 0) {
|
|
974
|
-
const
|
|
975
|
-
|
|
975
|
+
const spinner = ora(msg.installingNewSkills || 'Installing Skills...').start();
|
|
976
|
+
const result = await installSkillsToMultipleAgents(missingSkills, null, projectPath, skillsLocale);
|
|
977
|
+
if (!manifest.skills) manifest.skills = {};
|
|
978
|
+
manifest.skills.installed = true;
|
|
979
|
+
manifest.skills.version = repoInfo.skills.version;
|
|
980
|
+
manifest.skills.installations = [...(manifest.skills.installations || []), ...missingSkills];
|
|
981
|
+
if (result.allFileHashes) {
|
|
982
|
+
if (!manifest.skillHashes) manifest.skillHashes = {};
|
|
983
|
+
Object.assign(manifest.skillHashes, result.allFileHashes);
|
|
984
|
+
}
|
|
985
|
+
if (result.totalErrors === 0) {
|
|
986
|
+
spinner.succeed((msg.newSkillsInstalled || 'Installed Skills for {count} AI tools').replace('{count}', missingSkills.length));
|
|
987
|
+
} else {
|
|
988
|
+
spinner.warn((msg.newSkillsInstalledWithErrors || 'Installed Skills with {errors} errors').replace('{errors}', result.totalErrors));
|
|
989
|
+
}
|
|
990
|
+
hasChanges = true;
|
|
976
991
|
}
|
|
992
|
+
|
|
977
993
|
if (outdatedSkills.length > 0) {
|
|
978
|
-
const
|
|
979
|
-
|
|
994
|
+
const spinner = ora(msg.updatingSkills || 'Updating Skills...').start();
|
|
995
|
+
const result = await installSkillsToMultipleAgents(outdatedSkills, null, projectPath, skillsLocale);
|
|
996
|
+
if (!manifest.skills) manifest.skills = {};
|
|
997
|
+
manifest.skills.version = repoInfo.skills.version;
|
|
998
|
+
if (!manifest.skills.location && manifest.skills.installations?.length > 0) {
|
|
999
|
+
const levels = manifest.skills.installations.map(s => s.level).filter(Boolean);
|
|
1000
|
+
const uniqueLevels = [...new Set(levels)];
|
|
1001
|
+
manifest.skills.location = uniqueLevels.length === 1 ? uniqueLevels[0] : (uniqueLevels.length > 1 ? 'multiple' : undefined);
|
|
1002
|
+
}
|
|
1003
|
+
if (result.allFileHashes) {
|
|
1004
|
+
if (!manifest.skillHashes) manifest.skillHashes = {};
|
|
1005
|
+
Object.assign(manifest.skillHashes, result.allFileHashes);
|
|
1006
|
+
}
|
|
1007
|
+
if (result.totalErrors === 0) {
|
|
1008
|
+
spinner.succeed((msg.skillsUpdated || 'Updated Skills for {count} AI tools').replace('{count}', outdatedSkills.length));
|
|
1009
|
+
} else {
|
|
1010
|
+
spinner.warn((msg.skillsUpdatedWithErrors || 'Updated Skills with {errors} errors').replace('{errors}', result.totalErrors));
|
|
1011
|
+
}
|
|
1012
|
+
hasChanges = true;
|
|
980
1013
|
}
|
|
1014
|
+
|
|
981
1015
|
if (missingCommands.length > 0) {
|
|
982
|
-
const
|
|
983
|
-
|
|
1016
|
+
const spinner = ora(msg.installingNewCommands || 'Installing commands...').start();
|
|
1017
|
+
const result = await installCommandsToMultipleAgents(missingCommands, null, projectPath, skillsLocale);
|
|
1018
|
+
if (!manifest.commands) manifest.commands = {};
|
|
1019
|
+
manifest.commands.installed = true;
|
|
1020
|
+
manifest.commands.version = repoInfo.skills.version;
|
|
1021
|
+
manifest.commands.installations = [...(manifest.commands.installations || []), ...missingCommands];
|
|
1022
|
+
if (result.allFileHashes) {
|
|
1023
|
+
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
1024
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, result.allFileHashes);
|
|
1025
|
+
}
|
|
1026
|
+
if (result.totalErrors === 0) {
|
|
1027
|
+
spinner.succeed((msg.newCommandsInstalled || 'Installed commands for {count} AI tools').replace('{count}', missingCommands.length));
|
|
1028
|
+
} else {
|
|
1029
|
+
spinner.warn((msg.newCommandsInstalledWithErrors || 'Installed commands with {errors} errors').replace('{errors}', result.totalErrors));
|
|
1030
|
+
}
|
|
1031
|
+
hasChanges = true;
|
|
984
1032
|
}
|
|
1033
|
+
|
|
985
1034
|
if (outdatedCommands.length > 0) {
|
|
986
|
-
const
|
|
987
|
-
|
|
1035
|
+
const spinner = ora(msg.updatingCommands || 'Updating Commands...').start();
|
|
1036
|
+
const result = await installCommandsToMultipleAgents(outdatedCommands, null, projectPath, skillsLocale);
|
|
1037
|
+
if (!manifest.commands) manifest.commands = {};
|
|
1038
|
+
manifest.commands.version = repoInfo.skills.version;
|
|
1039
|
+
if (result.allFileHashes) {
|
|
1040
|
+
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
1041
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, result.allFileHashes);
|
|
1042
|
+
}
|
|
1043
|
+
if (result.totalErrors === 0) {
|
|
1044
|
+
spinner.succeed((msg.commandsUpdated || 'Updated Commands for {count} AI tools').replace('{count}', outdatedCommands.length));
|
|
1045
|
+
} else {
|
|
1046
|
+
spinner.warn((msg.commandsUpdatedWithErrors || 'Updated Commands with {errors} errors').replace('{errors}', result.totalErrors));
|
|
1047
|
+
}
|
|
1048
|
+
hasChanges = true;
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
if (hasChanges) {
|
|
1052
|
+
if (missingSkills.length > 0 || outdatedSkills.length > 0) {
|
|
1053
|
+
const regenResult = regenerateIntegrations(projectPath, manifest);
|
|
1054
|
+
if (regenResult.updated.length > 0) {
|
|
1055
|
+
console.log(chalk.green(` ✓ ${msg.syncedIntegrations.replace('{count}', regenResult.updated.length)}`));
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
refreshIntegrationBlockHashes(manifest, projectPath);
|
|
1059
|
+
writeManifest(manifest, projectPath);
|
|
988
1060
|
}
|
|
989
1061
|
}
|
|
990
1062
|
}
|