xdrs-core 0.37.1 → 0.37.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,7 +21,7 @@ Provides clear ownership by scope, predictable navigation, and reusable decision
21
21
 
22
22
  ### Details
23
23
 
24
- A standard Decision Record normally combines several concerns in the same document: a reason (why, options considered), a policy (rules, what is the decision), a plan (consequences, when it will be implemented), a how-to (step-by-step how-to procedure), and a view on a topic. The XDRS framework separates these concerns into different document types: Policies as the source of truth for the core of the decision, Research for reasoning and evidence, Plans for implementation approach, Skills for execution procedures, and Articles for topic overviews. Supporting artifacts may explain, justify, or operationalize the policy, but they do not replace it. 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.
24
+ A standard Decision Record normally combines several concerns in the same document: a reason (why, options considered), a policy (rules, what is the decision), a plan (consequences, when it will be implemented), a how-to (step-by-step how-to procedure), and a view on a topic. The XDRS framework separates these concerns into different document types: Policies as the source of truth for the core of the decision, Research for reasoning and evidence, Plans for implementation approach, Skills for execution procedures, and Articles for topic overviews. Supporting artifacts MAY explain, justify, or operationalize the policy, but they do not replace it. 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.
25
25
 
26
26
  Policies can be of different kinds, depending on the nature of the decision:
27
27
  - BDR (Business Decision Record): Captures business process, product features, procedures and strategic decisions. Examples: business rules, product policies, customer service, business workflow, control frameworks for regulators for finance, product procedures and manuals, KYC requirements, business requirements in general
@@ -48,7 +48,7 @@ Policies can be of different kinds, depending on the nature of the decision:
48
48
  `[xdrs-root]/[scope]/[type]/[subject]/[number]-[short-title].md`
49
49
  where `[xdrs-root]` is the XDRS root folder (default: `.xdrs/`).
50
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.
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 NOT 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.
52
52
  - Optional supporting artifacts under the same subject:
53
53
  - `[xdrs-root]/[scope]/[type]/[subject]/researches/[number]-[short-title].md`
54
54
  - `[xdrs-root]/[scope]/[type]/[subject]/skills/[number]-[skill-name]/SKILL.md`
@@ -69,7 +69,7 @@ Policies can be of different kinds, depending on the nature of the decision:
69
69
  - **Scopes:**
70
70
  - Short name that defines a group or a package of XDRS
71
71
  - examples: `business-x`, `business-y`, `team-43`, `_core`
72
- - `_local` is a reserved scope for XDRS elements created locally to a specific project or repository. XDRS elements in `_local` MUST NOT be shared with or propagated to other contexts. This scope MUST always be placed in the lowest position in the root `index.md` so that its decisions override or extend any decisions from higher-positioned scopes. Shared root `index.md` files MUST NOT include an explicit link to `_local`, because `_local` remains workspace-local and is not distributed with shared packages. Readers, tools, and agents SHOULD still try the default workspace-local path `_local/index.md` when it exists, even without a root-index link. Documents in non-`_local` scopes MUST NEVER link to any document inside `_local`; documents inside `_local` MAY link to other documents inside `_local`.
72
+ - `_local` is a reserved scope for XDRS elements created locally to a specific project or repository. XDRS elements in `_local` MUST NOT be shared with or propagated to other contexts. This scope MUST be placed in the lowest position in the root `index.md` so that its decisions override or extend any decisions from higher-positioned scopes. Shared root `index.md` files MUST NOT include an explicit link to `_local`, because `_local` remains workspace-local and is not distributed with shared packages. Readers, tools, and agents SHOULD still try the default workspace-local path `_local/index.md` when it exists, even without a root-index link. Documents in non-`_local` scopes MUST NOT link to any document inside `_local`; documents inside `_local` MAY link to other documents inside `_local`.
73
73
  - **Types:** `adrs`, `bdrs`, `edrs`
74
74
  - there can exist sufixes to the standard scope names (e.g: `business-x-mobileapp`, `business-y-servicedesk`)
75
75
  - The `-core` suffix designates a scope as the meta governance layer for a domain. See `_core-adr-policy-011` for the `core` scope type definition.
@@ -136,7 +136,7 @@ Policies can be of different kinds, depending on the nature of the decision:
136
136
  - Examples: CI/CD stages, branch strategy, release promotion gates.
137
137
  - `governance`: Engineering governance, risk controls, and compliance mechanics.
138
138
  - Examples: dependency governance, approval policies, mandatory quality checks.
139
- - Never use emojis
139
+ - MUST NOT use emojis
140
140
  - **Links:** Use relative paths for all links; MUST NOT use absolute paths starting with `/`.
141
141
  - **Indexes**
142
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.
@@ -13,7 +13,7 @@ Policy framework elements (types, scopes, subjects, folder structure) are define
13
13
 
14
14
  ## Decision Outcome
15
15
 
16
- **Structured policies with a mandatory template, applicability metadata, and clear conflict rules**
16
+ **Structured policies with a MANDATORY template, applicability metadata, and clear conflict rules**
17
17
 
18
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
 
@@ -62,7 +62,7 @@ Policy documents are the authoritative source of truth for their scope, type, an
62
62
  - Types in IDs: `adr-policy`, `bdr-policy`, `edr-policy`
63
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
- - 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.
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
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.
@@ -37,7 +37,7 @@ Write instructions so that each step is unambiguous and self-contained. Avoid im
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
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
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.
40
+ - A skill is not policy by itself. If following a skill is REQUIRED, that obligation MUST come from a Policy or another explicit policy that references the skill.
41
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
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
 
@@ -48,7 +48,7 @@ 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 mandatory.
51
+ - A 1:1 relationship between one research document and one decision will likely be common in practice, but it is not REQUIRED.
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
54
  - Research file names MUST be lowercase. MUST NOT use emojis.
@@ -60,7 +60,7 @@ Numbered rule blocks MUST be added to a Policy when the decision defines strong
60
60
 
61
61
  #### 02-rule-numbering-must-be-stable
62
62
 
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.
63
+ Rule numbers MUST NOT 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
 
@@ -52,7 +52,7 @@ 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.
55
- - What content SHOULD NEVER be placed in scopes of this type.
55
+ - What content SHOULD NOT be placed in scopes of this type.
56
56
  - Special instructions on how to organise or write content in scopes of this type.
57
57
 
58
58
  ##### 05-def-instance-declaration
@@ -130,7 +130,7 @@ When multiple standards address the same topic, the following precedence applies
130
130
  3. `follows:` scope standards (last-listed `follows:` scope wins among themselves)
131
131
  4. Scope-local `{scope-name}-core` policy standards
132
132
 
133
- All of the above are subordinate to `_core` structural rules, which cannot be overridden.
133
+ All of the above are subordinate to `_core` structural rules, which MUST NOT be overridden.
134
134
 
135
135
  ##### 18-ordering-custom-types
136
136
 
@@ -28,11 +28,11 @@ A scope declared with `scope-type: core` is reserved for the meta organisation o
28
28
 
29
29
  #### 01-scope-type-name
30
30
 
31
- The scope type defined by this policy is `core`. A scope declares it by setting `scope-type: core` in its `index.md` YAML frontmatter.
31
+ The scope type defined by this policy is `core`. A scope MUST declare it by setting `scope-type: core` in its `index.md` YAML frontmatter.
32
32
 
33
33
  #### 02-when-to-use
34
34
 
35
- Use `scope-type: core` when the scope's purpose is to hold meta governance content for a domain: writing standards, structural templates, process guidance for authoring or reviewing, skill files for domain-specific workflows, and ownership or contact information. Do not use it for scopes that contain actual rules or decisions intended for other teams to follow.
35
+ `scope-type: core` MUST be used when the scope's purpose is to hold meta governance content for a domain: writing standards, structural templates, process guidance for authoring or reviewing, skill files for domain-specific workflows, and ownership or contact information. It MUST NOT be used for scopes that contain actual rules or decisions intended for other teams to follow.
36
36
 
37
37
  #### 03-naming-convention
38
38
 
@@ -40,7 +40,7 @@ A scope of type `core` MUST have "core" somewhere in its name (e.g., `_core`, `m
40
40
 
41
41
  #### 04-allowed-content
42
42
 
43
- Content that belongs in a `core`-type scope:
43
+ A `core`-type scope SHOULD contain only the following types of content:
44
44
 
45
45
  - Writing standards and templates specific to the domain.
46
46
  - Structural conventions for that domain's policies.
@@ -23,7 +23,7 @@ How should a scope that exists as a reference model or standard be identified?
23
23
 
24
24
  #### 01-scope-type-name
25
25
 
26
- The scope type defined by this policy is `reference`. A scope declares it by setting `scope-type: reference` in its `index.md` YAML frontmatter.
26
+ The scope type defined by this policy is `reference`. A scope MUST declare it by setting `scope-type: reference` in its `index.md` YAML frontmatter.
27
27
 
28
28
  #### 02-when-to-use
29
29
 
@@ -21,17 +21,17 @@ How should a scope that documents a live, consumable platform or service be iden
21
21
 
22
22
  #### 01-scope-type-name
23
23
 
24
- The scope type defined by this policy is `platform`. A scope declares it by setting `scope-type: platform` in its `index.md` YAML frontmatter.
24
+ The scope type defined by this policy is `platform`. A scope MUST declare it by setting `scope-type: platform` in its `index.md` YAML frontmatter.
25
25
 
26
26
  #### 02-when-to-use
27
27
 
28
- Use `scope-type: platform` when the scope documents:
28
+ `scope-type: platform` MUST be used when the scope documents:
29
29
 
30
30
  - An existing cloud or runtime environment that teams can deploy to directly.
31
31
  - A shared foundational service available for consumption (e.g., a payment platform, a data platform, a messaging service).
32
32
  - An operational area or live capability that can be used without local instantiation.
33
33
 
34
- Do not use `scope-type: platform` for blueprints or reference architectures. Use `scope-type: reference` for those. Do not use it for business domains, products, or teams — use `scope-type: standard` for those.
34
+ `scope-type: platform` MUST NOT be used for blueprints or reference architectures use `scope-type: reference` for those. It MUST NOT be used for business domains, products, or teams — use `scope-type: standard` for those.
35
35
 
36
36
  #### 03-naming-convention
37
37
 
@@ -39,7 +39,7 @@ A scope of type `platform` MUST follow the naming pattern `{domain}-plat-{name}`
39
39
 
40
40
  #### 04-content-guidance
41
41
 
42
- Content in a `platform`-type scope describes what is available, how to access it, what decisions govern its use, and what constraints or service levels apply. It documents a live service — not a blueprint to copy.
42
+ Content in a `platform`-type scope SHOULD describe what is available, how to access it, what decisions govern its use, and what constraints or service levels apply. It MUST document a live service — not a blueprint to copy.
43
43
 
44
44
  ## References
45
45
 
@@ -21,22 +21,22 @@ Most XDRS scopes represent a business area, a product, a team, or a general grou
21
21
 
22
22
  #### 01-scope-type-name
23
23
 
24
- The scope type defined by this policy is `standard`. A scope declares it by setting `scope-type: standard` in its `index.md` YAML frontmatter.
24
+ The scope type defined by this policy is `standard`. A scope MUST declare it by setting `scope-type: standard` in its `index.md` YAML frontmatter.
25
25
 
26
26
  #### 02-when-to-use
27
27
 
28
- Use `scope-type: standard` for:
28
+ `scope-type: standard` SHOULD be used for:
29
29
 
30
30
  - Business areas, business units, or product lines.
31
31
  - Product or feature team scopes.
32
32
  - Cross-cutting engineering or architecture scopes that are not a platform or reference model.
33
33
  - Any scope that does not fit `core`, `reference`, `platform`, or `_local`.
34
34
 
35
- This is the default scope type. When uncertain, use `standard`.
35
+ This is the default scope type. When uncertain, `standard` SHOULD be used.
36
36
 
37
37
  #### 03-naming-convention
38
38
 
39
- There is no naming requirement for `standard`-type scopes. Any valid scope name is acceptable (e.g., `business-x`, `team-43`, `mobile-app`, `checkout`).
39
+ There is no naming requirement for `standard`-type scopes. Any valid scope name is acceptable (e.g., `business-x`, `team-43`, `mobile-app`, `checkout`). Scopes MUST follow the general scope naming rules defined in `_core-adr-policy-001`.
40
40
 
41
41
  #### 04-ordering
42
42
 
@@ -13,13 +13,13 @@ 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 MUST NEVER leave the repository.**
16
+ **Reserve `scope-type: _local` exclusively for the `_local` scope, which holds workspace-local decisions that MUST NOT leave the repository.**
17
17
 
18
18
  ### Details
19
19
 
20
20
  #### 01-scope-type-name
21
21
 
22
- The scope type defined by this policy is `_local`. A scope declares it by setting `scope-type: _local` in its `index.md` YAML frontmatter.
22
+ The scope type defined by this policy is `_local`. A scope MUST declare it by setting `scope-type: _local` in its `index.md` YAML frontmatter.
23
23
 
24
24
  #### 02-when-to-use
25
25
 
@@ -33,7 +33,7 @@ The value `scope-type: _local` is reserved exclusively for the single scope name
33
33
 
34
34
  #### 04-never-distributed
35
35
 
36
- Content in the `_local` scope MUST NOT be shared with or propagated to any other context. It is workspace-local only and is never packaged for distribution.
36
+ Content in the `_local` scope MUST NOT be shared with or propagated to any other context. It is workspace-local only and MUST NOT be packaged for distribution.
37
37
 
38
38
  ## References
39
39
 
@@ -152,15 +152,14 @@ guidance, and the explanatory overview close together without collapsing them in
152
152
 
153
153
  Follow [_core-adr-policy-001](../001-xdrs-core.md) and [_core-adr-policy-002](../002-policy-standards.md) strictly. Key rules:
154
154
 
155
- - Use **mandatory language** (`must`, `never`, `required`) for non-negotiable rules and
156
- **advisory language** (`should`, `recommended`) for guidance.
155
+ - Use uppercase BCP 14 keywords: MUST/MUST NOT for non-negotiable rules, SHOULD/SHOULD NOT for strong recommendations, MAY/OPTIONAL for optional choices.
157
156
  - Before citing a Policy as a requirement, check `Valid` first, then `Applied to`, and finally the decision text to confirm the decision is in scope for the current case.
158
157
  - All documents present in the collection are considered active. Remove documents that are no longer relevant.
159
158
  - Keep Policies under 1300 words as a rule of thumb (exceptions up to 2600 words for templates or more elaborate decisions). Move procedural detail to a co-located Skill.
160
159
  - Keep exploratory option analysis in a co-located Research document instead of bloating the Policy.
161
- - Always update the scope+type index and the root index after adding or changing a Policy.
162
- - Use `_local` scope when a decision is project-specific and must not be shared.
163
- - Never reuse a number once it has been assigned, even if the Policy is deleted.
160
+ - ALWAYS update the scope+type index and the root index after adding or changing a Policy.
161
+ - Use `_local` scope when a decision is project-specific and MUST NOT be shared.
162
+ - NEVER reuse a number once it has been assigned, even if the Policy is deleted.
164
163
 
165
164
  ### How to extend
166
165
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xdrs-core",
3
- "version": "0.37.1",
3
+ "version": "0.37.2",
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",