xdrs-core 0.36.1 → 0.37.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/principles/001-xdrs-core.md +29 -21
- package/.xdrs/_core/adrs/principles/002-policy-standards.md +16 -15
- package/.xdrs/_core/adrs/principles/003-skill-standards.md +11 -11
- package/.xdrs/_core/adrs/principles/004-article-standards.md +11 -11
- package/.xdrs/_core/adrs/principles/005-semantic-versioning-for-xdrs-packages.md +2 -2
- package/.xdrs/_core/adrs/principles/006-research-standards.md +3 -3
- package/.xdrs/_core/adrs/principles/007-plan-standards.md +7 -7
- package/.xdrs/_core/adrs/principles/008-xdr-standards-structured.md +12 -12
- package/.xdrs/_core/adrs/principles/009-presentation-standards.md +15 -15
- package/.xdrs/_core/adrs/principles/010-scope-governance.md +3 -3
- package/.xdrs/_core/adrs/principles/011-core-scope-type.md +2 -2
- package/.xdrs/_core/adrs/principles/012-reference-scope-type.md +2 -2
- package/.xdrs/_core/adrs/principles/014-standard-scope-type.md +1 -1
- package/.xdrs/_core/adrs/principles/015-local-scope-type.md +3 -3
- package/.xdrs/_core/adrs/principles/skills/001-review/SKILL.md +1 -0
- package/.xdrs/_core/adrs/principles/skills/002-write-policy/SKILL.md +1 -0
- package/package.json +1 -1
|
@@ -30,17 +30,25 @@ Policies can be of different kinds, depending on the nature of the decision:
|
|
|
30
30
|
|
|
31
31
|
#### General framework standards
|
|
32
32
|
|
|
33
|
-
- The main document type in the collection of XDRS is the Policy document, which contains the core of a decision, contraints, rules and what
|
|
34
|
-
- All documents in the framework
|
|
33
|
+
- The main document type in the collection of XDRS is the Policy document, which contains the core of a decision, contraints, rules and what SHOULD be followed. Other documents are normally related to this policy and MUST NOT go against its contents.
|
|
34
|
+
- All documents in the framework SHOULD be removed when they are no longer necessary. The latest version of the collection MUST represent the active set of documents. Historical versions are available via versioned packages or git history. There is no status field on documents; if a document is present, it is considered active and valid. This keeps the document base clean and avoids confusion about which documents are current. REJECT any indication in the Decisions that contradicts this rule to avoid confusion and complexity.
|
|
35
35
|
- Make it clear if an instruction is mandatory or advisory.
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
36
|
+
- Policy documents MUST use BCP 14 (RFC 2119 / RFC 8174) keywords when expressing normative requirements
|
|
37
|
+
- Use **MUST** / **MUST NOT** for absolute requirements or prohibitions.
|
|
38
|
+
- Use **SHOULD** / **SHOULD NOT** for strong recommendations where valid exceptions exist but MUST be justified.
|
|
39
|
+
- Use **MAY** / **OPTIONAL** for truly optional choices.
|
|
40
|
+
- Avoid overusing normative keywords; reserve them for rules that genuinely require unambiguous compliance or optionality.
|
|
41
|
+
- Uppercase statements are ALWAYS enforced.
|
|
42
|
+
- When those words are in lowercase, they have the normal meanings in english, but are not necessarily enforced. Use only when not defining normative statements in a statement. e.g.: "This policy defines when you should use something"
|
|
43
|
+
- Expressions like "must", "always", "never", "required", "mandatory" SHOULD be written in the MUST/MUST NOT format
|
|
44
|
+
- Expressions like: "should", "recommended", "advised", "preferably" SHOULD be written in the SHOULD/SHOULD NOT format
|
|
45
|
+
- Expressions like: "possibly", "optionally" SHOULD be written in MAY/OPTIONAL format
|
|
46
|
+
- The XDRS root folder is the folder that contains the root `index.md`. The default root folder name is `.xdrs/`. Any folder name is valid as long as it contains an `index.md`. When `.xdrs/` is used, tools and agents discover it automatically by looking for `.xdrs/index.md` relative to the workspace root. When a different folder name is used, it MUST be passed explicitly to tools (e.g., `xdrs-core lint my-decisions/`).
|
|
47
|
+
- MUST use the following folder structure for Policy documents:
|
|
40
48
|
`[xdrs-root]/[scope]/[type]/[subject]/[number]-[short-title].md`
|
|
41
49
|
where `[xdrs-root]` is the XDRS root folder (default: `.xdrs/`).
|
|
42
|
-
-
|
|
43
|
-
- **Files listed in `.filedist.lock` are external XDRs.** A file whose path appears in the workspace root `.filedist.lock` file was distributed from an external source repository. It
|
|
50
|
+
- MUST ignore symlinks paths. MUST NOT create or update documents inside symlinked folders.
|
|
51
|
+
- **Files listed in `.filedist.lock` are external XDRs.** A file whose path appears in the workspace root `.filedist.lock` file was distributed from an external source repository. It MUST NEVER be modified locally. To change it, submit the change to the source repository and re-extract the updated package. The `.filedist.lock` format is one entry per line: `<relative-path>|<package>|<version>`. A scope is considered external when any of its files appear in `.filedist.lock`, and tools (such as `xdrs-core lint`) will skip external scopes by default. The `.filedist.lock` file can also be used to detect which files changed when bumping an external scope to a newer version: compare the version field in `.filedist.lock` entries before and after the upgrade and diff the affected paths to understand what decisions were added, updated, or removed.
|
|
44
52
|
- Optional supporting artifacts under the same subject:
|
|
45
53
|
- `[xdrs-root]/[scope]/[type]/[subject]/researches/[number]-[short-title].md`
|
|
46
54
|
- `[xdrs-root]/[scope]/[type]/[subject]/skills/[number]-[skill-name]/SKILL.md`
|
|
@@ -71,12 +79,12 @@ Policies can be of different kinds, depending on the nature of the decision:
|
|
|
71
79
|
- `platform` — see [`_core-adr-policy-013`](013-platform-scope-type.md)
|
|
72
80
|
- `standard` — see [`_core-adr-policy-014`](014-standard-scope-type.md)
|
|
73
81
|
- `_local` — see [`_core-adr-policy-015`](015-local-scope-type.md)
|
|
74
|
-
- Scope name suffixes are unlimited and
|
|
82
|
+
- Scope name suffixes are unlimited and MAY be used in any scope type.
|
|
75
83
|
- When writing or generating a new XDRS root `index.md`, use the following default ordering (scopes listed later override earlier ones): `core → reference → platform → standard → _local`. Custom-type scopes SHOULD be placed in the `standard` position.
|
|
76
84
|
- **Scope index frontmatter fields:** Every scope's `index.md` MUST include the following YAML frontmatter. Fields match the Policy frontmatter standard (`_core-adr-policy-002`) in purpose, adjusted for scope-level semantics:
|
|
77
|
-
- `name` (required): The scope identifier,
|
|
85
|
+
- `name` (required): The scope identifier, MUST exactly match the scope directory name (e.g., `myteam`, `cloud-platform-aws`). Used by tools to verify scope identity.
|
|
78
86
|
- `description` (required): Short overview of what this scope covers and who the intended audience is. Used by AI agents for discovery and relevance matching. Max 40 words.
|
|
79
|
-
- `scope-type` (required): Scope classification type.
|
|
87
|
+
- `scope-type` (required): Scope classification type. MUST match a `{scope-type}-scope-type` policy in any `core`-type scope's `principles/` directory. See `_core-adr-policy-010` for the full governance convention and `_core-adr-policy-011`, `012`–`015` for built-in type definitions.
|
|
80
88
|
- `apply-to` (required): Declares in which contexts — teams, systems, codebases, or environments — the decisions in this scope are relevant. Max 30 words.
|
|
81
89
|
- `valid-from` (required): ISO date (YYYY-MM-DD) from which this scope became active.
|
|
82
90
|
- `metadata` (optional): Arbitrary key-value map for additional scope metadata.
|
|
@@ -129,24 +137,24 @@ Policies can be of different kinds, depending on the nature of the decision:
|
|
|
129
137
|
- `governance`: Engineering governance, risk controls, and compliance mechanics.
|
|
130
138
|
- Examples: dependency governance, approval policies, mandatory quality checks.
|
|
131
139
|
- Never use emojis
|
|
132
|
-
- **Links:** Use relative paths for all links;
|
|
140
|
+
- **Links:** Use relative paths for all links; MUST NOT use absolute paths starting with `/`.
|
|
133
141
|
- **Indexes**
|
|
134
|
-
- Every document in the collection (Policies, skills, articles, research, and plans)
|
|
135
|
-
- Keep a canonical type index with all documents of a certain type+scope in `[xdrs-root]/[scope]/[type]/index.md`. The type index
|
|
142
|
+
- Every document in the collection (Policies, skills, articles, research, and plans) MUST be reachable through the index chain: root index → scope index → type index → document. A document that exists on disk but is not linked from its canonical type index is considered an orphan and MUST be added to the index or removed.
|
|
143
|
+
- Keep a canonical type index with all documents of a certain type+scope in `[xdrs-root]/[scope]/[type]/index.md`. The type index MUST link to every Policy, skill, article, research, and plan under that type+scope.
|
|
136
144
|
- Canonical index requirements:
|
|
137
145
|
- Organize XDRS documents by subject for easier navigation
|
|
138
146
|
- Add a short description of what this scope is about (responsibilities, general worries, teams involved, link to discussion process, etc)
|
|
139
147
|
- Add a list of other scope indexes that this scope might be related to (only add scopes that might be overridden). E.g: "business-x-mobileapp" scope could refer to "business-x" and "sensitive-data" scopes in its index list. XDRS in scopes listed last override XDRS in scopes listed first when addressing the same topic.
|
|
140
|
-
- Each XDRS element entry in the index MUST include a short description of its content
|
|
141
|
-
- Outside the scopes, keep a root index in `[xdrs-root]/index.md` that links to each scope index (`[xdrs-root]/[scope]/index.md`). Add the text "XDRS scopes listed last override the ones listed first". The root index
|
|
142
|
-
-
|
|
148
|
+
- Each XDRS element entry in the index MUST include a short description of its content. The description SHOULD use an imperative statement or the question it answers when possible (<15 words). Example: "Use this while planning a new feature", "What communication tone we use with our customers?", "PNPM vs Yarn comparison study"
|
|
149
|
+
- Outside the scopes, keep a root index in `[xdrs-root]/index.md` that links to each scope index (`[xdrs-root]/[scope]/index.md`). Add the text "XDRS scopes listed last override the ones listed first". The root index MUST NOT link directly to type indexes; readers navigate from the scope index to the type indexes. Use the link text pattern `View scope [scope_name]` for each scope link (e.g. `[View scope myteam] linking to (myteam/index.md)`).
|
|
150
|
+
- MUST verify if indexes are up to date after making changes
|
|
143
151
|
- **Scope index**
|
|
144
|
-
- Each scope folder
|
|
152
|
+
- Each scope folder MUST maintain an `index.md` file at `[xdrs-root]/[scope]/index.md`.
|
|
145
153
|
- The scope index is a short article (under 1000 words) that provides an overview of all XDRS contents within that scope. Follow article standards (`_core-adr-policy-004`) when writing this file.
|
|
146
|
-
- The audience for the scope index are engineers, architects, or business analysts who want to check if the scope's contents are useful
|
|
154
|
+
- The audience for the scope index are engineers, architects, or business analysts who want to check if the scope's contents are useful before diving into specific documents. Write a guided summary that helps them decide whether to explore further.
|
|
147
155
|
- Focus on the most relevant content of the scope: what decisions are covered, what problems they address, and how the scope relates to other scopes.
|
|
148
|
-
- At the end of the scope index,
|
|
149
|
-
- Whenever the contents of a scope change (new Policies, skills, articles, research, or plans are added, updated, or removed), evaluate whether the scope index
|
|
156
|
+
- At the end of the scope index, MUST add links to the canonical type indexes (`adrs/index.md`, `bdrs/index.md`, `edrs/index.md`) that exist within the scope.
|
|
157
|
+
- Whenever the contents of a scope change (new Policies, skills, articles, research, or plans are added, updated, or removed), evaluate whether the scope index SHOULD be updated to reflect the newer contents.
|
|
150
158
|
|
|
151
159
|
**Folder structure examples** (using the default `.xdrs/` root):
|
|
152
160
|
- `.xdrs/business-x/edrs/devops/003-required-development-workflow.md`
|
|
@@ -15,20 +15,20 @@ Policy framework elements (types, scopes, subjects, folder structure) are define
|
|
|
15
15
|
|
|
16
16
|
**Structured policies with a mandatory template, applicability metadata, and clear conflict rules**
|
|
17
17
|
|
|
18
|
-
Policy documents are the authoritative source of truth for their scope, type, and subject. They
|
|
18
|
+
Policy documents are the authoritative source of truth for their scope, type, and subject. They MUST be concise, template-compliant, and clear about applicability so that humans and AI agents can reliably determine whether and how to apply any decision.
|
|
19
19
|
|
|
20
20
|
### Details
|
|
21
21
|
|
|
22
|
-
- Policies MUST contain a clear decision about a certain problem or situation. Avoid being too verbose and focus on explaining clearly the context and the decision. Avoid adding contents that are not original. If you have other references that are important to understand the document, add links and references.
|
|
22
|
+
- Policies MUST contain a clear decision about a certain problem or situation. Avoid being too verbose and focus on explaining clearly the context and the decision. Avoid adding contents that are not original. If you have other references that are important to understand the document, add links and references. Sources MUST be cited.
|
|
23
23
|
- Policies are the central artifact of the framework and the authoritative source of truth for their scope, type, and subject.
|
|
24
24
|
- Policy documents MUST include a YAML frontmatter block at the very beginning of the file. The supported fields are:
|
|
25
25
|
|
|
26
26
|
| Field | Required | Constraints |
|
|
27
27
|
|---|---|---|
|
|
28
|
-
| `name` | Yes | 1-64 characters. Lowercase letters, numbers, hyphens, and leading underscores only.
|
|
29
|
-
| `description` | Yes | 1-1024 characters. Describes what this decision is about and when to use it.
|
|
28
|
+
| `name` | Yes | 1-64 characters. Lowercase letters, numbers, hyphens, and leading underscores only. MUST NOT end with a hyphen. MUST NOT contain consecutive hyphens. MUST match the document identifier from the heading: `[scope]-[type]-policy-[number]-[short-title]`. |
|
|
29
|
+
| `description` | Yes | 1-1024 characters. Describes what this decision is about and when to use it. SHOULD include keywords that help agents identify when to apply it. |
|
|
30
30
|
| `apply-to` | Yes | Short description of contexts this decision is applicable to. Keep it under 40 words. Use `All scopes` when the decision applies broadly. Examples: `Only frontend code`, `JavaScript projects`, `All scopes`. |
|
|
31
|
-
| `valid-from` | Yes | ISO date (`YYYY-MM-DD`) indicating from when this decision
|
|
31
|
+
| `valid-from` | Yes | ISO date (`YYYY-MM-DD`) indicating from when this decision MUST be enforced. Before this date it SHOULD be used everywhere possible, but compliance is not enforced during reviews until after this date. Defaults to the date the Policy was created. When updating an existing Policy whose `valid-from` date has already passed, preserve the original date—do not update it to the current date. The historical date shows when the policy was originally enabled and is important for understanding policy evolution. |
|
|
32
32
|
| `license` | No | SPDX license expression (e.g. `MIT`, `Apache-2.0`, `CC-BY-4.0`). Indicates the license under which the document content is shared. If omitted, the license is governed by the repository or package defaults. |
|
|
33
33
|
| `metadata` | No | Arbitrary key-value map for additional properties not defined by this spec. |
|
|
34
34
|
|
|
@@ -52,34 +52,35 @@ Policy documents are the authoritative source of truth for their scope, type, an
|
|
|
52
52
|
author: example-org
|
|
53
53
|
---
|
|
54
54
|
```
|
|
55
|
-
- All documents present in the collection are considered active. There is no status field. When a decision is no longer relevant, valid or active, it
|
|
55
|
+
- All documents present in the collection are considered active. There is no status field. When a decision is no longer relevant, valid or active, it MUST be removed from the collection. Historical versions are available via versioned packages or git history.
|
|
56
56
|
- Before using, enforcing, or citing a Policy as a current rule, humans and AI agents MUST decide whether the decision is applicable for the current case.
|
|
57
57
|
- Check `valid-from:` first. If a date is present and has not yet been reached, the decision SHOULD be adopted for new implementations but is not enforced during reviews.
|
|
58
58
|
- Check `apply-to:` next to determine whether the decision fits the current codebase, system, workflow, or audience.
|
|
59
59
|
- Check the decision context and implementation details last to determine any additional boundaries, exceptions, or qualifiers that metadata alone cannot express.
|
|
60
60
|
- Research documents MAY be added under the same subject to capture the exploration, findings, and proposals that backed a decision. Research is useful during elaboration, discussion, and updates of Policies, but the Policy document remains the source of truth.
|
|
61
|
-
- **Policy Id:** [scope]-[type]-policy-[number] (numbers are scoped per type+scope combination and
|
|
61
|
+
- **Policy Id:** [scope]-[type]-policy-[number] (numbers are scoped per type+scope combination and MUST NOT be reused within that combination; MUST be lowercase)
|
|
62
62
|
- Types in IDs: `adr-policy`, `bdr-policy`, `edr-policy`
|
|
63
|
-
- Define the next number of a Policy by checking what is the highest number present in the type+scope. Don't fill numbering gaps, as they might be old deleted Policies and we
|
|
63
|
+
- Define the next number of a Policy by checking what is the highest number present in the type+scope. Don't fill numbering gaps, as they might be old deleted Policies and we MUST NOT reuse numbers of different documents/decisions. Numbering gaps are expected.
|
|
64
64
|
- Policies MUST be concise and reference other Policies to avoid duplication.
|
|
65
65
|
- The `### Details` section SHOULD state relevant boundaries or exceptions and what a reader should do or avoid in common cases. Use the frontmatter fields `apply-to` and `valid-from` as the first-pass filter for applicability, then keep nuanced boundaries in the decision text.
|
|
66
66
|
- Use concise rules, examples, `Allowed` / `Disallowed` lists or checklists with required items to help the reader apply the decision correctly. Keep them short and decision-specific.
|
|
67
|
-
- Policies MUST NOT include historical change notes or descriptions of what changed from a previous version. State only the current rule that
|
|
67
|
+
- Policies MUST NOT include historical change notes or descriptions of what changed from a previous version. State only the current rule that MUST be followed. Historical context is available via git history or versioned packages.
|
|
68
68
|
- When a policy covers elements that could be confused with each other, include explicit disambiguation statements clarifying the distinction before stating the rules for each.
|
|
69
|
+
- A "why" explanation for a policy rule MAY only be included if it is brief, non-obvious, relevant to the reader, and not longer than the rule itself.
|
|
69
70
|
- Rules MUST focus on what is required or forbidden. Explanations of why a rule exists belong in a Research document, not in the Policy itself. Link to the relevant research when the rationale is important for adoption.
|
|
70
|
-
- When the decision defines strong policies or rules that
|
|
71
|
+
- When the decision defines strong policies or rules that SHOULD be stated explicitly as stable rule blocks, or when other documents, skills, or agents need to cite those rules individually by identifier, the Policy MUST follow the extension [_core-adr-policy-008 - Policy standards - structured](008-xdr-standards-structured.md) instead of using plain bullet lists for those rules.
|
|
71
72
|
- Conflict handling applies to Policy documents:
|
|
72
73
|
- For cross-scope overrides, document the decision conflict in the Policy `## Conflicts` section of the Policy that overrides another scope.
|
|
73
|
-
- **Within-scope conflicts:** Policies within the same type+scope
|
|
74
|
+
- **Within-scope conflicts:** Policies within the same type+scope MUST NOT conflict. If two Policies appear to conflict, one SHOULD be updated, removed, or the conflict resolved through a new Policy.
|
|
74
75
|
- When research exists for a decision, the Policy SHOULD mention the related research documents after the `## Considered Options` list.
|
|
75
|
-
-
|
|
76
|
-
-
|
|
76
|
+
- MUST NOT use emojis in contents.
|
|
77
|
+
- File names MUST be lowercase.
|
|
77
78
|
- Any non-Markdown files referenced by a Policy (schemas, JSON examples, images, diagrams, binaries, or any other data files) SHOULD be used only when they are materially necessary and MUST live in `[xdrs-root]/[scope]/[type]/[subject]/.assets/`.
|
|
78
79
|
- Avoid using lengthy instructions on the Policy. If there are long and detailed instructions related to the Policy, or instructions that are outside the decision, create another file with a guide. If the guide is small, keep it in the Policy itself.
|
|
79
|
-
- Policies
|
|
80
|
+
- Policies SHOULD be under 1300 words long as a rule of thumb.
|
|
80
81
|
- This is important to make them focused on a clear decision
|
|
81
82
|
- Exceptions can reach under 2600 words (templates, more elaborate decision implementations etc)
|
|
82
|
-
-
|
|
83
|
+
- MUST use `_local` scope if the user doesn't explicitly indicate a specific scope while creating a policy or skill.
|
|
83
84
|
|
|
84
85
|
**Policy template**
|
|
85
86
|
|
|
@@ -21,12 +21,12 @@ How should skills be authored, structured, and organized within a project so tha
|
|
|
21
21
|
|
|
22
22
|
Skills follow the [agentskills](https://agentskills.io/specification) open format and live inside the XDRS subject folder under a `skills/` sub-directory. Each skill occupies its own numbered package folder, mirroring the XDRS numbering convention.
|
|
23
23
|
|
|
24
|
-
A skill
|
|
24
|
+
A skill MAY target a human operator, an AI agent, or both. Instructions MUST be written imperatively and at a level of detail that either a person or an agent can follow without additional context. This design allows a skill to start as a human-only procedure and evolve — incrementally — toward partial or full AI automation without restructuring the document.
|
|
25
25
|
|
|
26
26
|
### Details
|
|
27
27
|
|
|
28
28
|
**Automation gradient**
|
|
29
|
-
Skills exist on a spectrum from fully manual (human-only) to fully automated (agent-only). A skill
|
|
29
|
+
Skills exist on a spectrum from fully manual (human-only) to fully automated (agent-only). A skill SHOULD be written so it can be executed at any point on that spectrum:
|
|
30
30
|
- Human reads and follows each step manually.
|
|
31
31
|
- Human delegates some steps to an AI assistant.
|
|
32
32
|
- An AI agent executes the skill autonomously.
|
|
@@ -35,11 +35,11 @@ Write instructions so that each step is unambiguous and self-contained. Avoid im
|
|
|
35
35
|
|
|
36
36
|
**Relation with Policies, Research, and Articles**
|
|
37
37
|
Skills are procedures, Policies are guardrails and decisions, Research documents capture the explored option space and findings behind a decision, and Articles are synthetic views that combine information from multiple artifacts.
|
|
38
|
-
|
|
39
|
-
- Skills are task-based artifacts. They
|
|
40
|
-
- A skill is not policy by itself. If following a skill is mandatory, that obligation
|
|
41
|
-
- When a skill reads, operationalizes, or enforces Policies, it MUST evaluate the Policy metadata first. `valid-from:` determines the convergence date for adoption, `apply-to:` determines whether the decision fits the current task context, and the decision text itself determines any remaining boundaries. All documents present in the collection are considered active. Skills
|
|
42
|
-
- Skills and Policies have a many-to-many relationship: one skill
|
|
38
|
+
Skills MUST link back and forth to their related Policies when the relationship is direct, and link to related Research or Articles when they provide important context.
|
|
39
|
+
- Skills are task-based artifacts. They SHOULD have a clear starting trigger, an expected end result, and enough detail for a human or agent to verify that the task finished correctly.
|
|
40
|
+
- A skill is not policy by itself. If following a skill is mandatory, that obligation MUST come from a Policy or another explicit policy that references the skill.
|
|
41
|
+
- When a skill reads, operationalizes, or enforces Policies, it MUST evaluate the Policy metadata first. `valid-from:` determines the convergence date for adoption, `apply-to:` determines whether the decision fits the current task context, and the decision text itself determines any remaining boundaries. All documents present in the collection are considered active. Skills MUST NOT treat out-of-window or out-of-scope Policies as current requirements.
|
|
42
|
+
- Skills and Policies have a many-to-many relationship: one skill MAY operationalize multiple Policies, and one Policy MAY be executed through multiple skills in different contexts.
|
|
43
43
|
|
|
44
44
|
Place a skill under the XDRS type that matches the nature of the activity the skill performs:
|
|
45
45
|
- **EDR skills** - engineering workflows, tool usage, coding procedures, implementation how-tos (e.g. how to design a webpage, how to run a CI pipeline, how to debug a service)
|
|
@@ -76,7 +76,7 @@ Examples:
|
|
|
76
76
|
**Skill numbering**
|
|
77
77
|
|
|
78
78
|
- Each skill has a number unique within its `scope/type/subject/skills/` namespace.
|
|
79
|
-
- Determine the next number by checking the highest number already present in that namespace.
|
|
79
|
+
- Determine the next number by checking the highest number already present in that namespace. MUST NOT reuse numbers of deleted skills.
|
|
80
80
|
- Gaps in the sequence are expected and allowed.
|
|
81
81
|
|
|
82
82
|
**SKILL.md format** (agentskills spec)
|
|
@@ -119,9 +119,9 @@ Rules:
|
|
|
119
119
|
- For simple structure, flow, layout, or relationship indications, `SKILL.md` SHOULD prefer plain Markdown, tables, or ASCII art instead of external assets.
|
|
120
120
|
- Any non-Markdown files referenced from `SKILL.md` SHOULD be used only when they are materially necessary and MUST live in `.assets/` inside the same skill package. See `_core-adr-policy-001` for the canonical `.assets/` path conventions.
|
|
121
121
|
- Keep `SKILL.md` under 6500 words. Move lengthy reference material to `references/`.
|
|
122
|
-
- Use relative paths for all links;
|
|
123
|
-
-
|
|
124
|
-
-
|
|
122
|
+
- Use relative paths for all links; MUST NOT use absolute paths starting with `/`.
|
|
123
|
+
- File names MUST be lowercase.
|
|
124
|
+
- MUST NOT use emojis in skill content.
|
|
125
125
|
|
|
126
126
|
**Validation**
|
|
127
127
|
|
|
@@ -23,25 +23,25 @@ Articles are Markdown documents placed inside a subject folder alongside policie
|
|
|
23
23
|
|
|
24
24
|
**Human-first writing**
|
|
25
25
|
|
|
26
|
-
- The primary objective of an article is to make information available and accessible to humans. Good copywriting style, storytelling, clear organization, and clustering of related information are essential. Avoid repetitive content; each sentence
|
|
26
|
+
- The primary objective of an article is to make information available and accessible to humans. Good copywriting style, storytelling, clear organization, and clustering of related information are essential. Avoid repetitive content; each sentence SHOULD add new value.
|
|
27
27
|
- Articles SHOULD stay under 2000 words (approximately a 10-minute read) to maximize reader engagement. When planning an article, keep it as small as possible. Break large subjects into separate chapters, each in its own article, so readers can consume and understand sections independently.
|
|
28
28
|
- When a topic is broken into multiple articles, organize them as a **series**: each article MUST declare its position at the very top (e.g., `_This is article 2/4 of the "Engineering Practices" series._`) and MUST link to the previous and next articles in the series so readers can navigate the sequence without returning to an index.
|
|
29
|
-
- Articles
|
|
29
|
+
- Articles MUST NOT exceed 8000 words (hard limit). Move or point to detailed contents referenced in Policy decisions, researches, plans, or skills.
|
|
30
30
|
|
|
31
31
|
**Content and structure**
|
|
32
32
|
|
|
33
33
|
- Articles are views, not decisions. They summarize and synthesize content from Policies, Research, and Skills but are NOT the source of truth. When there is a conflict between an article and a Policy, the Policy takes precedence.
|
|
34
|
-
- Articles are not limited to synthesizing Policies. They
|
|
35
|
-
- Articles
|
|
36
|
-
- Articles
|
|
37
|
-
- In more complex cases, an article
|
|
38
|
-
- When an article tells readers which decisions to follow, it SHOULD check `valid-from:` first to determine the convergence date, `apply-to:` second to determine context fit, and the decision text itself last. All documents present in the collection are considered active; articles
|
|
39
|
-
- Articles
|
|
34
|
+
- Articles are not limited to synthesizing Policies. They MAY also document application features, APIs, general project information, reference tables, diagrams, FAQs and other elements useful to their intended audience.
|
|
35
|
+
- Articles MUST reference the Policies, Research documents, and Skills they synthesize. MUST NOT duplicate decision content; link back to the authoritative sources.
|
|
36
|
+
- Articles MAY serve as indexes, combining related artifacts on a specific topic into a single navigable document.
|
|
37
|
+
- In more complex cases, an article MAY be an index of links to other articles, grouping related documentation into a single entry point that guides readers across a set of related topics.
|
|
38
|
+
- When an article tells readers which decisions to follow, it SHOULD check `valid-from:` first to determine the convergence date, `apply-to:` second to determine context fit, and the decision text itself last. All documents present in the collection are considered active; articles MUST NOT present out-of-window or out-of-scope Policies as current rules for the discussed context.
|
|
39
|
+
- Articles MUST remain consistent with the Policies, Research documents, and Skills they reference. When a referenced artifact changes, the article MUST be reviewed and updated.
|
|
40
40
|
- Place an article in the subject folder that best matches its topic using the required list of subjects per type defined in `_core-adr-policy-001`. If an article spans more than one subject, place it in `principles`.
|
|
41
41
|
- For simple structure, flow, layout, or relationship indications, articles SHOULD prefer plain Markdown, tables, or ASCII art instead of external assets.
|
|
42
42
|
- Any non-Markdown files referenced by an article SHOULD be used only when they are materially necessary and MUST live in `articles/.assets/` next to the article files. See `_core-adr-policy-001` for the canonical `.assets/` path conventions.
|
|
43
|
-
-
|
|
44
|
-
-
|
|
43
|
+
- File names MUST be lowercase.
|
|
44
|
+
- MUST NOT use emojis in article content.
|
|
45
45
|
|
|
46
46
|
**Folder layout**
|
|
47
47
|
|
|
@@ -64,7 +64,7 @@ Examples:
|
|
|
64
64
|
|
|
65
65
|
- Each article has a number unique within its `scope/type/subject/articles/` namespace.
|
|
66
66
|
- Determine the next number by checking the highest number already present in that namespace.
|
|
67
|
-
-
|
|
67
|
+
- MUST NOT reuse numbers of deleted articles. Gaps in the sequence are expected and allowed.
|
|
68
68
|
|
|
69
69
|
**Article template**
|
|
70
70
|
|
|
@@ -17,7 +17,7 @@ Question: How should semantic versioning be used when publishing or versioning a
|
|
|
17
17
|
|
|
18
18
|
**semantic versioning aligned with decision impact**
|
|
19
19
|
|
|
20
|
-
XDRS packages
|
|
20
|
+
XDRS packages MUST use semantic versioning so the package version communicates the expected upgrade impact on consuming teams and projects.
|
|
21
21
|
|
|
22
22
|
### Details
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ XDRS packages must use semantic versioning so the package version communicates t
|
|
|
29
29
|
**MAJOR**
|
|
30
30
|
- Use a major bump for breaking changes.
|
|
31
31
|
- Use a major bump when an existing Policy changes meaning in a way that can require consuming teams to revisit architecture, governance, operations, or implementation decisions.
|
|
32
|
-
- Use a major bump when impactful concepts are introduced or changed in a way that materially alters how the package
|
|
32
|
+
- Use a major bump when impactful concepts are introduced or changed in a way that materially alters how the package SHOULD be adopted or interpreted.
|
|
33
33
|
- Typical cases: removed or renamed Policies that affect references, changed mandatory rules, changed conflict/override behavior, or changed guidance that invalidates previously compliant usage.
|
|
34
34
|
|
|
35
35
|
**MINOR**
|
|
@@ -48,10 +48,10 @@ Research documents are Markdown files placed inside a subject folder alongside p
|
|
|
48
48
|
- Be strict about the goal of each section. Avoid duplicating the same material across sections and prefer clarity over rhetorical flourishes.
|
|
49
49
|
- Research documents SHOULD stay under 5000 words total. They MAY exceed that only when the `## Introduction` explicitly states that the study will be lengthy because a very detailed analysis is required.
|
|
50
50
|
- Research documents SHOULD link in `## References` to the Policies, skills, articles, discussions, and external references relevant to the subject or that later cite the work.
|
|
51
|
-
- A 1:1 relationship between one research document and one decision will likely be common in practice, but it is not
|
|
51
|
+
- A 1:1 relationship between one research document and one decision will likely be common in practice, but it is not mandatory.
|
|
52
52
|
- One research document MAY also be referenced by multiple Policies, including a mix of ADRs, BDRs, and EDRs, when the same investigation remains relevant across several decisions.
|
|
53
53
|
- Any non-Markdown files referenced by a research document SHOULD be used only when they are materially necessary and MUST live in `researches/.assets/` next to the research files. See `_core-adr-policy-001` for the canonical `.assets/` path conventions.
|
|
54
|
-
- Research file names MUST be lowercase.
|
|
54
|
+
- Research file names MUST be lowercase. MUST NOT use emojis.
|
|
55
55
|
- A research document MAY exist before the related Policy is written, or remain after the Policy changes, as long as its status and references stay clear.
|
|
56
56
|
|
|
57
57
|
**Folder layout**
|
|
@@ -75,7 +75,7 @@ Examples:
|
|
|
75
75
|
|
|
76
76
|
- Each research document has a number unique within its `scope/type/subject/researches/` namespace.
|
|
77
77
|
- Determine the next number by checking the highest number already present in that namespace.
|
|
78
|
-
-
|
|
78
|
+
- MUST NOT reuse numbers of deleted research documents. Gaps are expected.
|
|
79
79
|
|
|
80
80
|
**Research template**
|
|
81
81
|
|
|
@@ -24,15 +24,15 @@ Plans are Markdown documents placed inside a subject folder alongside policies.
|
|
|
24
24
|
- Plans describe a problem (why), what we will do to solve the problem, and the approach and activities needed to solve it (how).
|
|
25
25
|
- Plans are NOT the source of truth. When a plan and a Policy disagree, the Policy takes precedence.
|
|
26
26
|
- Plans are ephemeral. They MUST be deleted after full implementation. The lasting outputs of a plan are actual actions or Decisions, Skills, Articles, Research documents, and other artifacts that result from execution.
|
|
27
|
-
- Plans
|
|
28
|
-
- During the implementation of a plan, new Decisions, Articles, Skills, Research documents, and even other Plans
|
|
29
|
-
- A plan can be high level, describing only one milestone, or more complex, describing a WBS (work breakdown structure) along with owners, multiple milestones in a tactical sequence, and checklists to verify completeness. Actual tasks performed by actors
|
|
30
|
-
- The total time to deliver a plan
|
|
27
|
+
- Plans MAY be used to implement a certain Decision. They MAY also use Research documents to help with the planning process. Articles MAY be written on top of a plan to give more context and connect more details present in other decisions and research to people involved in the plan.
|
|
28
|
+
- During the implementation of a plan, new Decisions, Articles, Skills, Research documents, and even other Plans MAY be created. All related elements MUST be linked to each other.
|
|
29
|
+
- A plan can be high level, describing only one milestone, or more complex, describing a WBS (work breakdown structure) along with owners, multiple milestones in a tactical sequence, and checklists to verify completeness. Actual tasks performed by actors SHOULD be tracked in specialized software such as GitHub or Azure DevOps.
|
|
30
|
+
- The total time to deliver a plan SHOULD NOT be more than 2 years. If more time is needed, create a new plan later with what was learned.
|
|
31
31
|
- Plans MUST live under `plans/` inside the relevant subject folder: `.xdrs/[scope]/[type]/[subject]/plans/[number]-[short-title].md`
|
|
32
32
|
- The `[subject]` component MUST be one of the allowed subjects for the chosen type. The required list of allowed subjects per type is defined in `_core-adr-policy-001`.
|
|
33
33
|
- Plans MUST include an `Expected end date:` field in ISO format (YYYY-MM-DD) inside the `## Proposed Solution` section.
|
|
34
|
-
-
|
|
35
|
-
-
|
|
34
|
+
- File names MUST be lowercase.
|
|
35
|
+
- MUST NOT use emojis in plan content.
|
|
36
36
|
- Any non-Markdown files referenced by a plan SHOULD be used only when they are materially necessary and MUST live in `plans/.assets/` next to the plan files. See `_core-adr-policy-001` for the canonical `.assets/` path conventions.
|
|
37
37
|
|
|
38
38
|
**Folder layout**
|
|
@@ -55,7 +55,7 @@ Examples:
|
|
|
55
55
|
|
|
56
56
|
- Each plan has a number unique within its `scope/type/subject/plans/` namespace.
|
|
57
57
|
- Determine the next number by checking the highest number already present in that namespace.
|
|
58
|
-
-
|
|
58
|
+
- MUST NOT reuse numbers of deleted plans. Gaps in the sequence are expected and allowed.
|
|
59
59
|
|
|
60
60
|
**Plan template**
|
|
61
61
|
|
|
@@ -17,31 +17,31 @@ Question: How should a Policy document expose strong or individually referenceab
|
|
|
17
17
|
|
|
18
18
|
**Numbered rule blocks inside Details with a canonical citation syntax**
|
|
19
19
|
|
|
20
|
-
When a Policy document defines strong rules or policies that
|
|
20
|
+
When a Policy document defines strong rules or policies that MUST be stated explicitly, or when documents and skills need to cite individual rules precisely, each rule MUST be placed inside `### Details` as a numbered heading block. Referencing documents and skills MUST cite rules using the canonical dot-notation identifier.
|
|
21
21
|
|
|
22
22
|
### Details
|
|
23
23
|
|
|
24
|
-
Use this format when the decision defines strong rules or policies that
|
|
24
|
+
Use this format when the decision defines strong rules or policies that MUST be stated explicitly as stable rule blocks, or when there is a clear need for external documents, skills, or agents to reference specific items inside a Policy without duplicating the full policy text. Standard Policies that do not define strong rule sets and do not need item-level citation SHOULD follow `_core-adr-policy-002-policy-standards` without adding numbered rule headings.
|
|
25
25
|
|
|
26
26
|
#### Rule block format
|
|
27
27
|
|
|
28
|
-
Each numbered rule
|
|
28
|
+
Each numbered rule MUST be written as:
|
|
29
29
|
|
|
30
30
|
```markdown
|
|
31
31
|
#### [NN]-[short-rule-title-in-mandatory-advisory-language-in-kebab-case-<12-words]
|
|
32
|
-
[Body using mandatory or advisory language as defined in _core-adr-policy-001. State the requirement and the situations in which it
|
|
32
|
+
[Body using mandatory or advisory language as defined in _core-adr-policy-001. State the requirement and the situations in which it MUST or SHOULD be followed. Under 500 words.]
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
Where `NN` is a two-digit zero-padded sequence number (e.g. `01`, `02`, `12`). Numbers
|
|
35
|
+
Where `NN` is a two-digit zero-padded sequence number (e.g. `01`, `02`, `12`). Numbers MUST be unique within the document and MUST NOT be reused after a rule is removed. The short descriptive title MUST be in kebab-case (lowercase words separated by hyphens, no spaces or uppercase letters) and express the rule summary contents (e.g.: "43-code-must-be-linted", "12-use-standard-file-structure", "02-log-all-errors-to-mlflow")
|
|
36
36
|
|
|
37
|
-
Rule bodies
|
|
37
|
+
Rule bodies MUST use the mandatory or advisory language terms defined in `_core-adr-policy-001`:
|
|
38
38
|
|
|
39
39
|
- Mandatory: "must", "always", "never", "required", "mandatory"
|
|
40
40
|
- Advisory: "should", "recommended", "advised", "preferably", "possibly", "optionally"
|
|
41
41
|
|
|
42
42
|
#### Citation syntax
|
|
43
43
|
|
|
44
|
-
When another document or skill cites a specific rule, it
|
|
44
|
+
When another document or skill cites a specific rule, it MUST use the following dot-notation:
|
|
45
45
|
|
|
46
46
|
```
|
|
47
47
|
policy-name.NN-short-rule-title-in-kebab-case
|
|
@@ -52,23 +52,23 @@ Examples:
|
|
|
52
52
|
- `_core-adr-policy-008-policy-standards-structured.01-always-use-numbered-rules-for-strong-or-referenceable-policies`
|
|
53
53
|
- `_local-bdr-policy-003-data-retention-policy.02-purge-schedule-for-pii`
|
|
54
54
|
|
|
55
|
-
The `policy-name`
|
|
55
|
+
The `policy-name` MUST match the `name` field in the frontmatter of the source document exactly. The rule identifier after the dot MUST match the heading text exactly, including the two-digit prefix.
|
|
56
56
|
|
|
57
57
|
#### 01-always-use-numbered-rules-for-strong-or-referenceable-policies
|
|
58
58
|
|
|
59
|
-
Numbered rule blocks
|
|
59
|
+
Numbered rule blocks MUST be added to a Policy when the decision defines strong rules or policies that MUST be stated explicitly as stable items, or when there is a clear need for other documents, skills, or agents to cite individual rules by identifier. Adding numbered rules only for cosmetic organization SHOULD NOT be done. Standard Policy documents that do not define strong rule sets and are not expected to be cited at the rule level SHOULD follow `_core-adr-policy-002-policy-standards` without this structured format.
|
|
60
60
|
|
|
61
61
|
#### 02-rule-numbering-must-be-stable
|
|
62
62
|
|
|
63
|
-
Rule numbers
|
|
63
|
+
Rule numbers MUST NEVER be reused within the same document. When a rule is removed, its number becomes permanently retired for that document. Gaps in the sequence are expected and MUST NOT be filled by renumbering remaining rules, as existing citations depend on number stability.
|
|
64
64
|
|
|
65
65
|
#### 03-rule-body-must-use-normative-language
|
|
66
66
|
|
|
67
|
-
Every rule body
|
|
67
|
+
Every rule body MUST contain at least one mandatory or advisory language term as defined in `_core-adr-policy-001`. Rule bodies without normative language MUST NOT be published, as they fail to communicate whether compliance is required or recommended.
|
|
68
68
|
|
|
69
69
|
#### 04-citations-must-use-exact-identifiers
|
|
70
70
|
|
|
71
|
-
Documents and skills that cite a rule
|
|
71
|
+
Documents and skills that cite a rule MUST use the exact dot-notation form: `policy-name.NN-short-rule-title-in-kebab-case`. Prose paraphrases such as "see rule 3" or "the third rule in that Policy" MUST NOT be used as citations, because they are ambiguous and break when rules are reordered or reworded.
|
|
72
72
|
|
|
73
73
|
## Considered Options
|
|
74
74
|
|
|
@@ -21,29 +21,29 @@ Presentations are Markdown files in Marp format, stored in the `.assets/` folder
|
|
|
21
21
|
|
|
22
22
|
### Details
|
|
23
23
|
|
|
24
|
-
- Slides are supporting media for XDRS documents. They
|
|
25
|
-
- Slides
|
|
24
|
+
- Slides are supporting media for XDRS documents. They MUST NOT exist as standalone artifacts without a parent decision, research, article, or plan.
|
|
25
|
+
- Slides MUST use the [Marp](https://marp.app/) Markdown format with a minimal YAML frontmatter block at the beginning of the file:
|
|
26
26
|
```
|
|
27
27
|
---
|
|
28
28
|
marp: true
|
|
29
29
|
---
|
|
30
30
|
```
|
|
31
|
-
Additional Marp configuration keys (e.g. `theme`, `paginate`, `header`, `footer`)
|
|
32
|
-
- Slide files
|
|
33
|
-
- The parent document
|
|
34
|
-
- Slide files
|
|
31
|
+
Additional Marp configuration keys (e.g. `theme`, `paginate`, `header`, `footer`) MAY be added when needed, but `marp: true` MUST be the first frontmatter key.
|
|
32
|
+
- Slide files MUST be placed in the `.assets/` folder next to the element they relate to, following the `.assets/` placement rules defined in `_core-adr-policy-001`.
|
|
33
|
+
- The parent document MUST contain a link to the slide file. The slide file MUST contain a link back to the parent document at the end of the presentation.
|
|
34
|
+
- Slide files MUST use the same base name as the parent file, suffixed with `-slides`. When multiple slide sets exist for the same parent, append a context indicator after `-slides` (e.g. `-slides-overview`, `-slides-executive`).
|
|
35
35
|
- Example: parent `003-naming-conventions.md` produces `003-naming-conventions-slides.md` or `003-naming-conventions-slides-overview.md`.
|
|
36
|
-
- Slide file names
|
|
37
|
-
- Slide file names
|
|
38
|
-
- When slides refer to content from multiple decisions, plans, or research documents, an article explaining the combined view
|
|
39
|
-
- Slides
|
|
40
|
-
- Slides
|
|
36
|
+
- Slide file names MUST NOT exceed 64 characters (including the `.md` extension).
|
|
37
|
+
- Slide file names MUST be lowercase.
|
|
38
|
+
- When slides refer to content from multiple decisions, plans, or research documents, an article explaining the combined view MUST be written first. The slides then support that article, not the individual documents directly.
|
|
39
|
+
- Slides SHOULD contain minimal text. Prefer Mermaid diagrams, short bullet points, ASCII art, key short statements, and tables. Use longer text only when the exact wording MUST be evaluated by the audience (policies, texts under discussion, controls).
|
|
40
|
+
- Slides SHOULD follow a clean, linear storytelling structure (context, problem, solution, actions). Follow the structure of the underlying document, extracting the most important points and stressing central questions, answers, doubts, decisions, and risks.
|
|
41
41
|
- Define the central message or objective of the presentation before creating the slides. If the objective is unclear or there are multiple possible paths, ask the user before proceeding.
|
|
42
|
-
-
|
|
42
|
+
- The target audience MUST be identified (executives, engineers, specialists, control). If the audience is not clear from the underlying document, ask before creating the slides. Include audience info in the file name when multiple audiences exist (e.g. `005-rail-standards-slides-executive.md`).
|
|
43
43
|
- Keep presentations under 30 slides. Create separate slide sets for different views or audiences when needed.
|
|
44
|
-
- Slides
|
|
45
|
-
-
|
|
46
|
-
-
|
|
44
|
+
- Slides MUST NOT replace policies or related document contents. When the underlying document changes, the associated slides MUST be reviewed and updated to stay consistent.
|
|
45
|
+
- MUST NOT use emojis in slide content.
|
|
46
|
+
- File names MUST be lowercase.
|
|
47
47
|
|
|
48
48
|
## References
|
|
49
49
|
|
|
@@ -44,11 +44,11 @@ Note: this naming applies to the **policy name** only, not to any scope director
|
|
|
44
44
|
A scope-type definition policy MUST define:
|
|
45
45
|
|
|
46
46
|
- The scope type name (the value that instances declare in their `scope-type:` field).
|
|
47
|
-
- When to use this scope type and what kinds of scopes
|
|
47
|
+
- When to use this scope type and what kinds of scopes SHOULD declare it.
|
|
48
48
|
|
|
49
49
|
##### 04-def-preferred-content
|
|
50
50
|
|
|
51
|
-
A scope-type definition policy SHOULD
|
|
51
|
+
A scope-type definition policy SHOULD define:
|
|
52
52
|
|
|
53
53
|
- Naming conventions for scope instances of this type.
|
|
54
54
|
- What content SHOULD be placed in scopes of this type.
|
|
@@ -87,7 +87,7 @@ A scope-local standards policy MUST be placed in the `principles` subject of any
|
|
|
87
87
|
|
|
88
88
|
##### 11-local-optional
|
|
89
89
|
|
|
90
|
-
Creating a scope-local standards policy is optional. It
|
|
90
|
+
Creating a scope-local standards policy is optional. It SHOULD be created when a scope has specific structural, authoring, or content constraints that differ from `_core` defaults or the scope's declared scope-type standards.
|
|
91
91
|
|
|
92
92
|
##### 12-local-content
|
|
93
93
|
|
|
@@ -36,7 +36,7 @@ Use `scope-type: core` when the scope's purpose is to hold meta governance conte
|
|
|
36
36
|
|
|
37
37
|
#### 03-naming-convention
|
|
38
38
|
|
|
39
|
-
A scope of type `core` MUST have "core" somewhere in its name (e.g., `_core`, `myarea-core`, `security-core`). The `-core` suffix
|
|
39
|
+
A scope of type `core` MUST have "core" somewhere in its name (e.g., `_core`, `myarea-core`, `security-core`). The `-core` suffix SHOULD be used as the naming pattern. The built-in `_core` scope is the only exception to the suffix requirement.
|
|
40
40
|
|
|
41
41
|
#### 04-allowed-content
|
|
42
42
|
|
|
@@ -61,7 +61,7 @@ A scope that is governed by a `core` scope MUST declare this relationship explic
|
|
|
61
61
|
|
|
62
62
|
#### 07-distribution
|
|
63
63
|
|
|
64
|
-
A `core`-type scope MAY be distributed to consumers alongside the companion consumable scope, or kept internal to the team that maintains the domain. When distributed, consumers who extend or contribute to the domain scope locally MUST follow its standards. When not distributed, internal contributors
|
|
64
|
+
A `core`-type scope MAY be distributed to consumers alongside the companion consumable scope, or kept internal to the team that maintains the domain. When distributed, consumers who extend or contribute to the domain scope locally MUST follow its standards. When not distributed, internal contributors MUST still comply.
|
|
65
65
|
|
|
66
66
|
## References
|
|
67
67
|
|
|
@@ -32,7 +32,7 @@ Use `scope-type: reference` when the scope contains:
|
|
|
32
32
|
- Industry standards or compliance frameworks to be adopted or mapped against (e.g., ISO 27001, SOC2, PCI-DSS, GDPR, financial regulations, accounting standards).
|
|
33
33
|
- Vendor best-practice patterns or recommended architectures.
|
|
34
34
|
- Reference architectures or canonical system blueprints meant to be instantiated or adapted locally.
|
|
35
|
-
- Business area procedure standards: how sales processes
|
|
35
|
+
- Business area procedure standards: how sales processes SHOULD be conducted, how customer data MUST be handled, how marketing communications MUST comply with applicable regulations.
|
|
36
36
|
- Operational compliance guidelines: finance controls, accounting procedures, public communication standards, customer data management rules.
|
|
37
37
|
|
|
38
38
|
Do not use `scope-type: reference` for scopes that represent a live service, an active team, or a production system. Use `scope-type: platform` for those.
|
|
@@ -43,7 +43,7 @@ A scope of type `reference` MUST follow the naming pattern `{domain}-ref-{name}`
|
|
|
43
43
|
|
|
44
44
|
#### 04-content-guidance
|
|
45
45
|
|
|
46
|
-
Content in a `reference`-type scope describes how something
|
|
46
|
+
Content in a `reference`-type scope describes how something could be done — whether that is building a system, running a business process, or complying with a regulation. It SHOULD NOT describe what is currently deployed or actively managed.
|
|
47
47
|
|
|
48
48
|
Policies, decisions, and standards here are to be read, adopted, adapted, or mapped — not consumed directly as live service or operational documentation. Examples include:
|
|
49
49
|
|
|
@@ -40,7 +40,7 @@ There is no naming requirement for `standard`-type scopes. Any valid scope name
|
|
|
40
40
|
|
|
41
41
|
#### 04-ordering
|
|
42
42
|
|
|
43
|
-
In the root `index.md`, `standard`-type scopes are placed after `platform` scopes and before `_local`. Custom scope types
|
|
43
|
+
In the root `index.md`, `standard`-type scopes are placed after `platform` scopes and before `_local`. Custom scope types SHOULD also be placed in this position. Scopes listed later override scopes listed earlier on the same topic.
|
|
44
44
|
|
|
45
45
|
## References
|
|
46
46
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: _core-adr-policy-015-local-scope-type
|
|
3
|
-
description: Defines the `_local` scope type — reserved exclusively for the `_local` scope, which holds workspace-local decisions that
|
|
3
|
+
description: Defines the `_local` scope type — reserved exclusively for the `_local` scope, which holds workspace-local decisions that MUST NOT be distributed or shared outside the current repository. Use when understanding what the `_local` scope type means.
|
|
4
4
|
apply-to: All XDRS workspace authors
|
|
5
5
|
valid-from: 2026-07-01
|
|
6
6
|
---
|
|
@@ -13,7 +13,7 @@ Every XDRS workspace may need project-specific overrides or local decisions that
|
|
|
13
13
|
|
|
14
14
|
## Decision Outcome
|
|
15
15
|
|
|
16
|
-
**Reserve `scope-type: _local` exclusively for the `_local` scope, which holds workspace-local decisions that
|
|
16
|
+
**Reserve `scope-type: _local` exclusively for the `_local` scope, which holds workspace-local decisions that MUST NEVER leave the repository.**
|
|
17
17
|
|
|
18
18
|
### Details
|
|
19
19
|
|
|
@@ -29,7 +29,7 @@ The `_local` scope holds project-specific decisions, local overrides, and worksp
|
|
|
29
29
|
|
|
30
30
|
#### 03-exclusive-reservation
|
|
31
31
|
|
|
32
|
-
The value `scope-type: _local` is reserved exclusively for the single scope named `_local`.
|
|
32
|
+
The value `scope-type: _local` is reserved exclusively for the single scope named `_local`. Other scopes MUST NOT use this scope type.
|
|
33
33
|
|
|
34
34
|
#### 04-never-distributed
|
|
35
35
|
|
|
@@ -43,6 +43,7 @@ Performs a structured review of code changes or files against the Policies in th
|
|
|
43
43
|
- **Drop any finding that cannot be traced to a specific rule in an Accepted Policy.** General good-practice observations, personal opinions, or inferred issues without an explicit Policy backing must not be reported.
|
|
44
44
|
- Classify as ERROR (mandatory) or WARNING (advisory).
|
|
45
45
|
- Include: location, description, Policy reference (file + line), suggestion.
|
|
46
|
+
- **Normative language check (Policy documents only):** For every Policy document in scope, verify that normative statements use uppercase BCP 14 keywords as required by `_core-adr-policy-001`. Flag as ERROR when a lowercase `must`, `must not`, `always`, or `never` is used in a normative requirement context (Details or Decision Outcome sections). Flag as WARNING when lowercase `should`, `should not`, `recommended`, `advised`, `may`, `possibly`, or `optionally` appear in a normative or permissive context where the uppercase form is expected. Context sections and question statements are exempt.
|
|
46
47
|
2. Reduce false positives:
|
|
47
48
|
- Evaluate ERROR findings for mandatory language in the Policy ("must", "always", "never", "required", "mandatory"). Drop or downgrade to WARNING if the language is advisory ("should", "recommended", "advised").
|
|
48
49
|
- Remove findings unrelated to actual changes.
|
|
@@ -153,6 +153,7 @@ Check every item before finalizing:
|
|
|
153
153
|
|
|
154
154
|
1. **Length**: Is it under 1300 words? Trim verbose explanations. Move detailed skills to a separate file and link.
|
|
155
155
|
2. **Frontmatter**: Are `apply-to:` and `valid-from:` both present? `apply-to:` must describe the applicable context (use `All scopes` when broadly applicable). `valid-from:` must be set (use today's date if the user did not specify one).
|
|
156
|
+
3. **Normative language**: Does every normative requirement in the Details and Decision Outcome sections use uppercase BCP 14 keywords per `_core-adr-policy-001`? Replace any lowercase `must`/`should`/`may` that express requirements, prohibitions, or permissions with MUST/MUST NOT, SHOULD/SHOULD NOT, or MAY/OPTIONAL respectively. Lowercase forms are only acceptable in Context sections, question statements, or when used with their ordinary English meaning.
|
|
156
157
|
3. **Originality**: Does every sentence add value that cannot be found in a generic web search? Remove obvious advice. Keep only the project-specific decision.
|
|
157
158
|
4. **Clarity**: Is the chosen option unambiguous? Is the "why" clear in one reading?
|
|
158
159
|
5. **Redundancy**: Is the Policy the primary source for the decision itself, with related documents linked instead of duplicated wherever possible?
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xdrs-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.37.1",
|
|
4
4
|
"description": "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.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|