@rasensio/aidlc-content 1.30.0 → 1.31.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/package.json
CHANGED
|
@@ -51,6 +51,7 @@ promoted_to: null
|
|
|
51
51
|
depends_on: []
|
|
52
52
|
history:
|
|
53
53
|
- { status: inbox, at: YYYY-MM-DD }
|
|
54
|
+
{{project_item_fields}}
|
|
54
55
|
---
|
|
55
56
|
```
|
|
56
57
|
|
|
@@ -69,8 +70,7 @@ Rules for those fields:
|
|
|
69
70
|
written, not who asked for it.
|
|
70
71
|
- `promoted_to` stays `null`. Leave `depends_on` empty — you cannot know the identifiers of
|
|
71
72
|
other items in the project.
|
|
72
|
-
|
|
73
|
-
folder the file sits in, not inside the file.
|
|
73
|
+
{{project_item_fields_rule}}
|
|
74
74
|
|
|
75
75
|
Then the body, with these five headings and nothing else at this level:
|
|
76
76
|
|
package/skills/04-roadmap.md
CHANGED
|
@@ -63,6 +63,30 @@ history:
|
|
|
63
63
|
|
|
64
64
|
Bodies are otherwise free-form. Items authored through the portable skill carry four further headings — Problem, Who it's for, What success looks like, Out of scope — which is a useful shape, not a validated one.
|
|
65
65
|
|
|
66
|
+
### Project-Declared Extension Fields
|
|
67
|
+
|
|
68
|
+
A project that outgrows those eight keys declares its own in `.aidlc/config.yaml`, and everything that writes an item then emits them:
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
roadmap:
|
|
72
|
+
item_fields:
|
|
73
|
+
- name: requirements
|
|
74
|
+
required: true
|
|
75
|
+
default: []
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`name` must be lowercase letters, digits and underscores, and may not shadow a stock key. `status` is refused by name — status is the directory, and a second representation of it is the one extension the layout can never allow. `required` defaults to `true`; `default` defaults to `null`.
|
|
79
|
+
|
|
80
|
+
The worked example is real. `fieldmodel-apps` keeps requirements traceability as data: `docs/requirements-traceability.md` holds the requirement IDs, every item declares which ones it delivers in `requirements: [...]`, and `scripts/check-roadmap-requirements.mjs` computes coverage as a set difference. It requires the key even when empty, because a set difference over an optional key silently under-reports. Before this existed, the portable `roadmap-item` skill said *"Do not add any other field"* while that check demanded one — two individually-correct rules that no agent could satisfy at once, in a framework-owned file the project was not allowed to edit.
|
|
81
|
+
|
|
82
|
+
Declaring a field changes three things and nothing else:
|
|
83
|
+
|
|
84
|
+
- The portable `roadmap-item` skill's template carries the field, and its "add no other field" rule becomes bounded rather than absolute. `aidlc update` re-emits it.
|
|
85
|
+
- `aidlc roadmap import` and the `roadmap-layout` doctor migration write the declared default into items they create. Triage moves and `roadmap-done` already preserve the field, because they edit frontmatter as text rather than re-serializing it.
|
|
86
|
+
- `aidlc doctor` reports items missing a required declared field and offers to backfill the declared default.
|
|
87
|
+
|
|
88
|
+
**The framework checks presence and shape, never contents.** Shape is taken from the declared `default` — a list default means a list value, a scalar means a scalar — and a `default: null` declares no shape, so only presence is checked. There is no config key that could express a rule about what goes *in* a field, and that absence is deliberate: `requirements: [not-a-real-id]` is the project's own script's business. A wrong-shaped value is reported and never rewritten, because only the person who wrote it knows what they meant.
|
|
89
|
+
|
|
66
90
|
### Every Item Opens With an Executive Summary
|
|
67
91
|
|
|
68
92
|
The first section of the body, before anything else, is `## Executive Summary` — six labelled lines, nothing more:
|