@laitszkin/apollo-toolkit 2.11.0 → 2.11.2
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/develop-new-features/SKILL.md +17 -4
- package/develop-new-features/references/testing-e2e.md +1 -0
- package/enhance-existing-features/SKILL.md +29 -19
- package/enhance-existing-features/references/e2e-tests.md +1 -0
- package/generate-spec/SKILL.md +18 -3
- package/generate-spec/references/templates/checklist.md +30 -6
- package/generate-spec/references/templates/spec.md +7 -2
- package/package.json +1 -1
- package/scripts/validate_skill_frontmatter.py +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,20 @@ All notable changes to this repository are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [v2.11.2] - 2026-03-23
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- Update `develop-new-features` and `enhance-existing-features` so small localized work such as bug fixes, pure frontend polish, and simple adjustments can skip spec generation, while non-trivial feature work still uses approval-backed specs.
|
|
11
|
+
- Strengthen `generate-spec` so spec creation must verify relevant official documentation for external dependencies before writing requirements or scope.
|
|
12
|
+
- Refine spec templates so `spec.md` uses dedicated `In Scope` and `Out of Scope` sections, checklist completion uses structured completion records, and E2E versus integration decisions support multiple per-flow records without encouraging false checkbox completion.
|
|
13
|
+
|
|
14
|
+
## [v2.11.1] - 2026-03-23
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Add a dedicated GitHub Actions validation job for `SKILL.md` description length checks.
|
|
18
|
+
- Enforce a maximum `description` length of 1024 characters in `scripts/validate_skill_frontmatter.py`.
|
|
19
|
+
- Shorten `enhance-existing-features` metadata so its `description` stays within the loader limit without changing intent.
|
|
20
|
+
|
|
7
21
|
## [v2.11.0] - 2026-03-23
|
|
8
22
|
|
|
9
23
|
### Added
|
|
@@ -28,13 +28,13 @@ description: >-
|
|
|
28
28
|
## Standards
|
|
29
29
|
|
|
30
30
|
- Evidence: Review authoritative docs and the existing codebase before planning or implementation.
|
|
31
|
-
- Execution:
|
|
31
|
+
- Execution: Use specs only for feature work that is genuinely multi-step, cross-surface, or higher risk; skip specs for obviously small/localized work and route that work to direct implementation or the appropriate maintenance skill instead.
|
|
32
32
|
- Quality: Add risk-based tests with property-based, regression, integration, E2E, adversarial, and rollback coverage when relevant.
|
|
33
33
|
- Output: Keep the approved planning artifacts and the final implementation aligned with actual completion results.
|
|
34
34
|
|
|
35
35
|
## Goal
|
|
36
36
|
|
|
37
|
-
Use a shared spec-generation workflow for
|
|
37
|
+
Use a shared spec-generation workflow for non-trivial new feature work, then implement the approved behavior with strong test coverage and minimal rework.
|
|
38
38
|
|
|
39
39
|
## Workflow
|
|
40
40
|
|
|
@@ -47,7 +47,15 @@ Use a shared spec-generation workflow for all new feature work, then implement t
|
|
|
47
47
|
|
|
48
48
|
### 2) Run `$generate-spec`
|
|
49
49
|
|
|
50
|
-
-
|
|
50
|
+
- First decide whether the request truly belongs in this skill.
|
|
51
|
+
- Do not use this skill or generate specs when the request is actually one of these:
|
|
52
|
+
- bug fixes or regressions that restore intended behavior without introducing new product behavior
|
|
53
|
+
- copy-only, styling-only, spacing-only, layout-only, or other purely presentational UI tweaks with localized impact
|
|
54
|
+
- simple configuration, constant, feature-flag, dependency, or content updates confined to one small area
|
|
55
|
+
- small refactors, naming cleanups, or internal code-health work with no externally visible behavior change
|
|
56
|
+
- narrowly scoped adjustments that touch only a few files/modules and do not require cross-team alignment or approval artifacts
|
|
57
|
+
- In those cases, do not create `spec.md` / `tasks.md` / `checklist.md`; instead use the appropriate direct implementation workflow (for example `enhance-existing-features` for small brownfield adjustments or `systematic-debug` for bug fixes).
|
|
58
|
+
- Specs are required when the request is truly a non-trivial new feature, product behavior change, or greenfield project that needs shared planning.
|
|
51
59
|
- Follow `$generate-spec` completely for:
|
|
52
60
|
- generating `docs/plans/{YYYY-MM-DD}_{change_name}/spec.md`, `tasks.md`, and `checklist.md`
|
|
53
61
|
- filling BDD requirements and risk-driven test plans
|
|
@@ -98,7 +106,11 @@ Rules:
|
|
|
98
106
|
|
|
99
107
|
- Backfill `spec.md`, `tasks.md`, and `checklist.md` through `$generate-spec` workflow after implementation and testing.
|
|
100
108
|
- In `spec.md`, mark each approved requirement with its actual completion state, such as completed, partially completed, deferred, or not implemented, plus brief evidence or rationale where needed.
|
|
101
|
-
- Mark every completed task in `tasks.md
|
|
109
|
+
- Mark every completed task in `tasks.md`.
|
|
110
|
+
- In `checklist.md`, update only the items that are actually applicable to the approved scope and executed validation.
|
|
111
|
+
- Do not mark template alternatives, unused example rows, or non-applicable decision branches as completed just to make the file look fully checked.
|
|
112
|
+
- Rewrite, remove, or leave `N/A` on template-only sections so the final checklist reflects the real work rather than the starter template.
|
|
113
|
+
- Explicitly label any truly remaining applicable item as deferred or blocked with the reason.
|
|
102
114
|
- Report the implemented scope, test execution, and any concrete `N/A` reasons.
|
|
103
115
|
|
|
104
116
|
## Working Rules
|
|
@@ -107,6 +119,7 @@ Rules:
|
|
|
107
119
|
- Keep implementation traceable to approved requirement IDs and planned risks.
|
|
108
120
|
- Prefer realism over rigid templates: add or remove test coverage only when the risk profile justifies it.
|
|
109
121
|
- Every planned test should justify a distinct risk; remove shallow duplicates that only prove the code "still runs".
|
|
122
|
+
- Treat starter template alternatives as mutually exclusive options, not as boxes that all need to be checked.
|
|
110
123
|
- If a spec set exists and approval has been granted, do not yield with unfinished in-scope tasks or checklist items unless the user approves a deferment or an external blocker makes completion impossible.
|
|
111
124
|
|
|
112
125
|
## References
|
|
@@ -32,4 +32,5 @@
|
|
|
32
32
|
## Spec/checklist authoring hints
|
|
33
33
|
- Mark high-risk key paths in `spec.md` requirement descriptions.
|
|
34
34
|
- Record E2E decisions, mapped test cases, and results in `checklist.md`.
|
|
35
|
+
- When different flows need different strategies, create multiple decision records instead of forcing one shared E2E decision for the whole feature.
|
|
35
36
|
- If skipping E2E, specify replacement integration test cases (`IT-xx`) and rationale in `checklist.md`.
|
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: enhance-existing-features
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
unit/property-based/user-critical integration chain/E2E coverage. Tests must
|
|
14
|
-
not stop at happy-path validation: for business-logic changes require
|
|
15
|
-
property-based testing unless explicitly `N/A` with reason, design
|
|
16
|
-
adversarial/regression/authorization/idempotency/concurrency coverage where
|
|
17
|
-
relevant, use mocks for external services in logic chains, and verify
|
|
18
|
-
meaningful business outcomes rather than smoke-only success.
|
|
4
|
+
Extend brownfield features by exploring the codebase first, then deciding
|
|
5
|
+
whether shared specs (`spec.md`/`tasks.md`/`checklist.md`) are required
|
|
6
|
+
before coding. When specs are needed, use `generate-spec` for planning,
|
|
7
|
+
clarification, approval, and backfill, and complete approved in-scope tasks
|
|
8
|
+
before yielding unless scope changes or an external blocker prevents safe
|
|
9
|
+
completion. With or without specs, add and run relevant unit,
|
|
10
|
+
property-based, regression, integration, E2E, and adversarial tests as
|
|
11
|
+
applicable, use mocks for external services in logic chains, and verify
|
|
12
|
+
meaningful business outcomes instead of smoke-only success.
|
|
19
13
|
---
|
|
20
14
|
|
|
21
15
|
# Enhance Existing Features
|
|
@@ -54,9 +48,20 @@ Safely extend brownfield systems by exploring the existing codebase first, using
|
|
|
54
48
|
Use the user's requested change together with the codebase exploration results to decide whether to generate specs.
|
|
55
49
|
|
|
56
50
|
Trigger specs when any of the following is true:
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
51
|
+
- the change introduces new user-visible behavior, not just a bug fix restoring intended behavior
|
|
52
|
+
- requirements are ambiguous enough that approval on written scope, tradeoffs, or edge cases is useful
|
|
53
|
+
- multiple modules, layers, services, or teams must stay aligned
|
|
54
|
+
- the change touches critical flows, sensitive data, permissions, money movement, migrations, or irreversible operations
|
|
55
|
+
- the risk profile is high enough that explicit requirement-to-test traceability will materially reduce mistakes
|
|
56
|
+
|
|
57
|
+
Do not generate specs when the work is clearly small and localized, such as:
|
|
58
|
+
- bug fixes or regressions that restore already-intended behavior without changing product scope
|
|
59
|
+
- pure frontend polish: copy tweaks, styling, spacing, alignment, responsive touch-ups, visual cleanup, or simple template/view wiring
|
|
60
|
+
- small configuration, constant, dependency, content, or feature-flag updates confined to one area
|
|
61
|
+
- straightforward CRUD field additions, validation message tweaks, or one-path handler adjustments with limited blast radius
|
|
62
|
+
- refactors, renames, dead-code cleanup, or observability-only changes that do not alter user-visible behavior
|
|
63
|
+
|
|
64
|
+
When in doubt, prefer direct implementation for genuinely low-risk localized changes, and reserve specs for changes whose scope or risk would benefit from explicit approval artifacts.
|
|
60
65
|
|
|
61
66
|
If triggered:
|
|
62
67
|
- Run `$generate-spec` and follow its workflow completely.
|
|
@@ -114,7 +119,11 @@ Rules:
|
|
|
114
119
|
|
|
115
120
|
- If specs were used, backfill `spec.md`, `tasks.md`, and `checklist.md` through `$generate-spec` workflow based on actual completion and test outcomes.
|
|
116
121
|
- In `spec.md`, mark each relevant requirement with its actual completion state, such as completed, partially completed, deferred, or not implemented, plus brief evidence or rationale where needed.
|
|
117
|
-
- If specs were used, mark every completed task in `tasks.md
|
|
122
|
+
- If specs were used, mark every completed task in `tasks.md`.
|
|
123
|
+
- If specs were used, update only the applicable checklist items that correspond to real scope, chosen test strategy, and actual execution.
|
|
124
|
+
- Do not mark unused template examples, mutually exclusive alternatives, or non-applicable branches as completed.
|
|
125
|
+
- Remove, rewrite, or leave `N/A` on starter-template items when they do not belong to the real change.
|
|
126
|
+
- Explicitly label any still-applicable remaining item as deferred or blocked with the reason.
|
|
118
127
|
- If specs were not used, provide a concise execution summary including test IDs/results, regression coverage, mock scenario coverage, adversarial coverage, and any `N/A` reasons.
|
|
119
128
|
|
|
120
129
|
## Working Rules
|
|
@@ -123,6 +132,7 @@ Rules:
|
|
|
123
132
|
- Always decide the need for specs only after exploring the existing codebase.
|
|
124
133
|
- Maintain traceability between requirements, tasks, and tests when specs are present.
|
|
125
134
|
- Treat checklists as living artifacts: adjust items to match real change scope.
|
|
135
|
+
- Treat mutually exclusive template choices as a decision to record, not multiple boxes to finish.
|
|
126
136
|
- Every planned test should justify a distinct risk; remove shallow duplicates that only prove the code "still runs".
|
|
127
137
|
- If a spec set exists and approval has been granted, do not yield with unfinished in-scope tasks or checklist items unless the user approves a deferment or an external blocker makes completion impossible.
|
|
128
138
|
|
|
@@ -22,4 +22,5 @@
|
|
|
22
22
|
|
|
23
23
|
## Recording rules
|
|
24
24
|
- Specs flow: record E2E or replacement strategy with outcomes in `checklist.md`.
|
|
25
|
+
- When different flows need different strategies, create multiple decision records in `checklist.md` so each flow/risk slice keeps its own rationale and linked case IDs.
|
|
25
26
|
- Non-specs flow: explain E2E execution or replacement testing with rationale in the response.
|
package/generate-spec/SKILL.md
CHANGED
|
@@ -14,9 +14,9 @@ description: Generate and maintain shared feature planning artifacts (`spec.md`,
|
|
|
14
14
|
|
|
15
15
|
## Standards
|
|
16
16
|
|
|
17
|
-
- Evidence: Review the relevant code, configs, and authoritative docs before filling requirements or test plans.
|
|
17
|
+
- Evidence: Review the relevant code, configs, and authoritative docs before filling requirements or test plans; when external dependencies, libraries, frameworks, APIs, or platforms are involved, checking their official documentation is mandatory during spec creation.
|
|
18
18
|
- Execution: Generate the planning files first, complete them with traceable requirements and risks, handle clarification updates, then wait for explicit approval before implementation.
|
|
19
|
-
- Quality: Keep `spec.md`, `tasks.md`, and `checklist.md` synchronized
|
|
19
|
+
- Quality: Keep `spec.md`, `tasks.md`, and `checklist.md` synchronized, map each planned test to a concrete risk or requirement, and tailor the templates so only applicable items remain active.
|
|
20
20
|
- Output: Store planning artifacts under `docs/plans/{YYYY-MM-DD}_{change_name}/` and keep them concise, executable, and easy to update.
|
|
21
21
|
|
|
22
22
|
## Goal
|
|
@@ -29,6 +29,9 @@ Own the shared planning-doc lifecycle for feature work so other skills can reuse
|
|
|
29
29
|
|
|
30
30
|
- Confirm the target workspace root, feature name, and a kebab-case `change_name`.
|
|
31
31
|
- Review only the code, configuration, and external docs needed to understand the requested behavior.
|
|
32
|
+
- If the change depends on frameworks, libraries, SDKs, APIs, CLIs, hosted services, or other external systems, find and read the relevant official documentation before drafting requirements.
|
|
33
|
+
- Treat official documentation lookup as mandatory evidence gathering, not an optional refinement step.
|
|
34
|
+
- Use the official docs to verify expected behavior, supported constraints, configuration surface, integration contracts, and any implementation limits that should shape the spec.
|
|
32
35
|
- Record the references that should appear in `spec.md`.
|
|
33
36
|
- Inspect existing `docs/plans/` directories before deciding whether to edit an existing plan set.
|
|
34
37
|
- Reuse an existing plan set only when it clearly matches the same requested issue/change scope.
|
|
@@ -50,9 +53,11 @@ Own the shared planning-doc lifecycle for feature work so other skills can reuse
|
|
|
50
53
|
### 3) Fill `spec.md`
|
|
51
54
|
|
|
52
55
|
- Keep the goal and scope concrete.
|
|
56
|
+
- Ensure the described scope and requirements do not contradict the relevant official documentation or integration contracts.
|
|
53
57
|
- Write functional behaviors in BDD form with `GIVEN`, `WHEN`, `THEN`, `AND`, and `Requirements`.
|
|
54
58
|
- Make each requirement testable.
|
|
55
59
|
- Cover boundaries, authorization, external dependency states, abuse/adversarial paths, failure handling, and any relevant idempotency/concurrency/data-integrity risks.
|
|
60
|
+
- Record the official-doc references actually used for the spec, especially for external dependency behavior and constraints.
|
|
56
61
|
- If requirements are unclear, list 3-5 clarification questions; otherwise write `None`.
|
|
57
62
|
|
|
58
63
|
### 4) Fill `tasks.md`
|
|
@@ -64,11 +69,15 @@ Own the shared planning-doc lifecycle for feature work so other skills can reuse
|
|
|
64
69
|
|
|
65
70
|
### 5) Fill `checklist.md`
|
|
66
71
|
|
|
67
|
-
- Use checkbox format `- [ ]`
|
|
72
|
+
- Use checkbox format `- [ ]` for checklist items, except structured placeholder fields that are intentionally left for later fill-in.
|
|
68
73
|
- Treat the template as a starting point and adapt it to the actual scope.
|
|
74
|
+
- Remove or rewrite template examples that are not part of the real plan instead of leaving them as fake work to be checked later.
|
|
69
75
|
- Map observable behaviors to requirement IDs and real test case IDs.
|
|
70
76
|
- Record risk class, oracle/assertion focus, dependency strategy, and test results.
|
|
71
77
|
- Property-based coverage is required for business-logic changes unless a concrete `N/A` reason is recorded.
|
|
78
|
+
- For decision sections, create as many records as needed for distinct flows or risk slices; do not collapse unrelated decisions into one record.
|
|
79
|
+
- Within each decision record, keep only the selected strategy or clearly mark the non-selected path as `N/A`; never treat mutually exclusive choices inside one record as multiple completed outcomes.
|
|
80
|
+
- For completion-summary sections, create as many completion records as needed for distinct flows, requirement groups, or workstreams; do not force the whole spec into a single completion line when different parts finish differently.
|
|
72
81
|
|
|
73
82
|
### 6) Process clarifications and approval
|
|
74
83
|
|
|
@@ -82,6 +91,10 @@ Own the shared planning-doc lifecycle for feature work so other skills can reuse
|
|
|
82
91
|
|
|
83
92
|
- Mark completed tasks in `tasks.md`.
|
|
84
93
|
- Update `checklist.md` with real test outcomes, `N/A` reasons, and any scope adjustments.
|
|
94
|
+
- Only mark checklist items complete when the work actually happened or the recorded decision actually applies.
|
|
95
|
+
- Do not check off unused examples, placeholder rows, or non-selected decision options.
|
|
96
|
+
- If different flows use different test strategies, preserve separate decision records in the final checklist instead of merging them into a misleading single summary.
|
|
97
|
+
- If different parts of the approved scope have different completion states, preserve separate completion records in the final checklist instead of flattening them into one ambiguous status.
|
|
85
98
|
- Remove stale placeholders or template-only guidance once the documents are finalized.
|
|
86
99
|
|
|
87
100
|
## Working Rules
|
|
@@ -89,6 +102,8 @@ Own the shared planning-doc lifecycle for feature work so other skills can reuse
|
|
|
89
102
|
- By default, write planning docs in the user's language.
|
|
90
103
|
- Keep requirement IDs, task IDs, and test IDs traceable across all three files.
|
|
91
104
|
- Prefer realistic coverage over boilerplate: add or remove checklist items based on actual risk.
|
|
105
|
+
- Finalized planning docs should read like the actual approved plan and execution record, not like a fully checked starter template.
|
|
106
|
+
- If official documentation materially constrains implementation choices, reflect that constraint explicitly in the spec instead of leaving it implicit.
|
|
92
107
|
- Use kebab-case for `change_name`; avoid spaces and special characters.
|
|
93
108
|
- Path rule: `scripts/...` and `references/...` in this file always mean paths under the current skill folder, not the target project root.
|
|
94
109
|
- Never overwrite a nearby issue's plan set just because the technical area overlaps; shared modules are not sufficient evidence that the scope is the same.
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
## Usage Notes
|
|
7
7
|
- This checklist is a starter template. Add, remove, or rewrite items based on actual scope.
|
|
8
8
|
- Use `- [ ]` for all items; mark completed items as `- [x]`.
|
|
9
|
+
- The final completion summary section may use structured placeholders instead of checkboxes.
|
|
9
10
|
- If an item is not applicable, keep `N/A` with a concrete reason.
|
|
11
|
+
- Do not mark placeholder examples or mutually exclusive alternatives as completed unless they were actually selected and executed.
|
|
12
|
+
- Duplicate or remove decision-record blocks as needed; the final document should contain as many records as the real change requires.
|
|
13
|
+
- Duplicate or remove completion-record blocks as needed; the final document should contain as many records as the real change requires.
|
|
10
14
|
- Suggested test result values: `PASS / FAIL / BLOCKED / NOT RUN / N/A`.
|
|
11
15
|
- For business-logic changes, property-based coverage is required unless a concrete `N/A` reason is recorded.
|
|
12
16
|
- Each checklist item should map to a distinct risk; avoid repeating shallow happy-path cases.
|
|
@@ -60,10 +64,19 @@
|
|
|
60
64
|
- [ ] Assertions verify business outcomes and side effects/no-side-effects, not only "returns 200" or "does not throw".
|
|
61
65
|
- [ ] Test fixtures are reproducible (fixed seed/clock/fixtures) or `N/A` is recorded with a concrete reason.
|
|
62
66
|
|
|
63
|
-
## E2E
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
+
## E2E / Integration Decision Records
|
|
68
|
+
|
|
69
|
+
### Decision Record 1: [Flow / Requirement / Risk Slice]
|
|
70
|
+
- Requirement mapping: [R?.? / CL-xx]
|
|
71
|
+
- Decision: [Build E2E / Cover with integration instead / Existing coverage already sufficient / N/A]
|
|
72
|
+
- Linked case IDs: [E2E-xx / IT-xx / existing suite reference]
|
|
73
|
+
- Reason: [importance, cross-layer risk, stability/cost tradeoff, or why no extra coverage is needed]
|
|
74
|
+
|
|
75
|
+
### Decision Record 2: [Flow / Requirement / Risk Slice]
|
|
76
|
+
- Requirement mapping: [R?.? / CL-xx]
|
|
77
|
+
- Decision: [Build E2E / Cover with integration instead / Existing coverage already sufficient / N/A]
|
|
78
|
+
- Linked case IDs: [E2E-xx / IT-xx / existing suite reference]
|
|
79
|
+
- Reason: [importance, cross-layer risk, stability/cost tradeoff, or why no extra coverage is needed]
|
|
67
80
|
|
|
68
81
|
## Execution Summary (fill with actual results)
|
|
69
82
|
- [ ] Unit tests: `PASS / FAIL / NOT RUN / N/A`
|
|
@@ -74,5 +87,16 @@
|
|
|
74
87
|
- [ ] External service mock scenarios: `PASS / FAIL / NOT RUN / N/A`
|
|
75
88
|
- [ ] Adversarial/penetration-style cases: `PASS / FAIL / NOT RUN / N/A`
|
|
76
89
|
|
|
77
|
-
## Completion
|
|
78
|
-
|
|
90
|
+
## Completion Records
|
|
91
|
+
|
|
92
|
+
### Completion Record 1: [Flow / Requirement Group / Workstream]
|
|
93
|
+
- Requirement mapping: [R?.? / Task N / CL-xx]
|
|
94
|
+
- Completion status: [completed / partially completed / blocked / deferred]
|
|
95
|
+
- Remaining applicable items: [None / list remaining items]
|
|
96
|
+
- Notes: [brief execution-backed summary]
|
|
97
|
+
|
|
98
|
+
### Completion Record 2: [Flow / Requirement Group / Workstream]
|
|
99
|
+
- Requirement mapping: [R?.? / Task N / CL-xx]
|
|
100
|
+
- Completion status: [completed / partially completed / blocked / deferred]
|
|
101
|
+
- Remaining applicable items: [None / list remaining items]
|
|
102
|
+
- Notes: [brief execution-backed summary]
|
|
@@ -8,8 +8,12 @@
|
|
|
8
8
|
[Describe the business goal and user value in one sentence.]
|
|
9
9
|
|
|
10
10
|
## Scope
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
|
|
12
|
+
### In Scope
|
|
13
|
+
[What is included in this change]
|
|
14
|
+
|
|
15
|
+
### Out of Scope
|
|
16
|
+
[What is explicitly excluded]
|
|
13
17
|
|
|
14
18
|
## Functional Behaviors (BDD)
|
|
15
19
|
|
|
@@ -51,5 +55,6 @@
|
|
|
51
55
|
## References
|
|
52
56
|
- Official docs:
|
|
53
57
|
- [Link or document 1]
|
|
58
|
+
- [Link or document 2]
|
|
54
59
|
- Related code files:
|
|
55
60
|
- [File path 1]
|
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@ import yaml
|
|
|
11
11
|
|
|
12
12
|
NAME_PATTERN = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$")
|
|
13
13
|
REQUIRED_KEYS = {"name", "description"}
|
|
14
|
+
MAX_DESCRIPTION_LENGTH = 1024
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def repo_root() -> Path:
|
|
@@ -81,6 +82,11 @@ def validate_skill(skill_dir: Path) -> list[str]:
|
|
|
81
82
|
description = frontmatter.get("description")
|
|
82
83
|
if not isinstance(description, str) or not description.strip():
|
|
83
84
|
errors.append(f"{skill_md}: 'description' must be a non-empty string.")
|
|
85
|
+
elif len(description) > MAX_DESCRIPTION_LENGTH:
|
|
86
|
+
errors.append(
|
|
87
|
+
f"{skill_md}: invalid description: exceeds maximum length of "
|
|
88
|
+
f"{MAX_DESCRIPTION_LENGTH} characters"
|
|
89
|
+
)
|
|
84
90
|
|
|
85
91
|
return errors
|
|
86
92
|
|