xdrs-core 0.47.0 → 0.48.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.xdrs/_core/adrs/index.md +2 -2
- package/.xdrs/_core/adrs/principles/001-xdrs-standards.md +12 -12
- package/.xdrs/_core/adrs/principles/004-article-standards.md +1 -1
- package/.xdrs/_core/adrs/principles/007-initiative-standards.md +140 -0
- package/.xdrs/_core/adrs/principles/009-presentation-standards.md +3 -3
- package/.xdrs/_core/adrs/principles/010-scope-governance.md +2 -2
- package/.xdrs/_core/adrs/principles/articles/.assets/001-xdrs-overview-slides.md +7 -7
- package/.xdrs/_core/adrs/principles/articles/.assets/001-xdrs-overview.svg +3 -3
- package/.xdrs/_core/adrs/principles/articles/001-xdrs-overview.md +11 -11
- package/.xdrs/_core/adrs/principles/skills/.assets/meta-policy-compliance.md +1 -1
- package/.xdrs/_core/adrs/principles/skills/.assets/prerequisites-gate.md +2 -2
- package/.xdrs/_core/adrs/principles/skills/001-review/SKILL.md +13 -3
- package/.xdrs/_core/adrs/principles/skills/004-write-article/004-write-article.test.int.report +1 -1
- package/.xdrs/_core/adrs/principles/skills/{006-write-plan → 006-write-initiative}/SKILL.md +40 -40
- package/.xdrs/_core/adrs/principles/skills/007-write-presentation/SKILL.md +3 -3
- package/.xdrs/_core/adrs/principles/skills/008-write-xdrs-doc/SKILL.md +14 -4
- package/.xdrs/_core/index.md +4 -4
- package/.xdrs/index.md +1 -1
- package/README.md +10 -8
- package/lib/lint.js +25 -25
- package/lib/lint.test.js +174 -7
- package/package.json +2 -2
- package/.xdrs/_core/adrs/principles/007-plan-standards.md +0 -140
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: 006-write-
|
|
2
|
+
name: 006-write-initiative
|
|
3
3
|
description: >
|
|
4
|
-
Creates a new
|
|
5
|
-
then writes a focused execution
|
|
6
|
-
Activate this skill when the user asks to create, add, or write
|
|
4
|
+
Creates a new initiative document following XDRS initiative standards: selects scope, type, subject, and number;
|
|
5
|
+
then writes a focused execution initiative with problem context, proposed solution, approach, milestones, and deliverables.
|
|
6
|
+
Activate this skill when the user asks to create, add, or write an initiative, plan, project plan, roadmap, or execution plan within an XDRS project.
|
|
7
7
|
metadata:
|
|
8
8
|
author: flaviostutz
|
|
9
9
|
version: "1.0"
|
|
@@ -11,24 +11,24 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
## Overview
|
|
13
13
|
|
|
14
|
-
Guides the creation of a well-structured
|
|
14
|
+
Guides the creation of a well-structured initiative document by following `_core-adr-policy-007`, consulting `xdrs-core` for every core element definition, researching related Policies and existing initiatives, and producing a focused execution document that connects to the decisions, research, and skills it relates to.
|
|
15
15
|
|
|
16
16
|
## Instructions
|
|
17
17
|
|
|
18
18
|
### Phase 0: Scope Placement and Prerequisites Gate — MUST complete before writing
|
|
19
19
|
|
|
20
20
|
1. Run the scope placement analysis from the shared module at `.xdrs/_core/adrs/principles/skills/.assets/scope-placement.md` to determine and confirm the target scope.
|
|
21
|
-
2. Once the scope is confirmed, run the prerequisites gate from the shared module at `.xdrs/_core/adrs/principles/skills/.assets/prerequisites-gate.md`. Substitute `[DOCUMENT TYPE]` with `
|
|
21
|
+
2. Once the scope is confirmed, run the prerequisites gate from the shared module at `.xdrs/_core/adrs/principles/skills/.assets/prerequisites-gate.md`. Substitute `[DOCUMENT TYPE]` with `initiative`.
|
|
22
22
|
|
|
23
|
-
### Phase 1: Understand the
|
|
23
|
+
### Phase 1: Understand the Initiative Goal
|
|
24
24
|
|
|
25
|
-
1. Read `.xdrs/_core/adrs/principles/007-
|
|
26
|
-
2. Read `.xdrs/_core/adrs/principles/001-xdrs-standards.md` in full before defining the
|
|
25
|
+
1. Read `.xdrs/_core/adrs/principles/007-initiative-standards.md` in full to internalize the template, placement rules, numbering rules, and the constraint that initiatives are ephemeral and must be deleted after implementation.
|
|
26
|
+
2. Read `.xdrs/_core/adrs/principles/001-xdrs-standards.md` in full before defining the initiative's core elements. Treat it as the canonical source for how to choose and write type, scope, subject, numbering, naming, and folder placement.
|
|
27
27
|
3. Identify the problem being solved, the proposed solution, and the expected timeline from user input or context. Do NOT proceed without a clear problem statement and proposed solution.
|
|
28
|
-
4. Ask the user clarifying questions to fill any gaps before writing the
|
|
28
|
+
4. Ask the user clarifying questions to fill any gaps before writing the initiative. Use the following rules:
|
|
29
29
|
- Ask all initial questions in a single batch so the user can answer them together.
|
|
30
30
|
- After receiving the answers, evaluate whether any answer introduces new ambiguity or opens a related topic that requires further clarification. If it does, ask a focused follow-up question (or a small batch of follow-up questions) before proceeding.
|
|
31
|
-
- Repeat this question-answer loop until you have enough information to write the
|
|
31
|
+
- Repeat this question-answer loop until you have enough information to write the initiative with confidence.
|
|
32
32
|
- Typical questions cover: the problem being solved, the proposed solution, the expected timeline, the scope, the key stakeholders, and any known constraints or risks.
|
|
33
33
|
- Do NOT ask questions whose answers are already clear from context.
|
|
34
34
|
|
|
@@ -39,34 +39,34 @@ Consult `001-xdrs-standards` while making each choice in this phase. The summari
|
|
|
39
39
|
|
|
40
40
|
**Scope** — confirmed in Phase 0. Follow the external-scope validation in `.xdrs/_core/adrs/principles/skills/.assets/scope-selection.md`.
|
|
41
41
|
|
|
42
|
-
**Type** — match the type of the Policies the
|
|
42
|
+
**Type** — match the type of the Policies the initiative primarily implements or relates to (`adrs`, `bdrs`, or `edrs`).
|
|
43
43
|
- **BDR**: business process, product policy, strategic rule, operational procedure
|
|
44
44
|
- **ADR**: system context, integration pattern, overarching architectural choice
|
|
45
45
|
- **EDR**: specific tool/library, coding practice, testing strategy, project structure, pipelines
|
|
46
46
|
|
|
47
|
-
**Subject** — pick the subject that best matches the
|
|
47
|
+
**Subject** — pick the subject that best matches the initiative's topic (required list per type is in `_core-adr-policy-001`). If the initiative spans more than one subject, place it in `principles`.
|
|
48
48
|
|
|
49
49
|
### Phase 3: Assign a Number and Name
|
|
50
50
|
|
|
51
|
-
1. List `.xdrs/[scope]/[type]/[subject]/
|
|
52
|
-
2. Find the highest existing
|
|
51
|
+
1. List `.xdrs/[scope]/[type]/[subject]/initiatives/` (create the folder if it does not exist).
|
|
52
|
+
2. Find the highest existing initiative number in that namespace and increment by 1. Never reuse numbers.
|
|
53
53
|
3. Choose a short lowercase kebab-case title that describes the initiative clearly.
|
|
54
54
|
- Good: `checkout-performance`, `onboarding-redesign`, `api-migration-v2`
|
|
55
|
-
- Avoid: `
|
|
55
|
+
- Avoid: `initiative`, `project`, `misc`
|
|
56
56
|
|
|
57
57
|
### Phase 4: Research Related Artifacts
|
|
58
58
|
|
|
59
|
-
1. Read all Policies, Research documents, Skills, and existing
|
|
59
|
+
1. Read all Policies, Research documents, Skills, and existing Initiatives relevant to the initiative topic across all scopes listed in the Policy root `index.md`.
|
|
60
60
|
2. Evaluate Policy metadata before treating any decision as current context. All documents present in the collection are considered active. `valid-from:` determines the convergence date for adoption, `apply-to:` determines whether the decision fits the intended context, and the decision text defines any remaining boundaries.
|
|
61
|
-
3. Identify Decisions that this
|
|
61
|
+
3. Identify Decisions that this initiative implements, Research that informs the planning, and any existing Initiatives that overlap.
|
|
62
62
|
4. Collect artifact IDs and file paths for cross-references.
|
|
63
63
|
|
|
64
|
-
### Phase 5: Write the
|
|
64
|
+
### Phase 5: Write the Initiative
|
|
65
65
|
|
|
66
|
-
Use the mandatory template from `007-
|
|
66
|
+
Use the mandatory template from `007-initiative-standards`:
|
|
67
67
|
|
|
68
68
|
```markdown
|
|
69
|
-
# [scope]-[type]-
|
|
69
|
+
# [scope]-[type]-initiative-[number]: [Short Title]
|
|
70
70
|
|
|
71
71
|
## Executive Summary
|
|
72
72
|
|
|
@@ -74,7 +74,7 @@ Use the mandatory template from `007-plan-standards`:
|
|
|
74
74
|
|
|
75
75
|
## Context and Problem Statement
|
|
76
76
|
|
|
77
|
-
[Required. Why are we executing this
|
|
77
|
+
[Required. Why are we executing this initiative? What is the impact? Who is impacted? Under 200 words.]
|
|
78
78
|
|
|
79
79
|
## Proposed Solution
|
|
80
80
|
|
|
@@ -114,22 +114,22 @@ Expected end date: YYYY-MM-DD
|
|
|
114
114
|
Rules to apply while drafting:
|
|
115
115
|
|
|
116
116
|
- Focus on the problem, solution, and approach. Avoid bloating with generic project management content.
|
|
117
|
-
- Link to Decisions the
|
|
118
|
-
- The Expected end date must be in ISO format (YYYY-MM-DD), placed inside the `## Proposed Solution` section, and should not be more than 2 years from the
|
|
119
|
-
- If the
|
|
120
|
-
- Remember that this
|
|
117
|
+
- Link to Decisions the initiative implements, Research that informs it, and Skills that guide execution.
|
|
118
|
+
- The Expected end date must be in ISO format (YYYY-MM-DD), placed inside the `## Proposed Solution` section, and should not be more than 2 years from the initiative creation date.
|
|
119
|
+
- If the initiative scope is too large for 2 years, break it into multiple initiatives.
|
|
120
|
+
- Remember that this initiative must be deleted after full implementation. Write it with that ephemeral nature in mind.
|
|
121
121
|
- For diagrams and non-Markdown assets, follow `_core-adr-policy-020`: prefer plain Markdown tables/lists first, then ASCII art for very simple cases, then Mermaid.js for complex diagrams, then draw.io when Mermaid is insufficient — save as Editable Vector (File → Save As → Editable Vector) and store as `.svg` in the sibling `.assets/` folder.
|
|
122
|
-
- If the
|
|
122
|
+
- If the initiative genuinely needs local images or supporting files, store them in `.xdrs/[scope]/[type]/[subject]/initiatives/.assets/` and link them using a same-folder relative path (e.g., `.assets/image.png`).
|
|
123
123
|
- Use relative paths for all links; never use absolute paths starting with `/`.
|
|
124
124
|
- Use lowercase file names. Never use emojis.
|
|
125
125
|
|
|
126
126
|
### Phase 6: Place and Register
|
|
127
127
|
|
|
128
|
-
1. Save the file at `.xdrs/[scope]/[type]/[subject]/
|
|
129
|
-
2. Add a link to the
|
|
130
|
-
3. Add back-references in the Policies, Research documents, and Skills that the
|
|
131
|
-
4. Evaluate whether the scope index at `.xdrs/[scope]/index.md` should be updated to reflect the new
|
|
132
|
-
5. **Meta-policy compliance**: Run the shared module at `.xdrs/_core/adrs/principles/skills/.assets/meta-policy-compliance.md`. Substitute `[DOCUMENT]` with `
|
|
128
|
+
1. Save the file at `.xdrs/[scope]/[type]/[subject]/initiatives/[number]-[short-title].md`.
|
|
129
|
+
2. Add a link to the initiative in the canonical index for that scope+type (`.xdrs/[scope]/[type]/index.md`).
|
|
130
|
+
3. Add back-references in the Policies, Research documents, and Skills that the initiative relates to, under their `## References` section.
|
|
131
|
+
4. Evaluate whether the scope index at `.xdrs/[scope]/index.md` should be updated to reflect the new initiative. If the scope index does not exist, create it following article standards and the scope index rules in `_core-adr-policy-001`.
|
|
132
|
+
5. **Meta-policy compliance**: Run the shared module at `.xdrs/_core/adrs/principles/skills/.assets/meta-policy-compliance.md`. Substitute `[DOCUMENT]` with `initiative`.
|
|
133
133
|
|
|
134
134
|
### Phase 7: Verify with Lint
|
|
135
135
|
|
|
@@ -140,29 +140,29 @@ Follow the lint verification steps in `.xdrs/_core/adrs/principles/skills/.asset
|
|
|
140
140
|
**Input:** "Create a plan for migrating our API to v2."
|
|
141
141
|
|
|
142
142
|
**Expected actions:**
|
|
143
|
-
1. Read `007-
|
|
143
|
+
1. Read `007-initiative-standards.md`.
|
|
144
144
|
2. Topic: API v2 migration. Scope: `_local`.
|
|
145
145
|
3. Type: `adrs` (architectural). Subject: `application`.
|
|
146
146
|
4. Research related Policies about API design and integration patterns.
|
|
147
|
-
5. Draft the
|
|
147
|
+
5. Draft the initiative with clear problem, solution, milestones, and expected end date.
|
|
148
148
|
6. Save, register in canonical index, and lint.
|
|
149
149
|
|
|
150
150
|
## Edge Cases
|
|
151
151
|
|
|
152
|
-
- If
|
|
153
|
-
- If
|
|
154
|
-
- If
|
|
155
|
-
- If the user asks for
|
|
152
|
+
- If an initiative is too large (more than 2 years), split it into multiple smaller initiatives. Each initiative should be independently actionable and produce its own deliverables.
|
|
153
|
+
- If an initiative spawns sub-initiatives during implementation, each sub-initiative is a separate initiative document in the appropriate subject folder. Link them in the References section.
|
|
154
|
+
- If an initiative is fully implemented, delete it and confirm that all lasting outputs (Decisions, Skills, Articles, etc.) are properly linked and indexed.
|
|
155
|
+
- If the user asks for an initiative that is really just a decision, guide them to create a Policy instead.
|
|
156
156
|
|
|
157
157
|
## References
|
|
158
158
|
|
|
159
159
|
- [_core-adr-policy-001 - XDRS standards](../../001-xdrs-standards.md)
|
|
160
|
-
- [_core-adr-policy-007 -
|
|
160
|
+
- [_core-adr-policy-007 - Initiative standards](../../007-initiative-standards.md)
|
|
161
161
|
- [_core-adr-policy-002 - Policy standards](../../002-policy-standards.md)
|
|
162
162
|
|
|
163
163
|
## Constraints
|
|
164
164
|
|
|
165
|
-
- MUST follow the
|
|
165
|
+
- MUST follow the initiative template and section-goal rules from `007-initiative-standards`.
|
|
166
166
|
- MUST consult `001-xdrs-standards` as the canonical source for every core element definition, especially type, scope, subject, numbering, naming, and placement.
|
|
167
167
|
- MUST keep scope `_local` unless the user explicitly states otherwise.
|
|
168
168
|
- MUST NOT create documents in external scopes (scopes whose files appear in the workspace root `.filedist.lock`).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 007-write-presentation
|
|
3
3
|
description: >
|
|
4
|
-
Creates a Marp slide presentation for an existing XDRS document (policy, research, article, or
|
|
4
|
+
Creates a Marp slide presentation for an existing XDRS document (policy, research, article, or initiative).
|
|
5
5
|
Activate this skill when the user asks to create slides, a presentation, or a slide deck for an XDRS document.
|
|
6
6
|
metadata:
|
|
7
7
|
author: flaviostutz
|
|
@@ -22,7 +22,7 @@ Identify the target scope from the parent document's path or the user's request;
|
|
|
22
22
|
|
|
23
23
|
1. Read `.xdrs/_core/adrs/principles/009-presentation-standards.md` in full to internalize all presentation rules.
|
|
24
24
|
2. Read `.xdrs/_core/adrs/principles/001-xdrs-standards.md` for `.assets/` placement rules and general framework structure.
|
|
25
|
-
3. Identify the parent document (policy, research, article, or
|
|
25
|
+
3. Identify the parent document (policy, research, article, or initiative) that the slides will support. The parent document must already exist. If no parent document exists, inform the user that slides cannot be standalone and suggest creating the parent document first.
|
|
26
26
|
4. If the user wants slides covering content from multiple documents, check whether an article already exists that synthesizes those documents. If not, suggest creating an article first (using the 004-write-article skill) and then creating slides for that article.
|
|
27
27
|
|
|
28
28
|
### Phase 2: Define the Presentation Scope
|
|
@@ -120,7 +120,7 @@ Rules:
|
|
|
120
120
|
- Articles: `[xdrs-root]/[scope]/[type]/[subject]/articles/.assets/[slide-file].md`
|
|
121
121
|
- Research: `[xdrs-root]/[scope]/[type]/[subject]/researches/.assets/[slide-file].md`
|
|
122
122
|
- Skills: `[xdrs-root]/[scope]/[type]/[subject]/skills/[number]-[skill-name]/.assets/[slide-file].md`
|
|
123
|
-
-
|
|
123
|
+
- Initiatives: `[xdrs-root]/[scope]/[type]/[subject]/initiatives/.assets/[slide-file].md`
|
|
124
124
|
2. Update the parent document with the link to the slide file.
|
|
125
125
|
3. Verify that the slide file name is <= 64 characters and lowercase.
|
|
126
126
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 008-write-xdrs-doc
|
|
3
3
|
description: >
|
|
4
|
-
Use when writing documents such as decisions, policies, skills, procedures, research,
|
|
4
|
+
Use when writing documents such as decisions, policies, skills, procedures, research, initiatives, articles, or presentations.
|
|
5
5
|
Activate this skill when the user asks to create or write any XDRS element.
|
|
6
6
|
metadata:
|
|
7
7
|
author: flaviostutz
|
|
@@ -20,11 +20,11 @@ Routes the request to the appropriate XDRS authoring skill based on the type of
|
|
|
20
20
|
- **Policy** (ADR/BDR/EDR) — user wants to record a decision, rule, standard, guideline, or architectural/business/engineering policy
|
|
21
21
|
- **Skill** — user wants to create an agent skill, SKILL.md, or reusable workflow instruction
|
|
22
22
|
- **Research** — user wants to produce a study, investigation, evidence-based analysis, or IMRAD-style document
|
|
23
|
-
- **
|
|
23
|
+
- **Initiative** — user wants to create an execution plan, project plan, roadmap, or milestone document
|
|
24
24
|
- **Article** — user wants to create a guide, overview, or synthetic document that combines multiple XDRS elements
|
|
25
25
|
- **Presentation** — user wants to create slides or a Marp deck for an existing XDRS document
|
|
26
26
|
|
|
27
|
-
2. If the type cannot be confidently inferred, ask the user one focused question: *"What type of XDRS document do you want to create — Policy, Skill, Research,
|
|
27
|
+
2. If the type cannot be confidently inferred, ask the user one focused question: *"What type of XDRS document do you want to create — Policy, Skill, Research, Initiative, Article, or Presentation?"* Wait for the answer before proceeding.
|
|
28
28
|
|
|
29
29
|
### Phase 1.5: Prerequisites Gate — MUST complete before writing
|
|
30
30
|
|
|
@@ -40,9 +40,19 @@ Read the full content of the skill file for the inferred type, then follow all i
|
|
|
40
40
|
| Skill | `.xdrs/_core/adrs/principles/skills/003-write-skill/SKILL.md` |
|
|
41
41
|
| Article | `.xdrs/_core/adrs/principles/skills/004-write-article/SKILL.md` |
|
|
42
42
|
| Research | `.xdrs/_core/adrs/principles/skills/005-write-research/SKILL.md` |
|
|
43
|
-
|
|
|
43
|
+
| Initiative | `.xdrs/_core/adrs/principles/skills/006-write-initiative/SKILL.md` |
|
|
44
44
|
| Presentation | `.xdrs/_core/adrs/principles/skills/007-write-presentation/SKILL.md` |
|
|
45
45
|
|
|
46
|
+
### Phase 3: Validate Mermaid Diagrams
|
|
47
|
+
|
|
48
|
+
1. After the delegated skill completes, scan all files written in this session for fenced ` ```mermaid ` code blocks.
|
|
49
|
+
2. For each diagram found, extract the content to a temporary `.mmd` file and run:
|
|
50
|
+
```bash
|
|
51
|
+
npx -y @mermaid-js/mermaid-cli -i <tempfile>.mmd --quiet 2>&1
|
|
52
|
+
```
|
|
53
|
+
3. For each diagram that fails validation, report the error to the user and ask them to correct the diagram before saving.
|
|
54
|
+
4. Delete all temporary files created in this step.
|
|
55
|
+
|
|
46
56
|
### Constraints
|
|
47
57
|
|
|
48
58
|
- MUST read the full target SKILL.md before proceeding — do not rely on summaries or prior knowledge of the target skill.
|
package/.xdrs/_core/index.md
CHANGED
|
@@ -10,13 +10,13 @@ valid-from: 2025-01-01
|
|
|
10
10
|
|
|
11
11
|
## Overview
|
|
12
12
|
|
|
13
|
-
The `_core` scope defines the XDRS framework itself: how policies, skills, research, articles, and
|
|
13
|
+
The `_core` scope defines the XDRS (eXtensible Decision Record System) framework itself: how policies, skills, research, articles, and initiatives are structured, written, versioned, and discovered. This scope is aimed at engineers, architects, and business analysts who build or consume xdrs-based documentation.
|
|
14
14
|
|
|
15
15
|
## Content
|
|
16
16
|
|
|
17
17
|
### What this scope covers
|
|
18
18
|
|
|
19
|
-
The `_core` scope is the foundation that all other scopes inherit from. It establishes the rules and conventions that every Policy document, skill, article, research, and
|
|
19
|
+
The `_core` scope is the foundation that all other scopes inherit from. It establishes the rules and conventions that every Policy document, skill, article, research, and initiative must follow regardless of which team, product, or domain produces them.
|
|
20
20
|
|
|
21
21
|
If you are evaluating whether to adopt XDRS, setting up a new XDRS project, or extending the framework with your own scopes, start here.
|
|
22
22
|
|
|
@@ -35,7 +35,7 @@ Each artifact type has its own writing standard:
|
|
|
35
35
|
- **Skills** follow [_core-adr-policy-003](adrs/principles/003-skill-standards.md), using the agentskills format so they work for both humans and AI agents on an automation gradient from fully manual to fully automated.
|
|
36
36
|
- **Articles** follow [_core-adr-policy-004](adrs/principles/004-article-standards.md), providing synthetic views that combine and link multiple Policies, research, and skills without replacing them as the source of truth.
|
|
37
37
|
- **Research** follows [_core-adr-policy-006](adrs/principles/006-research-standards.md), using an IMRAD-based structure for studies that back decisions with reproducible evidence.
|
|
38
|
-
- **
|
|
38
|
+
- **Initiatives** follow [_core-adr-policy-007](adrs/principles/007-initiative-standards.md), capturing ephemeral execution initiatives with problem context, proposed solutions, milestones, and deliverables that are deleted after implementation.
|
|
39
39
|
|
|
40
40
|
### Versioning and distribution
|
|
41
41
|
|
|
@@ -68,7 +68,7 @@ The `_core` scope ships with seven skills that automate the most common framewor
|
|
|
68
68
|
- **003-write-skill** guides creation of a new skill package
|
|
69
69
|
- **004-write-article** guides creation of a new article
|
|
70
70
|
- **005-write-research** guides creation of a new research document
|
|
71
|
-
- **006-write-
|
|
71
|
+
- **006-write-initiative** guides creation of a new execution initiative
|
|
72
72
|
- **007-write-presentation** guides creation of Marp slide presentations
|
|
73
73
|
|
|
74
74
|
### Getting started
|
package/.xdrs/index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# XDRS Index
|
|
2
2
|
|
|
3
|
-
This index points to all type- and scope-specific XDRS indexes. It covers Architectural (ADR), Business (BDR), and Engineering (EDR) contents. Each scope has its own canonical index that lists all Policies, Skills, Articles and
|
|
3
|
+
This index points to all type- and scope-specific XDRS (eXtensible Decision Record System) indexes. It covers Architectural (ADR), Business (BDR), and Engineering (EDR) contents. Each scope has its own canonical index that lists all Policies, Skills, Articles and Initiatives for that scope, organized by subject.
|
|
4
4
|
|
|
5
5
|
## Scope Indexes
|
|
6
6
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# xdrs-core
|
|
2
2
|
|
|
3
|
-
XDRS
|
|
3
|
+
**XDRS — eXtensible Decision Record System**
|
|
4
|
+
|
|
5
|
+
XDRS is a framework to structure, compile and distribute Architectural (ADR), Business (BDR), and Engineering (EDR) decision records contents so that AI agents and humans can reliably find and use them with hierarchical scopes and controlled rollout in the format of distributable versioned packages. Decision Records are decomposed into Research (why), Policies (what), Skills (how), Initiative (when) and Articles (views) with a well structured index structure and the definition of hierarchical scopes.
|
|
4
6
|
|
|
5
7
|
After preparation those elements can be downloaded anywhere and used to compose xdrs corpus, which can be used as a context source for AI agents, web site publishing, RAG applications etc.
|
|
6
8
|
|
|
@@ -21,7 +23,7 @@ This project defines a standard for organizing XDRS that satisfies the following
|
|
|
21
23
|
A traditional Decision Record normally combines several concerns in the same document:
|
|
22
24
|
- A **reason** (why the decision was made, options considered, evidence gathered)
|
|
23
25
|
- A **policy** (rules, core decision, what must be followed)
|
|
24
|
-
-
|
|
26
|
+
- An **initiative** (consequences, implementation approach, how to roll out the decision)
|
|
25
27
|
- A **how-to** (step-by-step procedure for executing under the decision)
|
|
26
28
|
- A **view** (overview of the topic connecting related decisions together)
|
|
27
29
|
|
|
@@ -31,7 +33,7 @@ The XDRS framework separates these concerns into different document types, each
|
|
|
31
33
|
- **Research** — Exploratory documents that capture the problem being investigated, constraints or requirements, findings, and option tradeoffs that back a decision during its lifecycle. One research document may inform multiple downstream decisions, but it is not a replacement for the Policy.
|
|
32
34
|
- **Skills** — Step-by-step procedural guides that can be followed by humans, AI agents, or both. Skills are task-based artifacts with a concrete outcome and should include enough detail to verify the task was completed correctly. A skill may start as a fully manual procedure and evolve toward partial or full AI automation over time.
|
|
33
35
|
- **Articles** — Synthetic explanatory texts that combine information from multiple Policies, Research documents, and Skills around a specific topic or audience. They never replace Policies as source of truth.
|
|
34
|
-
- **
|
|
36
|
+
- **Initiatives** — Ephemeral execution documents that describe a problem, proposed solution, and the approach and activities needed to solve it. Initiatives have a clear start and end and must be deleted after full implementation. Lasting outputs are captured as Policies, Skills, Articles, or other artifacts.
|
|
35
37
|
|
|
36
38
|
The compilation process of a raw Decision Record is to distribute it into those different documents and create links between them. You can also use the framework standalone, generating these elements individually directly during the writing process without starting from a raw Decision Record.
|
|
37
39
|
|
|
@@ -167,7 +169,7 @@ This is especially important for BDRs: because business rules govern decisions t
|
|
|
167
169
|
articles/ # optional synthetic views over Policies, Research, and Skills
|
|
168
170
|
[number]-[short-title].md
|
|
169
171
|
.assets/
|
|
170
|
-
|
|
172
|
+
initiatives/ # optional ephemeral execution initiatives
|
|
171
173
|
[number]-[short-title].md
|
|
172
174
|
.assets/
|
|
173
175
|
```
|
|
@@ -180,7 +182,7 @@ Document types:
|
|
|
180
182
|
- **Research** - Exploratory support material used while evaluating or updating a decision. Research captures constraints, findings, options, and proposal tradeoffs, but it is not the source of truth.
|
|
181
183
|
- **Skills** - Step-by-step procedural guides that can be followed by humans, AI agents, or both. Must comply with Policies, but add the execution detail they lack. Skills are not mandatory by themselves unless referenced by a Policy or another policy artifact. A skill may start as a fully manual human procedure and evolve incrementally toward partial or full AI automation without being restructured. Co-located with the Policies they implement inside `skills/` sub-directories.
|
|
182
184
|
- **Articles** - Synthetic views that explain concepts or combine information from multiple Policies, Research documents, and Skills into a coherent text for a specific topic or audience. Articles are not the source of truth; Policies take precedence when there is a conflict. Useful as navigational indexes that link related artifacts around a specific aspect.
|
|
183
|
-
- **
|
|
185
|
+
- **Initiatives** - Ephemeral execution documents that describe a problem, proposed solution, and the approach and activities needed to solve it. Initiatives have a clear start and end and must be deleted after full implementation. Lasting outputs are captured as Policies, Skills, Articles, or other artifacts. Co-located with Policies inside `initiatives/` sub-directories.
|
|
184
186
|
|
|
185
187
|
See [.xdrs/index.md](.xdrs/index.md) for the full list of active policies.
|
|
186
188
|
|
|
@@ -232,12 +234,12 @@ The `lint` command reads `./.xdrs/**` from the given workspace path and checks c
|
|
|
232
234
|
- skill numbering uniqueness per `scope/type/subject/skills`
|
|
233
235
|
- article numbering uniqueness per `scope/type/subject/articles`
|
|
234
236
|
- research numbering uniqueness per `scope/type/subject/researches`
|
|
235
|
-
-
|
|
236
|
-
-
|
|
237
|
+
- initiative numbering uniqueness per `scope/type/subject/initiatives`
|
|
238
|
+
- initiative `Expected end date:` field presence and ISO date format
|
|
237
239
|
- canonical index presence and link consistency
|
|
238
240
|
- root index coverage for all discovered canonical indexes
|
|
239
241
|
- Policy metadata section placement and `valid-from` / `apply-to` field format
|
|
240
|
-
- local markdown links between Policy documents, skills, articles, researches, and
|
|
242
|
+
- local markdown links between Policy documents, skills, articles, researches, and initiatives (excluding fenced code blocks)
|
|
241
243
|
- local image and `.assets/` links resolving inside the sibling `.assets/` folder for each document
|
|
242
244
|
|
|
243
245
|
Examples:
|
package/lib/lint.js
CHANGED
|
@@ -21,7 +21,7 @@ const RESERVED_SCOPES = new Set(['_core', '_local']);
|
|
|
21
21
|
const NUMBERED_FILE_RE = /^(\d{3,})-([a-z0-9-]+)\.md$/;
|
|
22
22
|
const NUMBERED_DIR_RE = /^(\d{3,})-([a-z0-9-]+)$/;
|
|
23
23
|
const REQUIRED_ROOT_INDEX_TEXT = 'XDRS scopes listed last override the ones listed first';
|
|
24
|
-
const SUBJECT_ARTIFACT_DIRS = new Set(['skills', 'articles', 'researches', '
|
|
24
|
+
const SUBJECT_ARTIFACT_DIRS = new Set(['skills', 'articles', 'researches', 'initiatives']);
|
|
25
25
|
const RESOURCE_DIR_NAME = '.assets';
|
|
26
26
|
const SKILL_PACKAGE_OPTIONAL_DIRS = new Set(['scripts', 'references', RESOURCE_DIR_NAME]);
|
|
27
27
|
|
|
@@ -69,7 +69,7 @@ const DOC_TYPE_POLICY_REF = {
|
|
|
69
69
|
Skill: '[_core-adr-policy-003]',
|
|
70
70
|
Article: '[_core-adr-policy-004]',
|
|
71
71
|
Research: '[_core-adr-policy-006]',
|
|
72
|
-
|
|
72
|
+
Initiative: '[_core-adr-policy-007]',
|
|
73
73
|
Slide: '[_core-adr-policy-009]',
|
|
74
74
|
};
|
|
75
75
|
|
|
@@ -854,8 +854,8 @@ function lintSubjectDirectory(xdrsRoot, scopeName, typeName, subjectName, xdrsNu
|
|
|
854
854
|
artifacts.push(...lintResearchDirectory(xdrsRoot, scopeName, typeName, subjectName, entryPath, errors, externalScopes));
|
|
855
855
|
continue;
|
|
856
856
|
}
|
|
857
|
-
if (entry.name === '
|
|
858
|
-
artifacts.push(...
|
|
857
|
+
if (entry.name === 'initiatives') {
|
|
858
|
+
artifacts.push(...lintInitiativesDirectory(xdrsRoot, scopeName, typeName, subjectName, entryPath, errors, externalScopes));
|
|
859
859
|
continue;
|
|
860
860
|
}
|
|
861
861
|
|
|
@@ -1217,57 +1217,57 @@ function lintResearchDirectory(xdrsRoot, scopeName, typeName, subjectName, resea
|
|
|
1217
1217
|
return artifacts;
|
|
1218
1218
|
}
|
|
1219
1219
|
|
|
1220
|
-
function
|
|
1220
|
+
function lintInitiativesDirectory(xdrsRoot, scopeName, typeName, subjectName, initiativesPath, errors, externalScopes = new Set()) {
|
|
1221
1221
|
const artifacts = [];
|
|
1222
|
-
const
|
|
1223
|
-
const entries = safeReadDir(
|
|
1222
|
+
const initiativeNumbers = new Map();
|
|
1223
|
+
const entries = safeReadDir(initiativesPath, errors, `read initiatives directory ${scopeName}/${typeName}/${subjectName}/initiatives`);
|
|
1224
1224
|
|
|
1225
1225
|
for (const entry of entries) {
|
|
1226
|
-
const entryPath = path.join(
|
|
1226
|
+
const entryPath = path.join(initiativesPath, entry.name);
|
|
1227
1227
|
if (entry.isDirectory() && entry.name === RESOURCE_DIR_NAME) {
|
|
1228
1228
|
continue;
|
|
1229
1229
|
}
|
|
1230
1230
|
|
|
1231
1231
|
if (!entry.isFile()) {
|
|
1232
|
-
errors.push(`Unexpected directory in
|
|
1232
|
+
errors.push(`Unexpected directory in initiatives folder: ${toDisplayPath(entryPath)} [_core-adr-policy-007]`);
|
|
1233
1233
|
continue;
|
|
1234
1234
|
}
|
|
1235
1235
|
|
|
1236
1236
|
const match = entry.name.match(NUMBERED_FILE_RE);
|
|
1237
1237
|
if (!match) {
|
|
1238
|
-
errors.push(`Invalid
|
|
1238
|
+
errors.push(`Invalid initiative file name: ${toDisplayPath(entryPath)} [_core-adr-policy-007]`);
|
|
1239
1239
|
continue;
|
|
1240
1240
|
}
|
|
1241
1241
|
|
|
1242
1242
|
artifacts.push(entryPath);
|
|
1243
1243
|
|
|
1244
1244
|
const number = match[1];
|
|
1245
|
-
const previous =
|
|
1245
|
+
const previous = initiativeNumbers.get(number);
|
|
1246
1246
|
if (previous) {
|
|
1247
|
-
errors.push(`Duplicate
|
|
1247
|
+
errors.push(`Duplicate initiative number ${number} in ${scopeName}/${typeName}/${subjectName}/initiatives: ${toDisplayPath(previous)} and ${toDisplayPath(entryPath)} [_core-adr-policy-007]`);
|
|
1248
1248
|
} else {
|
|
1249
|
-
|
|
1249
|
+
initiativeNumbers.set(number, entryPath);
|
|
1250
1250
|
}
|
|
1251
1251
|
|
|
1252
1252
|
if (entry.name !== entry.name.toLowerCase()) {
|
|
1253
|
-
errors.push(`
|
|
1253
|
+
errors.push(`Initiative file name must be lowercase: ${toDisplayPath(entryPath)} [_core-adr-policy-007]`);
|
|
1254
1254
|
}
|
|
1255
1255
|
|
|
1256
1256
|
const content = fs.readFileSync(entryPath, 'utf8');
|
|
1257
1257
|
const typeId = TYPE_TO_ID[typeName].split('-')[0]; // 'adr', 'bdr', or 'edr'
|
|
1258
|
-
const expectedHeader = `# ${scopeName}-${typeId}-
|
|
1258
|
+
const expectedHeader = `# ${scopeName}-${typeId}-initiative-${number}:`;
|
|
1259
1259
|
const firstLine = firstNonEmptyLine(content);
|
|
1260
1260
|
if (!firstLine.startsWith(expectedHeader)) {
|
|
1261
|
-
errors.push(`
|
|
1261
|
+
errors.push(`Initiative title must start with "${expectedHeader}": ${toDisplayPath(entryPath)} [_core-adr-policy-007]`);
|
|
1262
1262
|
}
|
|
1263
1263
|
|
|
1264
|
-
lintRequiredSections(content, entryPath,
|
|
1265
|
-
|
|
1266
|
-
lintNoEmojis(content, entryPath, '
|
|
1264
|
+
lintRequiredSections(content, entryPath, INITIATIVE_REQUIRED_SECTIONS, 'Initiative', errors);
|
|
1265
|
+
lintInitiativeExpectedEndDate(content, entryPath, errors);
|
|
1266
|
+
lintNoEmojis(content, entryPath, 'Initiative', errors);
|
|
1267
1267
|
lintDocumentLinks(entryPath, xdrsRoot, scopeName, errors, externalScopes);
|
|
1268
1268
|
}
|
|
1269
1269
|
|
|
1270
|
-
lintOrphanAssets(path.join(
|
|
1270
|
+
lintOrphanAssets(path.join(initiativesPath, RESOURCE_DIR_NAME), artifacts, xdrsRoot, errors);
|
|
1271
1271
|
|
|
1272
1272
|
return artifacts;
|
|
1273
1273
|
}
|
|
@@ -1355,7 +1355,7 @@ function lintResearchIntroductionQuestion(content, filePath, errors) {
|
|
|
1355
1355
|
const XDRS_REQUIRED_SECTIONS = ['## Context and Problem Statement', '## Decision Outcome'];
|
|
1356
1356
|
const ARTICLE_REQUIRED_SECTIONS = ['## Overview', '## Content', '## References'];
|
|
1357
1357
|
const RESEARCH_REQUIRED_SECTIONS = ['## Abstract', '## Introduction', '## Methods', '## Results', '## Discussion', '## Conclusion', '## References'];
|
|
1358
|
-
const
|
|
1358
|
+
const INITIATIVE_REQUIRED_SECTIONS = ['## Executive Summary', '## Context and Problem Statement', '## Proposed Solution'];
|
|
1359
1359
|
const SKILL_REQUIRED_SECTIONS = ['## Overview', '## Instructions'];
|
|
1360
1360
|
|
|
1361
1361
|
function lintRequiredSections(content, filePath, requiredSections, docType, errors) {
|
|
@@ -1368,23 +1368,23 @@ function lintRequiredSections(content, filePath, requiredSections, docType, erro
|
|
|
1368
1368
|
}
|
|
1369
1369
|
}
|
|
1370
1370
|
|
|
1371
|
-
function
|
|
1371
|
+
function lintInitiativeExpectedEndDate(content, filePath, errors) {
|
|
1372
1372
|
const lines = content.split(/\r?\n/);
|
|
1373
1373
|
const ignoredLines = findIgnoredMarkdownLines(lines);
|
|
1374
1374
|
const expectedEndDateLines = findFieldLines(lines, ignoredLines, 'Expected end date:');
|
|
1375
1375
|
|
|
1376
1376
|
if (expectedEndDateLines.length === 0) {
|
|
1377
|
-
errors.push(`
|
|
1377
|
+
errors.push(`Initiative must include an Expected end date: field: ${toDisplayPath(filePath)} [_core-adr-policy-007]`);
|
|
1378
1378
|
return;
|
|
1379
1379
|
}
|
|
1380
1380
|
|
|
1381
1381
|
if (expectedEndDateLines.length > 1) {
|
|
1382
|
-
errors.push(`
|
|
1382
|
+
errors.push(`Initiative must not repeat Expected end date: ${toDisplayPath(filePath)} [_core-adr-policy-007]`);
|
|
1383
1383
|
}
|
|
1384
1384
|
|
|
1385
1385
|
const value = lines[expectedEndDateLines[0]].slice('Expected end date:'.length).trim().replace(/\.$/, '');
|
|
1386
1386
|
if (!isIsoDate(value)) {
|
|
1387
|
-
errors.push(`
|
|
1387
|
+
errors.push(`Initiative Expected end date: must be a valid ISO date in YYYY-MM-DD format: ${toDisplayPath(filePath)} [_core-adr-policy-007]`);
|
|
1388
1388
|
}
|
|
1389
1389
|
}
|
|
1390
1390
|
|