@laitszkin/apollo-toolkit 3.12.1 → 3.13.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/CHANGELOG.md +14 -0
- package/analyse-app-logs/scripts/__pycache__/filter_logs_by_time.cpython-312.pyc +0 -0
- package/analyse-app-logs/scripts/__pycache__/log_cli_utils.cpython-312.pyc +0 -0
- package/analyse-app-logs/scripts/__pycache__/search_logs.cpython-312.pyc +0 -0
- package/archive-specs/SKILL.md +0 -6
- package/commit-and-push/SKILL.md +3 -9
- package/docs-to-voice/scripts/__pycache__/docs_to_voice.cpython-312.pyc +0 -0
- package/generate-spec/SKILL.md +27 -9
- package/generate-spec/references/definition.md +12 -0
- package/generate-spec/scripts/__pycache__/create-specscpython-312.pyc +0 -0
- package/init-project-html/SKILL.md +18 -22
- package/init-project-html/references/definition.md +12 -0
- package/katex/scripts/__pycache__/render_katex.cpython-312.pyc +0 -0
- package/maintain-project-constraints/SKILL.md +11 -19
- package/merge-changes-from-local-branches/SKILL.md +11 -24
- package/open-github-issue/scripts/__pycache__/open_github_issue.cpython-312.pyc +0 -0
- package/package.json +1 -1
- package/read-github-issue/scripts/__pycache__/find_issues.cpython-312.pyc +0 -0
- package/read-github-issue/scripts/__pycache__/read_issue.cpython-312.pyc +0 -0
- package/resolve-review-comments/scripts/__pycache__/review_threads.cpython-312.pyc +0 -0
- package/solve-issues-found-during-review/SKILL.md +1 -1
- package/systematic-debug/SKILL.md +11 -38
- package/test-case-strategy/SKILL.md +10 -37
- package/text-to-short-video/scripts/__pycache__/enforce_video_aspect_ratio.cpython-312.pyc +0 -0
- package/update-project-html/SKILL.md +19 -24
- package/update-project-html/references/definition.md +12 -0
- package/version-release/SKILL.md +16 -37
- package/iterative-code-performance/LICENSE +0 -21
- package/iterative-code-performance/README.md +0 -34
- package/iterative-code-performance/SKILL.md +0 -116
- package/iterative-code-performance/agents/openai.yaml +0 -4
- package/iterative-code-performance/references/algorithmic-complexity.md +0 -58
- package/iterative-code-performance/references/allocation-and-hot-loops.md +0 -53
- package/iterative-code-performance/references/caching-and-memoization.md +0 -64
- package/iterative-code-performance/references/concurrency-and-pipelines.md +0 -61
- package/iterative-code-performance/references/coupled-hot-path-strategy.md +0 -78
- package/iterative-code-performance/references/io-batching-and-queries.md +0 -55
- package/iterative-code-performance/references/iteration-gates.md +0 -133
- package/iterative-code-performance/references/job-selection.md +0 -92
- package/iterative-code-performance/references/measurement-and-benchmarking.md +0 -78
- package/iterative-code-performance/references/module-coverage.md +0 -133
- package/iterative-code-performance/references/repository-scan.md +0 -69
- package/iterative-code-quality/LICENSE +0 -21
- package/iterative-code-quality/README.md +0 -45
- package/iterative-code-quality/SKILL.md +0 -112
- package/iterative-code-quality/agents/openai.yaml +0 -4
- package/iterative-code-quality/references/coupled-core-file-strategy.md +0 -73
- package/iterative-code-quality/references/iteration-gates.md +0 -127
- package/iterative-code-quality/references/job-selection.md +0 -78
- package/iterative-code-quality/references/logging-alignment.md +0 -67
- package/iterative-code-quality/references/module-boundaries.md +0 -83
- package/iterative-code-quality/references/module-coverage.md +0 -126
- package/iterative-code-quality/references/naming-and-simplification.md +0 -73
- package/iterative-code-quality/references/repository-scan.md +0 -65
- package/iterative-code-quality/references/testing-strategy.md +0 -95
- package/merge-conflict-resolver/SKILL.md +0 -46
- package/merge-conflict-resolver/agents/openai.yaml +0 -5
- package/spec-to-project-html/SKILL.md +0 -42
- package/spec-to-project-html/agents/openai.yaml +0 -11
- package/spec-to-project-html/references/TEMPLATE_SPEC.md +0 -113
- package/submission-readiness-check/SKILL.md +0 -39
- package/submission-readiness-check/agents/openai.yaml +0 -4
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
# Module Coverage And Deep-Read Iterations
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
Prevent the agent from repeatedly improving only familiar or easy files while untouched modules remain unexamined.
|
|
6
|
-
|
|
7
|
-
Use this reference in Step 1 to build the module inventory and in Step 2 to choose which module or module cluster receives the next deep-read iteration.
|
|
8
|
-
|
|
9
|
-
Deep-read here does not mean generic reading. It means scanning the module through each available job lens so the agent can identify whether naming cleanup, simplification, module-boundary cleanup, logging alignment, test addition, or staged unlock work is justified.
|
|
10
|
-
|
|
11
|
-
## Module inventory
|
|
12
|
-
|
|
13
|
-
List every meaningful in-scope module before completion. A module may be:
|
|
14
|
-
|
|
15
|
-
- a package, app, service, route group, command group, worker, or library,
|
|
16
|
-
- a domain folder with a clear responsibility,
|
|
17
|
-
- a runtime entrypoint plus its owned helpers,
|
|
18
|
-
- a testable subsystem with stable callers and contracts.
|
|
19
|
-
|
|
20
|
-
Record each module with:
|
|
21
|
-
|
|
22
|
-
- module name and path roots,
|
|
23
|
-
- primary responsibility,
|
|
24
|
-
- entrypoints and public interfaces,
|
|
25
|
-
- key callers and callees,
|
|
26
|
-
- tests and guardrails,
|
|
27
|
-
- logging or telemetry surfaces,
|
|
28
|
-
- risk level and estimated ease,
|
|
29
|
-
- current coverage status.
|
|
30
|
-
|
|
31
|
-
Exclude generated, vendored, lock, build-output, snapshot, fixture-only, or explicitly out-of-scope areas only with evidence.
|
|
32
|
-
|
|
33
|
-
## Coverage ledger statuses
|
|
34
|
-
|
|
35
|
-
Use simple statuses so stopping conditions are auditable:
|
|
36
|
-
|
|
37
|
-
- `unvisited`: inventoried but not deeply read yet.
|
|
38
|
-
- `deep-read`: callers, callees, tests, logs, contracts, core files, and all available job lenses were inspected with enough context to judge quality.
|
|
39
|
-
- `refactored`: at least one behavior-neutral improvement landed for this module.
|
|
40
|
-
- `validated-clear`: deep read found no actionable in-scope quality issue worth changing now.
|
|
41
|
-
- `deferred`: an issue exists but is blocked, unsafe, speculative, approval-dependent, or requires macro-architecture/product scope.
|
|
42
|
-
- `excluded`: not human-maintained source or outside the user's requested scope.
|
|
43
|
-
|
|
44
|
-
Completion is not allowed while any in-scope module remains `unvisited`.
|
|
45
|
-
|
|
46
|
-
## Easy-first module ordering
|
|
47
|
-
|
|
48
|
-
Start with the easiest useful modules when that reduces risk:
|
|
49
|
-
|
|
50
|
-
- small surface area,
|
|
51
|
-
- clear ownership,
|
|
52
|
-
- local tests or cheap guardrails,
|
|
53
|
-
- limited side effects,
|
|
54
|
-
- low public API or persistence risk,
|
|
55
|
-
- likely to clarify names, tests, boundaries, or seams used by harder modules.
|
|
56
|
-
|
|
57
|
-
Do not confuse easy-first with low-value churn. The chosen module should either resolve real quality issues or create context/guardrails that make later modules safer.
|
|
58
|
-
|
|
59
|
-
If multiple modules are equally easy, prefer the one that unlocks harder modules by improving shared naming, helpers, tests, logging, or dependency seams.
|
|
60
|
-
|
|
61
|
-
## Deep-read requirements
|
|
62
|
-
|
|
63
|
-
A module iteration is not deep-read until the agent inspects:
|
|
64
|
-
|
|
65
|
-
- module entrypoints and public interfaces,
|
|
66
|
-
- internal core files and responsibility boundaries,
|
|
67
|
-
- key callers and downstream callees,
|
|
68
|
-
- tests, fixtures, mocks, and validation commands,
|
|
69
|
-
- logs, metrics, tracing, and error messages,
|
|
70
|
-
- configuration, persistence, and external-service contracts when relevant,
|
|
71
|
-
- known TODOs, comments, or docs that describe current behavior.
|
|
72
|
-
|
|
73
|
-
It also must inspect the module through each available job lens:
|
|
74
|
-
|
|
75
|
-
- `naming cleanup`: are names hiding ownership, units, state, lifecycle, or intent?
|
|
76
|
-
- `function simplification / extraction`: are there duplicated flows, hard-coded orchestration paths, or overly mixed functions?
|
|
77
|
-
- `module-boundary cleanup`: are responsibilities mixed in ways that can be split safely?
|
|
78
|
-
- `logging alignment`: are logs stale, misleading, or missing at important branch/outcome points?
|
|
79
|
-
- `test addition`: are important behaviors, edges, or invariants weakly guarded?
|
|
80
|
-
- `staged unlock work`: if the module is too coupled for direct cleanup, what is the next smaller unlock step?
|
|
81
|
-
|
|
82
|
-
Do not mark a module `validated-clear` from a shallow file skim.
|
|
83
|
-
Do not mark a module `validated-clear` until every available job lens has been checked and classified as one of: actionable now, unlock-first, deferred, excluded, or no meaningful issue found.
|
|
84
|
-
|
|
85
|
-
## Choosing the next module
|
|
86
|
-
|
|
87
|
-
After every iteration:
|
|
88
|
-
|
|
89
|
-
1. Re-scan the module ledger.
|
|
90
|
-
2. Prefer an `unvisited` module unless a just-touched module must be stabilized before moving on.
|
|
91
|
-
3. Choose the easiest useful `unvisited` module that can be deeply read and improved or validated now.
|
|
92
|
-
4. Scan that module through every available job lens before deciding what "this round" means.
|
|
93
|
-
5. If the next unvisited module is high-risk and under-guarded, choose guardrail-building jobs first.
|
|
94
|
-
6. If the next unvisited module is too coupled for direct cleanup, choose staged unlock work rather than skipping it.
|
|
95
|
-
7. Return to the full-codebase scan after validation and update the ledger.
|
|
96
|
-
|
|
97
|
-
Revisiting a familiar module is valid only when:
|
|
98
|
-
|
|
99
|
-
- it blocks safe deep reading of an unvisited module,
|
|
100
|
-
- a previous refactor created follow-up drift that must be stabilized,
|
|
101
|
-
- validation exposed a real defect or stale contract,
|
|
102
|
-
- cross-module cleanup requires touching it together with the next module.
|
|
103
|
-
|
|
104
|
-
## Module cluster iterations
|
|
105
|
-
|
|
106
|
-
One iteration may cover a small cluster of modules when they share one boundary or invariant, such as:
|
|
107
|
-
|
|
108
|
-
- a command and its parser,
|
|
109
|
-
- a route and its service,
|
|
110
|
-
- a domain module and its test helpers,
|
|
111
|
-
- an integration wrapper and its local fake.
|
|
112
|
-
|
|
113
|
-
Keep clusters bounded. Do not use clustering to claim full-repository coverage without deep context.
|
|
114
|
-
|
|
115
|
-
## Stage-gate questions
|
|
116
|
-
|
|
117
|
-
At the end of each iteration, answer:
|
|
118
|
-
|
|
119
|
-
- Which module or module cluster was deeply read?
|
|
120
|
-
- Which job lenses were checked, and which jobs were selected and why?
|
|
121
|
-
- What quality issue was fixed, or why is the module validated-clear?
|
|
122
|
-
- Which guardrails prove behavior was preserved?
|
|
123
|
-
- Which modules remain `unvisited`?
|
|
124
|
-
- Which module is the next easiest useful target?
|
|
125
|
-
|
|
126
|
-
If any in-scope module remains `unvisited`, the correct action is to return to Step 1, not to finish.
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# Naming And Function Simplification
|
|
2
|
-
|
|
3
|
-
## Naming improvements
|
|
4
|
-
|
|
5
|
-
Rename only when the current name creates real ambiguity.
|
|
6
|
-
|
|
7
|
-
Good rename reasons:
|
|
8
|
-
|
|
9
|
-
- hides domain role, unit, quantity, ownership, or lifecycle stage,
|
|
10
|
-
- uses stale terminology after a refactor,
|
|
11
|
-
- collides with another concept in the same scope,
|
|
12
|
-
- makes boolean, enum, or state-transition meaning unclear,
|
|
13
|
-
- forces readers to inspect implementation before understanding intent.
|
|
14
|
-
|
|
15
|
-
Avoid renaming when:
|
|
16
|
-
|
|
17
|
-
- the name is already clear in local context,
|
|
18
|
-
- the change is pure personal preference,
|
|
19
|
-
- the name is part of a stable external API, database schema, event contract, or migration-sensitive field,
|
|
20
|
-
- the rename would create broad churn without reducing ambiguity.
|
|
21
|
-
|
|
22
|
-
## Naming patterns
|
|
23
|
-
|
|
24
|
-
- Prefer domain nouns over implementation nouns: `selectedAccount` over `item`.
|
|
25
|
-
- Include units for quantities: `timeoutMs`, `amountCents`, `windowDays`.
|
|
26
|
-
- Use booleans that read as predicates: `isEligible`, `hasPendingRetry`, `shouldPersist`.
|
|
27
|
-
- Name collections by contents: `pendingInvoices`, not `list`.
|
|
28
|
-
- Name state transitions by lifecycle: `markSettlementComplete`, not `updateStatus`.
|
|
29
|
-
- Keep test data names meaningful: `expiredSubscription`, `duplicateEvent`, `unauthorizedActor`.
|
|
30
|
-
|
|
31
|
-
## Function simplification signals
|
|
32
|
-
|
|
33
|
-
Simplify functions that contain:
|
|
34
|
-
|
|
35
|
-
- repeated guard clauses or duplicated validation,
|
|
36
|
-
- mixed parsing, validation, orchestration, persistence, and formatting,
|
|
37
|
-
- nested branches that hide the main path,
|
|
38
|
-
- temporary variables whose names encode implementation steps rather than domain state,
|
|
39
|
-
- hard-coded workflow steps repeated in multiple callers,
|
|
40
|
-
- comments explaining what code structure should make obvious.
|
|
41
|
-
|
|
42
|
-
## Safe simplification moves
|
|
43
|
-
|
|
44
|
-
- Extract pure transformations and validations into small helpers.
|
|
45
|
-
- Replace repeated literal mappings with a named table or function.
|
|
46
|
-
- Flatten nested conditionals with explicit guard clauses when it clarifies failure paths.
|
|
47
|
-
- Centralize one business rule behind one function when multiple callers duplicate it.
|
|
48
|
-
- Split orchestration from local computation when tests need a deterministic unit.
|
|
49
|
-
- Delete dead compatibility paths only when reachability evidence and tests support deletion.
|
|
50
|
-
|
|
51
|
-
## Extraction rules
|
|
52
|
-
|
|
53
|
-
Create a reusable helper only when at least one condition is true:
|
|
54
|
-
|
|
55
|
-
- two or more call sites duplicate the same rule,
|
|
56
|
-
- the extracted logic has a clear domain name and stable contract,
|
|
57
|
-
- the helper makes a high-value invariant testable,
|
|
58
|
-
- the helper isolates an external dependency contract or side-effect boundary,
|
|
59
|
-
- the current function has multiple reasons to change.
|
|
60
|
-
|
|
61
|
-
Keep extracted helpers close to the owner module unless the repository already has a shared utility location for that domain.
|
|
62
|
-
|
|
63
|
-
## Behavior preservation checklist
|
|
64
|
-
|
|
65
|
-
Before and after simplification, verify:
|
|
66
|
-
|
|
67
|
-
- inputs, outputs, exceptions, side effects, and ordering are unchanged,
|
|
68
|
-
- persisted data and emitted events keep the same contract,
|
|
69
|
-
- public API and CLI behavior remain stable,
|
|
70
|
-
- log fields remain compatible unless stale names were intentionally corrected,
|
|
71
|
-
- existing tests still pass and new tests cover extracted rules.
|
|
72
|
-
|
|
73
|
-
If these checks can be enforced by existing or newly added tests, do not treat subjective confidence alone as a reason to avoid the simplification.
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# Repository Scan And Backlog Selection
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
Build a factual map before changing code, then choose the highest-value quality improvements while tracking module-by-module job-oriented deep-read coverage.
|
|
6
|
-
|
|
7
|
-
## Required scan
|
|
8
|
-
|
|
9
|
-
- Read `AGENTS.md/CLAUDE.md`, `README*`, project docs, manifests, task runners, CI configs, and test setup.
|
|
10
|
-
- List entrypoints: CLI commands, servers, workers, jobs, frontend routes, scripts, libraries, or public packages.
|
|
11
|
-
- Identify core domain modules, external integrations, persistence boundaries, logging utilities, and test helpers.
|
|
12
|
-
- Create a module inventory and coverage ledger using `references/module-coverage.md`.
|
|
13
|
-
- For each module, scan through the available job lenses instead of treating scan as generic code reading.
|
|
14
|
-
- Inspect current git state before editing so unrelated user changes are not overwritten.
|
|
15
|
-
- Identify generated, vendored, lock, snapshot, build-output, and fixture files; exclude them from refactoring unless they are human-maintained source.
|
|
16
|
-
|
|
17
|
-
## Code quality backlog signals
|
|
18
|
-
|
|
19
|
-
Prioritize files or functions with:
|
|
20
|
-
|
|
21
|
-
- high fan-in or many call sites,
|
|
22
|
-
- critical business rules or money/security/data-integrity decisions,
|
|
23
|
-
- duplicated condition trees, conversions, validation, or external-call choreography,
|
|
24
|
-
- unclear naming around ownership, units, state, or lifecycle,
|
|
25
|
-
- large functions that mix parsing, validation, orchestration, side effects, and formatting,
|
|
26
|
-
- log messages that describe old concepts or omit branch/failure context,
|
|
27
|
-
- low or missing tests around meaningful invariants and edge cases.
|
|
28
|
-
|
|
29
|
-
## Evidence to capture
|
|
30
|
-
|
|
31
|
-
For each candidate record:
|
|
32
|
-
|
|
33
|
-
- file path and symbol name,
|
|
34
|
-
- owning module or module cluster,
|
|
35
|
-
- job lens that exposed the issue,
|
|
36
|
-
- observed quality problem,
|
|
37
|
-
- why it matters to maintainability or correctness confidence,
|
|
38
|
-
- expected behavior-neutral change,
|
|
39
|
-
- tests or validations needed to prove safety,
|
|
40
|
-
- reason to defer if the candidate requires product or architecture approval.
|
|
41
|
-
|
|
42
|
-
## Exclusion rules
|
|
43
|
-
|
|
44
|
-
Do not refactor:
|
|
45
|
-
|
|
46
|
-
- third-party, generated, or compiled artifacts,
|
|
47
|
-
- snapshots where churn would hide signal,
|
|
48
|
-
- code the user marked as actively edited elsewhere,
|
|
49
|
-
- public schema/API names that require migration planning,
|
|
50
|
-
- areas that cannot be validated and are not causing a clear quality risk.
|
|
51
|
-
|
|
52
|
-
## Backlog scoring
|
|
53
|
-
|
|
54
|
-
Prefer a small set of high-confidence improvements over an exhaustive sweep.
|
|
55
|
-
|
|
56
|
-
Score each candidate by:
|
|
57
|
-
|
|
58
|
-
1. **Impact**: criticality, call frequency, future change risk.
|
|
59
|
-
2. **Confidence**: evidence that the change is behavior-neutral.
|
|
60
|
-
3. **Validation**: ability to test or otherwise prove equivalence.
|
|
61
|
-
4. **Blast radius**: number of modules, public contracts, and migrations affected.
|
|
62
|
-
|
|
63
|
-
Start with high-impact, high-confidence, low-blast-radius items. Escalate broad changes only when smaller passes cannot resolve the root problem.
|
|
64
|
-
|
|
65
|
-
Do not finish from backlog scoring alone. Completion also requires the module coverage ledger to show that every in-scope module has been deeply read and either improved, validated-clear, deferred, or excluded with evidence.
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Risk-Based Testing Strategy
|
|
2
|
-
|
|
3
|
-
## Principle
|
|
4
|
-
|
|
5
|
-
Choose tests from the risk inventory, not from a generic coverage target.
|
|
6
|
-
|
|
7
|
-
For every non-trivial pass, ask what could regress silently if the cleanup were wrong.
|
|
8
|
-
|
|
9
|
-
Use the resulting guardrails aggressively: when tests or equivalent verification can prove behavior preservation, they should unlock bolder refactors rather than merely justify small cosmetic edits.
|
|
10
|
-
|
|
11
|
-
Confidence decisions must include the agent's own ability to understand and complete the refactor, not only the apparent difficulty of the code. Strong tests, characterization coverage, narrow rollback points, and clear validation commands are objective support: if the refactor breaks behavior, the agent should use the failing guardrails to repair the true owner and return the suite to green instead of treating the task as impossible.
|
|
12
|
-
|
|
13
|
-
Do not require pre-existing tests before every refactor. Instead:
|
|
14
|
-
|
|
15
|
-
- if existing guardrails are already sufficient, proceed;
|
|
16
|
-
- if the area is high-risk and guardrails are weak, add the smallest high-value tests first and treat that as progress toward the refactor.
|
|
17
|
-
|
|
18
|
-
The intended end state is not merely "some tests passed for touched files". The refactor is complete only when the relevant guarded test surface for the repository remains green after the cleanup.
|
|
19
|
-
|
|
20
|
-
## Unit tests
|
|
21
|
-
|
|
22
|
-
Use for:
|
|
23
|
-
|
|
24
|
-
- extracted helpers,
|
|
25
|
-
- renamed or simplified business rules,
|
|
26
|
-
- validation and rejection logic,
|
|
27
|
-
- branch-specific errors and side effects,
|
|
28
|
-
- formatting or parsing boundaries.
|
|
29
|
-
|
|
30
|
-
Good oracles:
|
|
31
|
-
|
|
32
|
-
- exact return values,
|
|
33
|
-
- exact domain state transitions,
|
|
34
|
-
- exact error class or reason code,
|
|
35
|
-
- emitted side effect or explicit lack of side effect.
|
|
36
|
-
|
|
37
|
-
For high-risk legacy code with weak coverage, characterization-style unit tests are often the first unlock step even before the larger cleanup happens.
|
|
38
|
-
|
|
39
|
-
## Property-based tests
|
|
40
|
-
|
|
41
|
-
Use when logic has invariants or broad input space:
|
|
42
|
-
|
|
43
|
-
- serialization or parsing round trips,
|
|
44
|
-
- sorting, grouping, deduplication, aggregation,
|
|
45
|
-
- authorization or eligibility predicates,
|
|
46
|
-
- idempotency, retry, replay, and state-machine transitions,
|
|
47
|
-
- generated mocked external-service states.
|
|
48
|
-
|
|
49
|
-
Record `N/A` only with a concrete reason, such as "no generated input space; pass only renamed local variables."
|
|
50
|
-
|
|
51
|
-
## Integration tests
|
|
52
|
-
|
|
53
|
-
Use when the risk spans modules:
|
|
54
|
-
|
|
55
|
-
- orchestration calling extracted domain helpers,
|
|
56
|
-
- persistence plus domain transition,
|
|
57
|
-
- API/CLI handler plus service layer,
|
|
58
|
-
- logging contract across a real execution path,
|
|
59
|
-
- adapter behavior with mocked external services.
|
|
60
|
-
|
|
61
|
-
For external services, prefer mocks, fakes, local emulators, or recorded stable fixtures unless the real contract is explicitly under test.
|
|
62
|
-
|
|
63
|
-
When risk comes from multi-module coupling rather than one local function, integration coverage is often the best guardrail to add before refactoring.
|
|
64
|
-
|
|
65
|
-
## E2E tests
|
|
66
|
-
|
|
67
|
-
Use only when:
|
|
68
|
-
|
|
69
|
-
- the project already has reliable E2E infrastructure,
|
|
70
|
-
- the path is user-critical,
|
|
71
|
-
- required external services are stable, controlled, or safely mocked,
|
|
72
|
-
- the same confidence cannot be gained from faster integration tests.
|
|
73
|
-
|
|
74
|
-
If E2E is unreliable or too costly, add stronger integration coverage and state the reason.
|
|
75
|
-
|
|
76
|
-
## Edge and adversarial coverage
|
|
77
|
-
|
|
78
|
-
Consider:
|
|
79
|
-
|
|
80
|
-
- null, empty, malformed, duplicate, oversized, and boundary inputs,
|
|
81
|
-
- unauthorized actors and invalid transitions,
|
|
82
|
-
- stale, duplicate, out-of-order, or replayed events,
|
|
83
|
-
- dependency timeout, 429/500, partial response, and inconsistent response,
|
|
84
|
-
- partial write, rollback, compensation, and idempotency behavior,
|
|
85
|
-
- concurrency or shared-state contamination when the code is stateful.
|
|
86
|
-
|
|
87
|
-
## Test hygiene
|
|
88
|
-
|
|
89
|
-
- Keep tests deterministic and close to the behavior owner.
|
|
90
|
-
- Prefer table-driven cases for many similar business permutations.
|
|
91
|
-
- Preserve failing seeds or examples from property-based tests.
|
|
92
|
-
- Do not weaken existing tests to fit the refactor.
|
|
93
|
-
- If old tests asserted implementation details, rewrite them around stable behavior while preserving the business invariant.
|
|
94
|
-
- Once stable guardrails exist, do not refuse a maintainability-improving refactor purely because confidence feels lower than ideal; combine self-assessed ability with the objective safety net and let the guardrails decide.
|
|
95
|
-
- If stable guardrails do not yet exist for a high-risk area, create them as the next execution direction instead of treating the refactor as blocked forever.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: merge-conflict-resolver
|
|
3
|
-
description: Resolve git merge conflicts using deterministic rules that preserve correct functionality. Use when branch consolidation encounters merge conflicts and needs automated resolution guidance that reads both parent versions and applies scenario-specific strategies.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Merge Conflict Resolver
|
|
7
|
-
|
|
8
|
-
## Dependencies
|
|
9
|
-
|
|
10
|
-
- Required: none.
|
|
11
|
-
- Conditional: **`commit-and-push`** when the user expects the resolved tree to be **committed** or **pushed**—**MUST** run that skill for the submission leg instead of bare `git commit` / ad-hoc push when readiness gates apply.
|
|
12
|
-
- Optional: none.
|
|
13
|
-
- Fallback: If a **gated** submission was requested but **`commit-and-push`** is unavailable, **MUST** stop and report.
|
|
14
|
-
|
|
15
|
-
## Standards
|
|
16
|
-
|
|
17
|
-
- Evidence: Read both parent versions from conflict markers before resolving.
|
|
18
|
-
- Execution: Read conflicts → apply scenario rules → verify with tests → recommit via **`commit-and-push`** when persisting to git.
|
|
19
|
-
- Quality: Prefer preserving functionality over keeping either branch's exact changes.
|
|
20
|
-
- Output: Return resolved files with passing verification.
|
|
21
|
-
|
|
22
|
-
## Workflow
|
|
23
|
-
|
|
24
|
-
### 1) Read conflict markers
|
|
25
|
-
|
|
26
|
-
- Read both parent versions from conflict markers before editing.
|
|
27
|
-
- Never use `-X ours`/`-X theirs` as the default strategy; only for narrowly justified conflicts after reading the actual content.
|
|
28
|
-
|
|
29
|
-
### 2) Apply scenario rules
|
|
30
|
-
|
|
31
|
-
| Scenario | Resolution |
|
|
32
|
-
|----------|-----------|
|
|
33
|
-
| Same line, both branches changed behavior | Read both code paths and compose merged logic preserving the verified invariant |
|
|
34
|
-
| Same line, bug fix vs refactor | Keep the bug fix, reapply compatible refactor structure |
|
|
35
|
-
| File deleted in one, modified in other | Keep version supported by current references/tests; delete only if proven correct |
|
|
36
|
-
| Both modified same file differently | Preserve both when compatible; manually compose overlapping changes |
|
|
37
|
-
| Test files conflict | Preserve both coverages unless one assertion is obsolete |
|
|
38
|
-
| Config file (non-overlapping keys) | Keep both values |
|
|
39
|
-
| package.json dependency | Keep higher version if compatible |
|
|
40
|
-
| Same function added differently | Keep both; rename if needed |
|
|
41
|
-
|
|
42
|
-
### 3) Verify after resolution
|
|
43
|
-
|
|
44
|
-
- `git add <resolved-files>`
|
|
45
|
-
- Run targeted tests or build checks for changed files.
|
|
46
|
-
- If verification fails, resolve differently before committing.
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "merge-conflict-resolver"
|
|
3
|
-
short_description: "Resolve git merge conflicts with deterministic, evidence-based rules"
|
|
4
|
-
default_prompt: >-
|
|
5
|
-
Use $merge-conflict-resolver to read both sides of conflict markers, apply scenario-specific resolution rules that preserve intended behavior, verify with the project’s tests or checks, and when the user needs persistence, hand off to $commit-and-push instead of ad-hoc git commands.
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: spec-to-project-html
|
|
3
|
-
description: >-
|
|
4
|
-
使用 `apltk architecture --spec <spec_dir>` 將專案 HTML 架構圖同步到活躍規劃文件。單個 spec 寫入 `<spec_dir>/architecture_diff/`,批量 spec 寫入 `coordination.md` 旁的共享 overlay;每個受影響功能由一個可寫子 agent 負責功能內 overlay 更新,主 agent 必須等待全部子 agent 完成後,才能補跨功能邊、渲染並驗證。基礎 atlas 不得被此技能修改。
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# 規劃文件同步到專案 HTML 架構圖
|
|
8
|
-
|
|
9
|
-
## 技能目標
|
|
10
|
-
|
|
11
|
-
根據 `docs/plans/...` 下的規劃文件,為專案架構圖生成或更新 spec overlay,使評審者能夠透過 `apltk architecture diff` 直接查看 proposed-after 架構變化,同時保持基礎 atlas 不被污染。
|
|
12
|
-
|
|
13
|
-
## 驗收條件
|
|
14
|
-
|
|
15
|
-
- 只透過 `apltk architecture --spec <spec_dir>` 寫入 overlay;單個 spec 產物位於 `<spec_dir>/architecture_diff/`,批量 spec 則寫入 `coordination.md` 同級的共享 overlay;不得手改 `architecture_diff/**/*.html`。
|
|
16
|
-
- 讀取規劃文件時遵循 `spec.md` → `design.md` → `contract.md` → `coordination.md` 的順序;所有重要宣告都能同時回溯到 spec 語句和相關程式碼或設計證據。
|
|
17
|
-
- 對於程式碼尚未實作、但規劃中已經提出的結構,必須顯式使用 `planned`、`gap` 或 `TBD` 標記,而不能偽裝成已落地實作。
|
|
18
|
-
- 按「每個受影響功能一個可寫子 agent」執行 overlay 更新;主 agent 必須等全部子 agent 完成後,才允許補跨功能邊、共享 `meta` 或共享 `actor`。
|
|
19
|
-
- `apltk architecture validate --spec <spec_dir>` 通過,且 `apltk architecture diff` 中的頁面配對正確,沒有懸空邊、孤兒頁面或錯誤的 add/remove 配對。
|
|
20
|
-
|
|
21
|
-
## 工作流程
|
|
22
|
-
|
|
23
|
-
1. 先定位本次規劃目錄;使用者明確給出路徑時優先使用,否則結合 `coordination.md` 找到正確 plan 集,並整理相關需求編號用於追蹤。
|
|
24
|
-
2. 執行 `apltk architecture --help` 取得最新命令形態,然後按 `spec.md`、`design.md`、`contract.md`、`coordination.md` 的順序讀取內容,確定哪些功能、子模組、邊、變數或錯誤語義會發生變化。
|
|
25
|
-
3. 先只列出受影響功能,不要提前把所有原始碼塞進主 agent。除了直接變更的功能,也要納入跨功能邊另一端的功能,確保 overlay 中的跨邊界關係完整。
|
|
26
|
-
4. 為每個受影響功能派發一個可寫子 agent。每個子 agent 只負責自己功能內的 overlay 寫入:子模組、函式、變數、資料流、錯誤,以及功能內邊;若規劃領先於程式碼,則在角色、用途或資料流文案中明確標註 `planned`、`gap` 或 `TBD`。
|
|
27
|
-
5. 子 agent 只返回功能內變更摘要、跨功能邊界變化和待記錄的 `planned/gap` 標記;主 agent 不得重讀已委派功能原始碼,也不得重複寫功能內元件。
|
|
28
|
-
6. 等全部子 agent 完成後,主 agent 統一補跨功能 `edge`、必要的共享 `meta` / `actor`,再執行 `apltk architecture validate --spec <spec_dir>`,並透過 `apltk architecture diff` 檢查 overlay 頁面是否正確映射到 before/after 視圖。
|
|
29
|
-
7. 最終報告至少包含:觸及的 overlay 檔案或 CLI 變更類別、`modified` / `added` / `removed` 數量、所有子 agent 已完成後才開始跨功能連線的確認、未解決的 spec 與程式碼差距,以及後續跟進行動。
|
|
30
|
-
|
|
31
|
-
## 使用範例
|
|
32
|
-
|
|
33
|
-
- 「把這份新 spec 的架構變化渲染成 before/after HTML 對照。」 -> 「讀取 plan 集,按受影響功能分派子 agent,寫入 `architecture_diff/` overlay,並用 `apltk architecture diff` 驗證。」
|
|
34
|
-
- 「批量規劃下多個 spec 共用一份架構 overlay。」 -> 「仍以成員 spec 路徑呼叫 `--spec`,但讓 CLI 自動彙總到 `coordination.md` 同級的共享 overlay 根目錄。」
|
|
35
|
-
|
|
36
|
-
## 參考資料索引
|
|
37
|
-
|
|
38
|
-
- `init-project-html/SKILL.md`:基礎語義規則、邊類型與子模組表達約束。
|
|
39
|
-
- `references/TEMPLATE_SPEC.md`:overlay 模式下的欄位、列舉與 diff 配對規則速查表。
|
|
40
|
-
|
|
41
|
-
- `generate-spec`、`implement-specs*`:需求編號和規劃流程的上游來源。
|
|
42
|
-
- `apltk architecture --help`:`--spec` 模式命令與參數的唯一真源。
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "spec-to-project-html"
|
|
3
|
-
short_description: "Sync the project HTML architecture atlas with active planning specs via `apltk architecture --spec`"
|
|
4
|
-
default_prompt: >-
|
|
5
|
-
Use $spec-to-project-html. Read docs/plans (spec → design → contract). Every overlay mutation: `apltk architecture --spec <spec_dir> …`. **Exact commands: `apltk architecture --help`** — do not trust long command lists in docs.
|
|
6
|
-
Single specs write `<spec_dir>/architecture_diff/atlas/*.yaml` + affected HTML under `<spec_dir>/architecture_diff/`. Batch member paths resolve to the shared batch-root `architecture_diff/` beside `coordination.md`, so one batch keeps one overlay + one rendered diff. Base `resources/project-architecture/` is read-only here. NEVER hand-edit `architecture_diff/**`.
|
|
7
|
-
**`apltk architecture diff`** builds a paginated viewer: scans all `docs/plans/**/architecture_diff/`, pairs overlay paths with base atlas HTML by relative path, labels modified/added/removed — use it to verify the architecture delta before hand-off.
|
|
8
|
-
**Subagents only:** dispatch ONE write-capable subagent per AFFECTED feature; each applies ALL intra-feature overlay mutations (`submodule`/`function`/`variable`/`dataflow`/`error`/`edge` within that feature). Each returns ONLY change summary + outbound boundary deltas for OTHER features.
|
|
9
|
-
**HARD GATE:** main agent MUST wait until ALL subagents finish before ANY cross-feature `edge add|remove`, overlay `meta` that stitches multiple features, or shared `actor` for cross-feature context. Then `render --spec`, `validate --spec`.
|
|
10
|
-
Sub-module pages stay self-only — cross-boundary = `edge`. For removals/renames in overlay, follow SKILL.md (`submodule remove` / remove+add pattern) so `diff` classifies correctly.
|
|
11
|
-
After work: `validate --spec` MUST be OK; run `diff` and report modified/added/removed counts. Semantic rules: $init-project-html SKILL.md.
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# Atlas component schema — reference cheat sheet (spec-to-project-html copy)
|
|
2
|
-
|
|
3
|
-
> Reference material only. The binding rules (read strategy, evidence requirements, what each verb means) live in `init-project-html/SKILL.md` (atlas authority) and this skill's `SKILL.md` (spec-overlay variant). This file lists the exact fields and enum values that `apltk architecture --spec <spec_dir>` accepts; the renderer produces consistent DOM/CSS/ARIA hooks under `<spec_dir>/architecture_diff/` so agents never need to touch HTML.
|
|
4
|
-
|
|
5
|
-
## State files on disk
|
|
6
|
-
|
|
7
|
-
Base atlas (read-only from this skill's perspective):
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
<project>/resources/project-architecture/atlas/
|
|
11
|
-
├── atlas.index.yaml
|
|
12
|
-
├── features/<slug>.yaml
|
|
13
|
-
├── atlas.history.log
|
|
14
|
-
└── atlas.history.undo.json
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Overlay (where this skill writes via `--spec`):
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
<spec_dir>/architecture_diff/
|
|
21
|
-
├── atlas/
|
|
22
|
-
│ ├── atlas.index.yaml # optional partial override (meta / actors / cross-feature edges / feature order)
|
|
23
|
-
│ ├── features/<slug>.yaml # full proposed state of any changed feature
|
|
24
|
-
│ ├── _removed.yaml # {features: [...], submodules: [{feature, submodule}]}
|
|
25
|
-
│ ├── atlas.history.log
|
|
26
|
-
│ └── atlas.history.undo.json
|
|
27
|
-
├── index.html # rendered (re-emit only when macro visibly changes)
|
|
28
|
-
├── features/<slug>/index.html # rendered (re-emit when the feature page would visibly change)
|
|
29
|
-
├── features/<slug>/<sub>.html # rendered (re-emit when the sub-module's tables/dataflow change)
|
|
30
|
-
├── _removed.txt # auto-written by the renderer; lists removed HTML paths
|
|
31
|
-
└── assets/ # architecture.css + viewer.client.js (copied by the renderer)
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Components (mirrors `init-project-html/references/TEMPLATE_SPEC.md`)
|
|
35
|
-
|
|
36
|
-
### `meta`
|
|
37
|
-
|
|
38
|
-
| Field | Type | Required | Notes |
|
|
39
|
-
| ------- | ------ | -------- | ----- |
|
|
40
|
-
| title | string | yes | Macro page H1; the spec overlay typically keeps the base title. |
|
|
41
|
-
| summary | string | no | Update if the spec changes scanned roots or known omissions. |
|
|
42
|
-
|
|
43
|
-
CLI: `apltk architecture meta set --spec <spec_dir> --title "..." --summary "..."`
|
|
44
|
-
|
|
45
|
-
### `actor`
|
|
46
|
-
|
|
47
|
-
| Field | Type | Required | Notes |
|
|
48
|
-
| ----- | ---- | -------- | ----- |
|
|
49
|
-
| id | kebab-case | yes | Stable identity. |
|
|
50
|
-
| label | string | yes | Display name. |
|
|
51
|
-
|
|
52
|
-
CLI: `apltk architecture actor add --spec <spec_dir> --id ... --label "..."`
|
|
53
|
-
|
|
54
|
-
### `feature`
|
|
55
|
-
|
|
56
|
-
Same shape as base mode (`slug`, `title`, `story`, `dependsOn`, `submodules`, `edges`). `submodule add|remove`, `function add|remove`, etc. mutate the feature's full overlay snapshot under the hood — declare what you would have declared in base mode, but pass `--spec <spec_dir>`.
|
|
57
|
-
|
|
58
|
-
CLI: `apltk architecture feature add --spec <spec_dir> --slug <kebab> --title "..." --story "..."`
|
|
59
|
-
|
|
60
|
-
### `submodule`
|
|
61
|
-
|
|
62
|
-
| Field | Type | Required | Notes |
|
|
63
|
-
| ----- | ---- | -------- | ----- |
|
|
64
|
-
| slug | kebab-case | yes | The HTML filename. |
|
|
65
|
-
| kind | enum `ui` `api` `service` `db` `pure-fn` `queue` `external` | yes | Drives node colour + chip. |
|
|
66
|
-
| role | string | no | Own responsibility in one sentence. Use `planned: ...` or `gap: ...` to mark spec items the code does not yet implement. |
|
|
67
|
-
| functions / variables / dataflow / errors | arrays | no | Edited through their own CLI verbs. |
|
|
68
|
-
|
|
69
|
-
CLI: `apltk architecture submodule add|set|remove --spec <spec_dir> --feature X --slug Y --kind ... --role "..."`
|
|
70
|
-
|
|
71
|
-
### `function`, `variable`, `dataflow`, `error`
|
|
72
|
-
|
|
73
|
-
Each row uses the same fields documented in `init-project-html/references/TEMPLATE_SPEC.md`. Always pass `--spec <spec_dir>` so the write lands in the overlay.
|
|
74
|
-
|
|
75
|
-
`dataflow` steps accept the same structured fields in overlay mode — `--fn` must reference a function declared in this overlay (or inherited from base) for the same sub-module; `--reads` / `--writes` must reference variables declared there. `validate --spec <spec_dir>` enforces these references against the **merged** state, so adding a step that names a function/variable the spec also introduces is fine as long as both land in the same overlay.
|
|
76
|
-
|
|
77
|
-
### `edge`
|
|
78
|
-
|
|
79
|
-
| Field | Type | Required | Notes |
|
|
80
|
-
| ----- | ---- | -------- | ----- |
|
|
81
|
-
| id | kebab-case | recommended | Pass `--id <stable>` when adding or removing so the CLI matches unambiguously. |
|
|
82
|
-
| from | `feature/submodule` or (intra-feature) `submodule` | yes | |
|
|
83
|
-
| to | same shape | yes | |
|
|
84
|
-
| kind | enum `call` `return` `data-row` `failure` | yes | |
|
|
85
|
-
| label | string | no | |
|
|
86
|
-
|
|
87
|
-
CLI: `apltk architecture edge add|remove --spec <spec_dir> --from <feature>[/sub] --to <feature>[/sub] --kind ... --label "..."`
|
|
88
|
-
|
|
89
|
-
## Diff classification (how `apltk architecture diff` pairs pages)
|
|
90
|
-
|
|
91
|
-
`apltk architecture diff` scans every `docs/plans/**/architecture_diff/**/*.html` (skipping `assets/` and `atlas/`) and pairs by path against `resources/project-architecture/`:
|
|
92
|
-
|
|
93
|
-
| Base exists? | Overlay HTML exists? | Listed in `_removed.txt`? | Classification |
|
|
94
|
-
| ------------ | -------------------- | ------------------------- | -------------- |
|
|
95
|
-
| yes | yes | no | **modified** (split before/after view) |
|
|
96
|
-
| no | yes | no | **added** (single after view) |
|
|
97
|
-
| yes | no | yes | **removed** (single before view) |
|
|
98
|
-
|
|
99
|
-
The renderer writes `_removed.txt` automatically from `_removed.yaml`; agents only set the YAML through `feature remove` / `submodule remove`.
|
|
100
|
-
|
|
101
|
-
## Quick example: add a 2FA sub-module to an existing feature
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
apltk architecture --spec docs/plans/2026-05-11/add-2fa \
|
|
105
|
-
submodule add --feature register --slug 2fa --kind service \
|
|
106
|
-
--role "TOTP verification (planned: not yet implemented)"
|
|
107
|
-
apltk architecture --spec docs/plans/2026-05-11/add-2fa \
|
|
108
|
-
edge add --from register/api --to register/2fa --kind call --label "verify TOTP" --id e-api-2fa
|
|
109
|
-
apltk architecture --spec docs/plans/2026-05-11/add-2fa validate
|
|
110
|
-
apltk architecture diff
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
The CLI writes only the affected HTML pages (`features/register/2fa.html` plus any page whose visible state changed) into `architecture_diff/`, and the diff viewer pairs them with the base atlas.
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: submission-readiness-check
|
|
3
|
-
description: >-
|
|
4
|
-
用於在 commit、push、PR 或 release 前做最後同步檢查。會確認 `CHANGELOG.md`、
|
|
5
|
-
專案文件、`AGENTS.md` / `CLAUDE.md` 與已完成的 planning artifacts 是否都已更新到可提交狀態。
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 目標
|
|
9
|
-
|
|
10
|
-
在任何提交、推送、開 PR 或發版前,先把 repository 的外部說明、內部約束與 planning artifacts 同步到一致狀態,避免把未整理完成的變更交給下一個提交流程。
|
|
11
|
-
|
|
12
|
-
## 驗收條件
|
|
13
|
-
|
|
14
|
-
- 已盤點真實的提交面,包括 git 狀態、staged diff、現有 docs、planning artifacts 與目標提交流程
|
|
15
|
-
- 當 spec 已完成且應轉成長期文件時,已先完成 `archive-specs`,而不是把它留給後續流程猜測處理
|
|
16
|
-
- `docs/`、`AGENTS.md` / `CLAUDE.md` 與必要的 `README.md` 已根據實際行為與工作流程同步
|
|
17
|
-
- `CHANGELOG.md` 的 `Unreleased` 區塊已準確對應這次將提交、開 PR 或發版的真實範圍
|
|
18
|
-
- 最終輸出的是明確的 ready / blocking verdict,而不是模糊警告
|
|
19
|
-
|
|
20
|
-
## 工作流程
|
|
21
|
-
|
|
22
|
-
1. 先讀取 git 狀態、staged / unstaged diff,並盤點 repo 是否有 `CHANGELOG.md`、`AGENTS.md`、`CLAUDE.md`、標準化 `docs/` 結構,以及任何 `docs/plans/...` 計劃集
|
|
23
|
-
2. 判斷下游流程屬於 `commit-push`、`pull-request` 或 `release`,因為不同流程對 changelog 與發版資料的要求不同
|
|
24
|
-
3. 檢查 planning artifacts 是否應轉檔;只要 plan set 已對應本次交付成果,或專案文件仍未標準化,就必須先跑 `archive-specs`
|
|
25
|
-
4. 在 spec 歸檔判斷完成後,同步專案文件;必要時執行 `align-project-documents` 更新 `docs/`,再用 `maintain-project-constraints` 更新 `AGENTS.md` / `CLAUDE.md`
|
|
26
|
-
5. 檢查 `CHANGELOG.md`:對 commit / PR 流程,要讓 `Unreleased` 精準反映這次待提交內容,同時保留其他未出貨工作;對 release 流程,`Unreleased` 必須非空且已整理成可直接切版的 release notes
|
|
27
|
-
6. 彙整哪些項目已同步、哪些仍阻塞;若還有未完成的 gate,明確回報 blocking item,而不是把責任留給下一個技能
|
|
28
|
-
|
|
29
|
-
## 範例
|
|
30
|
-
|
|
31
|
-
- 「準備提交這批變更」-> 檢查是否有未同步 changelog、文件與已完成但尚未歸檔的 spec
|
|
32
|
-
- 「準備開 PR」-> 確保 `Unreleased` 反映當前 PR 範圍,並把 `AGENTS.md` / `CLAUDE.md` 與 docs 同步好
|
|
33
|
-
- 「準備發版」-> 確保 `Unreleased` 非空且可直接作為 release notes,並先完成任何必要的 spec 歸檔與文件標準化
|
|
34
|
-
|
|
35
|
-
## 參考資料
|
|
36
|
-
|
|
37
|
-
- `align-project-documents`:同步 `docs/features/`、`docs/architecture/`、`docs/principles/`
|
|
38
|
-
- `maintain-project-constraints`:同步 `AGENTS.md` / `CLAUDE.md`
|
|
39
|
-
- `archive-specs`:在符合條件時轉檔並歸檔 planning artifacts
|