yarramate 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/adapter-mapping.d.ts +40 -0
  4. package/dist/adapter-mapping.js +200 -0
  5. package/dist/adapters/graphify-cli.d.ts +3 -0
  6. package/dist/adapters/graphify-cli.js +127 -0
  7. package/dist/adapters/graphify-entry.d.ts +1 -0
  8. package/dist/adapters/graphify-entry.js +1 -0
  9. package/dist/adapters/graphify.d.ts +23 -0
  10. package/dist/adapters/graphify.js +47 -0
  11. package/dist/adapters/likec4-cli.d.ts +3 -0
  12. package/dist/adapters/likec4-cli.js +662 -0
  13. package/dist/adapters/likec4-export.d.ts +25 -0
  14. package/dist/adapters/likec4-export.js +204 -0
  15. package/dist/adapters/likec4-kind-mapping.d.ts +22 -0
  16. package/dist/adapters/likec4-kind-mapping.js +60 -0
  17. package/dist/adapters/likec4-prepare.d.ts +28 -0
  18. package/dist/adapters/likec4-prepare.js +154 -0
  19. package/dist/adapters/likec4-project.d.ts +58 -0
  20. package/dist/adapters/likec4-project.js +176 -0
  21. package/dist/adapters/likec4.d.ts +4 -0
  22. package/dist/adapters/likec4.js +4 -0
  23. package/dist/architecture-state.d.ts +22 -0
  24. package/dist/architecture-state.js +63 -0
  25. package/dist/check-command.d.ts +2 -0
  26. package/dist/check-command.js +232 -0
  27. package/dist/cli-support.d.ts +24 -0
  28. package/dist/cli-support.js +81 -0
  29. package/dist/cli.d.ts +4 -0
  30. package/dist/cli.js +575 -0
  31. package/dist/compiler.d.ts +66 -0
  32. package/dist/compiler.js +940 -0
  33. package/dist/core-contract.d.ts +43 -0
  34. package/dist/core-contract.js +162 -0
  35. package/dist/evidence.d.ts +58 -0
  36. package/dist/evidence.js +161 -0
  37. package/dist/graph.d.ts +2 -0
  38. package/dist/graph.js +37 -0
  39. package/dist/index.d.ts +11 -0
  40. package/dist/index.js +9 -0
  41. package/dist/profile.d.ts +30 -0
  42. package/dist/profile.js +162 -0
  43. package/dist/projection.d.ts +42 -0
  44. package/dist/projection.js +183 -0
  45. package/dist/reconciliation.d.ts +26 -0
  46. package/dist/reconciliation.js +47 -0
  47. package/dist/source-document.d.ts +24 -0
  48. package/dist/source-document.js +80 -0
  49. package/dist/workspace.d.ts +29 -0
  50. package/dist/workspace.js +114 -0
  51. package/docs/CONSUMING-YARRAMATE.md +145 -0
  52. package/package.json +110 -0
  53. package/schema/yarramate-adapter-mapping.schema.json +59 -0
  54. package/schema/yarramate-check-result.schema.json +92 -0
  55. package/schema/yarramate-core-contract.schema.json +132 -0
  56. package/schema/yarramate-diagnostic-result.schema.json +64 -0
  57. package/schema/yarramate-document.schema.json +168 -0
  58. package/schema/yarramate-evidence-report.schema.json +73 -0
  59. package/schema/yarramate-evidence.schema.json +92 -0
  60. package/schema/yarramate-graph-v2.schema.json +170 -0
  61. package/schema/yarramate-likec4-check-result.schema.json +50 -0
  62. package/schema/yarramate-likec4-diagnostic-result.schema.json +69 -0
  63. package/schema/yarramate-likec4-generated-project-v2.schema.json +100 -0
  64. package/schema/yarramate-likec4-generated-project.schema.json +76 -0
  65. package/schema/yarramate-likec4-kind-mapping.schema.json +65 -0
  66. package/schema/yarramate-likec4-project.schema.json +160 -0
  67. package/schema/yarramate-profile.schema.json +113 -0
  68. package/schema/yarramate-projection-result.schema.json +177 -0
  69. package/schema/yarramate-projection.schema.json +126 -0
  70. package/schema/yarramate-reconciliation-report.schema.json +90 -0
  71. package/schema/yarramate-state-comparison.schema.json +61 -0
  72. package/schema/yarramate-workspace.schema.json +55 -0
  73. package/skills/yarramate-architecture/SKILL.md +135 -0
  74. package/skills/yarramate-architecture/agents/openai.yaml +4 -0
  75. package/skills/yarramate-architecture/references/journey-checklists.md +57 -0
  76. package/skills/yarramate-architecture/references/native-authoring.md +167 -0
@@ -0,0 +1,126 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://yarramate.org/schema/projection/v1",
4
+ "title": "YarraMate semantic projection",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["format", "id", "version", "query"],
8
+ "properties": {
9
+ "format": {
10
+ "const": "yarramate/projection/v1"
11
+ },
12
+ "id": {
13
+ "$ref": "#/$defs/id"
14
+ },
15
+ "version": {
16
+ "type": "string",
17
+ "pattern": "^[0-9]+\\.[0-9]+$"
18
+ },
19
+ "query": {
20
+ "type": "object",
21
+ "additionalProperties": false,
22
+ "properties": {
23
+ "subjects": {
24
+ "type": "array",
25
+ "minItems": 1,
26
+ "uniqueItems": true,
27
+ "items": {
28
+ "$ref": "#/$defs/subjectIdentity"
29
+ }
30
+ },
31
+ "documents": {
32
+ "type": "array",
33
+ "uniqueItems": true,
34
+ "items": {
35
+ "$ref": "#/$defs/id"
36
+ }
37
+ },
38
+ "kinds": {
39
+ "type": "array",
40
+ "uniqueItems": true,
41
+ "items": {
42
+ "$ref": "#/$defs/qualifiedKind"
43
+ }
44
+ },
45
+ "statuses": {
46
+ "type": "array",
47
+ "uniqueItems": true,
48
+ "items": {
49
+ "enum": ["planned", "current", "retired"]
50
+ }
51
+ },
52
+ "states": {
53
+ "type": "array",
54
+ "minItems": 1,
55
+ "uniqueItems": true,
56
+ "items": {
57
+ "$ref": "#/$defs/subjectIdentity"
58
+ }
59
+ },
60
+ "owners": {
61
+ "type": "array",
62
+ "minItems": 1,
63
+ "uniqueItems": true,
64
+ "items": {
65
+ "$ref": "#/$defs/subjectIdentity"
66
+ }
67
+ },
68
+ "constraints": {
69
+ "type": "array",
70
+ "minItems": 1,
71
+ "uniqueItems": true,
72
+ "items": {
73
+ "$ref": "#/$defs/subjectIdentity"
74
+ }
75
+ },
76
+ "relationshipKinds": {
77
+ "type": "array",
78
+ "minItems": 1,
79
+ "uniqueItems": true,
80
+ "items": {
81
+ "$ref": "#/$defs/qualifiedKind"
82
+ }
83
+ },
84
+ "kindMatching": {
85
+ "enum": ["exact", "descendants"]
86
+ },
87
+ "relationships": {
88
+ "enum": ["between", "connected", "none"]
89
+ },
90
+ "isolatedConcepts": {
91
+ "enum": ["include", "exclude"]
92
+ }
93
+ }
94
+ },
95
+ "presentation": {
96
+ "type": "object",
97
+ "additionalProperties": false,
98
+ "properties": {
99
+ "title": {
100
+ "$ref": "#/$defs/nonEmptyText"
101
+ },
102
+ "description": {
103
+ "$ref": "#/$defs/nonEmptyText"
104
+ }
105
+ }
106
+ }
107
+ },
108
+ "$defs": {
109
+ "id": {
110
+ "type": "string",
111
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
112
+ },
113
+ "qualifiedKind": {
114
+ "type": "string",
115
+ "pattern": "^[a-z][a-z0-9-]*(?:/[a-z][a-z0-9-]*)+@[0-9]+\\.[0-9]+#[a-z][A-Za-z0-9-]*$"
116
+ },
117
+ "subjectIdentity": {
118
+ "type": "string",
119
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*#[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
120
+ },
121
+ "nonEmptyText": {
122
+ "type": "string",
123
+ "minLength": 1
124
+ }
125
+ }
126
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://yarramate.org/schema/reconciliation-report/v1",
4
+ "title": "YarraMate reconciliation report",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["format", "workspace", "summary", "findings"],
8
+ "properties": {
9
+ "format": { "const": "yarramate/reconciliation-report/v1" },
10
+ "workspace": { "$ref": "#/$defs/id" },
11
+ "summary": {
12
+ "type": "object",
13
+ "additionalProperties": false,
14
+ "required": [
15
+ "evidenceDocuments",
16
+ "observations",
17
+ "confirmed",
18
+ "findings",
19
+ "contradicted",
20
+ "unknown",
21
+ "notObserved"
22
+ ],
23
+ "properties": {
24
+ "evidenceDocuments": { "type": "integer", "minimum": 0 },
25
+ "observations": { "type": "integer", "minimum": 0 },
26
+ "confirmed": { "type": "integer", "minimum": 0 },
27
+ "findings": { "type": "integer", "minimum": 0 },
28
+ "contradicted": { "type": "integer", "minimum": 0 },
29
+ "unknown": { "type": "integer", "minimum": 0 },
30
+ "notObserved": { "type": "integer", "minimum": 0 }
31
+ }
32
+ },
33
+ "findings": {
34
+ "type": "array",
35
+ "items": { "$ref": "#/$defs/finding" }
36
+ }
37
+ },
38
+ "$defs": {
39
+ "id": {
40
+ "type": "string",
41
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
42
+ },
43
+ "qualifiedIdentity": {
44
+ "type": "string",
45
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*#[a-z][a-z0-9]*(?:-[a-z0-9]+)*(?:~[a-z][a-z0-9-]*)?$"
46
+ },
47
+ "evidenceIdentity": {
48
+ "type": "string",
49
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*@[0-9]+\\.[0-9]+$"
50
+ },
51
+ "target": {
52
+ "type": "object",
53
+ "additionalProperties": false,
54
+ "required": ["type", "id"],
55
+ "properties": {
56
+ "type": { "enum": ["subject", "claim"] },
57
+ "id": { "$ref": "#/$defs/qualifiedIdentity" }
58
+ }
59
+ },
60
+ "evidenceLocator": {
61
+ "type": "object",
62
+ "additionalProperties": false,
63
+ "required": ["uri"],
64
+ "properties": {
65
+ "uri": { "type": "string", "minLength": 1 },
66
+ "message": { "type": "string", "minLength": 1 }
67
+ }
68
+ },
69
+ "finding": {
70
+ "type": "object",
71
+ "additionalProperties": false,
72
+ "required": [
73
+ "target",
74
+ "result",
75
+ "provider",
76
+ "evidenceDocument",
77
+ "evidence"
78
+ ],
79
+ "properties": {
80
+ "target": { "$ref": "#/$defs/target" },
81
+ "result": {
82
+ "enum": ["contradicted", "unknown", "not-observed"]
83
+ },
84
+ "provider": { "$ref": "#/$defs/id" },
85
+ "evidenceDocument": { "$ref": "#/$defs/evidenceIdentity" },
86
+ "evidence": { "$ref": "#/$defs/evidenceLocator" }
87
+ }
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://yarramate.org/schema/state-comparison/v1",
4
+ "title": "YarraMate architecture-state comparison",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "format",
9
+ "from",
10
+ "to",
11
+ "added",
12
+ "removed",
13
+ "retained"
14
+ ],
15
+ "properties": {
16
+ "format": {
17
+ "const": "yarramate/state-comparison/v1"
18
+ },
19
+ "from": {
20
+ "$ref": "#/$defs/subjectIdentity"
21
+ },
22
+ "to": {
23
+ "$ref": "#/$defs/subjectIdentity"
24
+ },
25
+ "added": {
26
+ "$ref": "#/$defs/subjects"
27
+ },
28
+ "removed": {
29
+ "$ref": "#/$defs/subjects"
30
+ },
31
+ "retained": {
32
+ "$ref": "#/$defs/subjects"
33
+ }
34
+ },
35
+ "$defs": {
36
+ "subjectIdentity": {
37
+ "type": "string",
38
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*#[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
39
+ },
40
+ "subject": {
41
+ "type": "object",
42
+ "additionalProperties": false,
43
+ "required": ["id", "type"],
44
+ "properties": {
45
+ "id": {
46
+ "$ref": "#/$defs/subjectIdentity"
47
+ },
48
+ "type": {
49
+ "enum": ["concept", "relationship"]
50
+ }
51
+ }
52
+ },
53
+ "subjects": {
54
+ "type": "array",
55
+ "uniqueItems": true,
56
+ "items": {
57
+ "$ref": "#/$defs/subject"
58
+ }
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://yarramate.org/schema/workspace/v1",
4
+ "title": "YarraMate workspace manifest",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "format",
9
+ "id",
10
+ "documents",
11
+ "profiles",
12
+ "projections",
13
+ "adapterMappings"
14
+ ],
15
+ "properties": {
16
+ "format": {
17
+ "const": "yarramate/workspace/v1"
18
+ },
19
+ "id": {
20
+ "$ref": "#/$defs/id"
21
+ },
22
+ "documents": {
23
+ "$ref": "#/$defs/patterns"
24
+ },
25
+ "profiles": {
26
+ "$ref": "#/$defs/patterns"
27
+ },
28
+ "projections": {
29
+ "$ref": "#/$defs/patterns"
30
+ },
31
+ "adapterMappings": {
32
+ "$ref": "#/$defs/patterns"
33
+ },
34
+ "evidence": {
35
+ "$ref": "#/$defs/patterns"
36
+ },
37
+ "contracts": {
38
+ "$ref": "#/$defs/patterns"
39
+ }
40
+ },
41
+ "$defs": {
42
+ "id": {
43
+ "type": "string",
44
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
45
+ },
46
+ "patterns": {
47
+ "type": "array",
48
+ "uniqueItems": true,
49
+ "items": {
50
+ "type": "string",
51
+ "minLength": 1
52
+ }
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: yarramate-architecture
3
+ description: Discover architecture in an existing repository or design a new solution before implementation using native YarraMate documents and the stable CLI. Use when an agent needs to map a codebase, propose an evidence-backed architecture model, brainstorm solution alternatives, define current/transition/target architecture, reconcile intent with evidence, or provide bounded architecture context to implementation work.
4
+ ---
5
+
6
+ # YarraMate architecture
7
+
8
+ Use one repository-native lifecycle for discovery and design:
9
+
10
+ ```text
11
+ evidence or design conversation
12
+ -> native-document proposal
13
+ -> deterministic CLI checks and projections
14
+ -> Git review
15
+ -> declared architectural intent
16
+ -> later evidence and reconciliation
17
+ ```
18
+
19
+ Native YarraMate documents are canonical. Generated graphs, Markdown, JSON
20
+ context, and diagrams are derived. Never promote evidence into declared intent
21
+ automatically.
22
+
23
+ ## Choose the journey
24
+
25
+ - Existing implementation is the starting point: follow **Discover an
26
+ existing project**.
27
+ - Intent and a not-yet-built solution are the starting point: follow **Design
28
+ a new solution**.
29
+ - Declared architecture and implementation both exist: begin with discovery,
30
+ preserve the declared model, then report supported, contradicted, unknown,
31
+ and unobserved claims without silently rewriting it.
32
+
33
+ Read [references/journey-checklists.md](references/journey-checklists.md) for
34
+ the minimum evidence and design questions. Read
35
+ [references/native-authoring.md](references/native-authoring.md) when native
36
+ document, projection, evidence, or architecture-state syntax is needed.
37
+
38
+ ## Discover an existing project
39
+
40
+ 1. Inspect repository instructions, structure, manifests, dependencies,
41
+ entrypoints, tests, deployment files, and existing architecture sources.
42
+ 2. If no workspace exists, run `yarramate init .`. Do not overwrite an
43
+ existing `.yarramate/`.
44
+ 3. Separate direct observations from architectural interpretation. Record the
45
+ inspected repository locations before proposing semantic concepts.
46
+ 4. Propose the smallest useful native model:
47
+ - stable responsibilities and externally meaningful services;
48
+ - principal information and dependencies;
49
+ - significant actors, constraints, and ownership only when supported;
50
+ - current state by default; do not infer target intent from code.
51
+ 5. Prefer `yarramate add` and `yarramate connect` for simple additions. Edit
52
+ YAML directly when states or several related declarations make that clearer.
53
+ 6. Add an evidence overlay only for existing subjects or stable claim IDs.
54
+ Evidence supports or challenges the proposal; it is not a second model.
55
+ 7. Add one focused projection that answers the repository-orientation
56
+ question.
57
+ 8. Run:
58
+
59
+ ```sh
60
+ yarramate check .yarramate/workspace.yaml --json
61
+ yarramate evidence .yarramate/evidence/<evidence>.yaml .yarramate/workspace.yaml
62
+ yarramate reconcile .yarramate/workspace.yaml
63
+ yarramate context .yarramate/projections/<projection>.yaml .yarramate/workspace.yaml
64
+ yarramate view .yarramate/projections/<projection>.yaml .yarramate/workspace.yaml
65
+ ```
66
+
67
+ 9. Present observations, reconciliation findings, interpretive proposals,
68
+ evidence gaps, and Git diff separately. Do not claim completeness from a
69
+ green check and do not automatically turn findings into edits.
70
+
71
+ ## Design a new solution
72
+
73
+ 1. Capture the decision context before components:
74
+ - drivers, stakeholders, desired outcomes, and constraints;
75
+ - material assumptions and unresolved questions;
76
+ - boundaries and responsibilities.
77
+ 2. Model only materially different alternatives. Use stable concepts and
78
+ relationships; do not hide an alternative in free-form metadata.
79
+ 3. Record the selected approach through explicit relationships and focused
80
+ projections. Use architecture states when baseline, transition, or target
81
+ presence matters; do not misuse lifecycle status as a decision verdict.
82
+ 4. Add the principal services, components, information, responsibilities, and
83
+ dependencies required to begin implementation. Partial detail is valid.
84
+ 5. Create:
85
+ - an alternatives projection for the decision;
86
+ - a bounded target projection for implementation agents.
87
+ 6. Run:
88
+
89
+ ```sh
90
+ yarramate check .yarramate/workspace.yaml --json
91
+ yarramate context .yarramate/projections/<alternatives>.yaml .yarramate/workspace.yaml
92
+ yarramate context .yarramate/projections/<target>.yaml .yarramate/workspace.yaml
93
+ yarramate view .yarramate/projections/<target>.yaml .yarramate/workspace.yaml
94
+ yarramate compare <baseline-state> <target-state> .yarramate/workspace.yaml
95
+ ```
96
+
97
+ 7. Present alternatives, selected intent, unresolved decisions, and bounded
98
+ implementation context. Do not generate code until the requested design
99
+ decision is reviewable.
100
+
101
+ ## Correctness and authority
102
+
103
+ - Treat `check` as deterministic correctness, never as architecture approval,
104
+ completeness, or quality scoring.
105
+ - Keep adapter fields outside native documents.
106
+ - Use globally qualified identities at CLI and projection boundaries.
107
+ - Preserve source-located diagnostics verbatim when asking the author to fix
108
+ input.
109
+ - Let Git provide authorship, review, history, and acceptance.
110
+ - Stop for user direction when a choice changes the solution boundary,
111
+ selected alternative, authoritative constraint, or product contract.
112
+ - Do not introduce a database, server, approval workflow, or harness-specific
113
+ canonical format.
114
+
115
+ ## Handoff
116
+
117
+ Report:
118
+
119
+ - journey used and question answered;
120
+ - canonical files proposed or changed;
121
+ - observations and evidence results;
122
+ - projections produced;
123
+ - validation commands and outcomes;
124
+ - unresolved architectural decisions;
125
+ - whether changes are merely proposed or already accepted in Git.
126
+
127
+ If YarraMate itself produced confusing behaviour, blocked adoption, lacked a
128
+ needed capability, or required an awkward workaround, identify that separately
129
+ as product feedback and direct the user to:
130
+
131
+ `https://github.com/yarrasys/yarramate/issues/new`
132
+
133
+ Issues may contain incomplete ideas or early observations; a proposed fix is
134
+ not required. Do not create an external issue automatically unless the user
135
+ asks you to.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "YarraMate Architecture"
3
+ short_description: "Discover and design repository architecture"
4
+ default_prompt: "Use $yarramate-architecture to discover or design this project architecture with native YarraMate documents."
@@ -0,0 +1,57 @@
1
+ # Journey checklists
2
+
3
+ ## Discovery evidence
4
+
5
+ Inspect only what materially supports the proposed architecture:
6
+
7
+ - repository instructions and package/workspace manifests;
8
+ - executable entrypoints and public interfaces;
9
+ - stable modules and responsibility boundaries;
10
+ - persisted or exchanged information;
11
+ - external services and runtime/deployment configuration;
12
+ - tests that demonstrate significant behavior;
13
+ - ownership or constraints explicitly present in repository sources.
14
+
15
+ Distinguish:
16
+
17
+ - **observed** — directly supported by a locator;
18
+ - **proposed interpretation** — semantic meaning inferred for review;
19
+ - **unknown** — evidence is insufficient;
20
+ - **declared intent** — already accepted in native documents.
21
+
22
+ Do not infer organizational ownership from Git authorship, target intent from
23
+ unfinished code, or architectural importance from file size.
24
+
25
+ ## Design questions
26
+
27
+ Ask only questions that can materially change the architecture:
28
+
29
+ - What outcome and driver justify the solution?
30
+ - Which constraints are non-negotiable?
31
+ - Who or what consumes the solution?
32
+ - What responsibility belongs inside versus outside the boundary?
33
+ - Which information must be owned, persisted, or exchanged?
34
+ - Which alternatives differ in boundaries, responsibility, dependency, or
35
+ operational characteristics?
36
+ - What makes an alternative selected, rejected, or still unresolved?
37
+ - What must exist in the initial target for implementation to begin?
38
+
39
+ Avoid demanding a complete catalogue before a useful target can be reviewed.
40
+
41
+ ## Completion signals
42
+
43
+ Discovery is minimally useful when:
44
+
45
+ - native documents pass `yarramate check`;
46
+ - significant proposed subjects have traceable observations or are explicitly
47
+ identified as interpretation;
48
+ - a focused projection gives an agent useful repository context;
49
+ - evidence has not been promoted automatically.
50
+
51
+ Design is minimally useful when:
52
+
53
+ - drivers and constraints are visible;
54
+ - material alternatives remain reviewable;
55
+ - the selected target has explicit boundaries and relationships;
56
+ - a bounded target projection can guide implementation;
57
+ - missing detail is visible without becoming a Core correctness error.