renma 0.16.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +157 -1
- package/README.md +219 -748
- package/architecture.md +533 -0
- package/design.md +469 -0
- package/dist/agent-skills.d.ts +1 -1
- package/dist/agent-skills.d.ts.map +1 -1
- package/dist/agent-skills.js +28 -8
- package/dist/agent-skills.js.map +1 -1
- package/dist/catalog.d.ts +1 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +120 -12
- package/dist/catalog.js.map +1 -1
- package/dist/cli-help.d.ts +15 -9
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +32 -9
- package/dist/cli-help.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +162 -40
- package/dist/cli.js.map +1 -1
- package/dist/commands/bom.d.ts +6 -3
- package/dist/commands/bom.d.ts.map +1 -1
- package/dist/commands/bom.js +27 -7
- package/dist/commands/bom.js.map +1 -1
- package/dist/commands/catalog.d.ts +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +11 -4
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/ci-report.d.ts.map +1 -1
- package/dist/commands/ci-report.js +18 -5
- package/dist/commands/ci-report.js.map +1 -1
- package/dist/commands/diff.js +8 -2
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/graph.d.ts +6 -2
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +30 -14
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +2 -0
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/ownership.d.ts +4 -3
- package/dist/commands/ownership.d.ts.map +1 -1
- package/dist/commands/ownership.js +27 -23
- package/dist/commands/ownership.js.map +1 -1
- package/dist/commands/readiness.d.ts +2 -1
- package/dist/commands/readiness.d.ts.map +1 -1
- package/dist/commands/readiness.js +105 -36
- package/dist/commands/readiness.js.map +1 -1
- package/dist/commands/scaffold.d.ts +3 -0
- package/dist/commands/scaffold.d.ts.map +1 -1
- package/dist/commands/scaffold.js +28 -2
- package/dist/commands/scaffold.js.map +1 -1
- package/dist/commands/suggest-metadata.d.ts.map +1 -1
- package/dist/commands/suggest-metadata.js +56 -8
- package/dist/commands/suggest-metadata.js.map +1 -1
- package/dist/commands/suggest-semantic-split.js +3 -3
- package/dist/commands/suggest-semantic-split.js.map +1 -1
- package/dist/commands/trust-graph.d.ts.map +1 -1
- package/dist/commands/trust-graph.js +12 -0
- package/dist/commands/trust-graph.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -3
- package/dist/config.js.map +1 -1
- package/dist/dependency-resolution.d.ts +6 -0
- package/dist/dependency-resolution.d.ts.map +1 -0
- package/dist/dependency-resolution.js +11 -0
- package/dist/dependency-resolution.js.map +1 -0
- package/dist/diagnostic-ids.d.ts +8 -0
- package/dist/diagnostic-ids.d.ts.map +1 -1
- package/dist/diagnostic-ids.js +8 -0
- package/dist/diagnostic-ids.js.map +1 -1
- package/dist/discovery.d.ts +33 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +178 -80
- package/dist/discovery.js.map +1 -1
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +15 -0
- package/dist/markdown.js.map +1 -1
- package/dist/model.d.ts +17 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +4 -1
- package/dist/model.js.map +1 -1
- package/dist/quality-profile.d.ts +91 -0
- package/dist/quality-profile.d.ts.map +1 -0
- package/dist/quality-profile.js +91 -0
- package/dist/quality-profile.js.map +1 -0
- package/dist/repeated-context.d.ts.map +1 -1
- package/dist/repeated-context.js +38 -83
- package/dist/repeated-context.js.map +1 -1
- package/dist/repository-boundary.d.ts +30 -0
- package/dist/repository-boundary.d.ts.map +1 -0
- package/dist/repository-boundary.js +116 -0
- package/dist/repository-boundary.js.map +1 -0
- package/dist/repository-evidence.d.ts +2 -0
- package/dist/repository-evidence.d.ts.map +1 -1
- package/dist/repository-evidence.js +6 -4
- package/dist/repository-evidence.js.map +1 -1
- package/dist/repository-paths.d.ts +19 -2
- package/dist/repository-paths.d.ts.map +1 -1
- package/dist/repository-paths.js +123 -14
- package/dist/repository-paths.js.map +1 -1
- package/dist/rules.d.ts +2 -0
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +322 -256
- package/dist/rules.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +5 -1
- package/dist/scanner.js.map +1 -1
- package/dist/security-diagnostics.d.ts.map +1 -1
- package/dist/security-diagnostics.js +95 -30
- package/dist/security-diagnostics.js.map +1 -1
- package/dist/security-diff.d.ts +5 -2
- package/dist/security-diff.d.ts.map +1 -1
- package/dist/security-diff.js +20 -4
- package/dist/security-diff.js.map +1 -1
- package/dist/security-policy-inventory.d.ts +15 -3
- package/dist/security-policy-inventory.d.ts.map +1 -1
- package/dist/security-policy-inventory.js +123 -26
- package/dist/security-policy-inventory.js.map +1 -1
- package/dist/security-policy.d.ts +7 -0
- package/dist/security-policy.d.ts.map +1 -1
- package/dist/security-policy.js +70 -7
- package/dist/security-policy.js.map +1 -1
- package/dist/security-posture.d.ts.map +1 -1
- package/dist/security-posture.js +2 -1
- package/dist/security-posture.js.map +1 -1
- package/dist/skill-migration.js +2 -0
- package/dist/skill-migration.js.map +1 -1
- package/dist/static-support.d.ts +13 -0
- package/dist/static-support.d.ts.map +1 -0
- package/dist/static-support.js +284 -0
- package/dist/static-support.js.map +1 -0
- package/dist/token-estimator.d.ts +21 -0
- package/dist/token-estimator.d.ts.map +1 -0
- package/dist/token-estimator.js +84 -0
- package/dist/token-estimator.js.map +1 -0
- package/dist/trust-graph.d.ts +3 -3
- package/dist/trust-graph.d.ts.map +1 -1
- package/dist/trust-graph.js +76 -21
- package/dist/trust-graph.js.map +1 -1
- package/dist/types.d.ts +7 -2
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +61 -0
- package/docs/advanced-skill-authoring.md +147 -0
- package/docs/agent-skills-compatibility.md +508 -0
- package/docs/authoring-guide.md +382 -0
- package/docs/context-conflict-diagnostics.md +32 -0
- package/docs/context-language-diagnostics.md +99 -0
- package/docs/context-lens.md +253 -0
- package/docs/context-lifecycle-diagnostics.md +55 -0
- package/docs/diagnostics.md +406 -0
- package/docs/metadata-budget.md +14 -0
- package/docs/quality-profile.md +123 -0
- package/docs/repository-context-bom.md +172 -0
- package/docs/schemas/repository-context-bom-v2.schema.json +648 -0
- package/docs/schemas/trust-graph-v2.schema.json +301 -0
- package/docs/security-policy.md +354 -0
- package/docs/trust-graph.md +47 -0
- package/docs/user-manual.md +842 -0
- package/examples/context-lens/README.md +101 -0
- package/examples/context-lens/contexts/testing/boundary-value-analysis.md +23 -0
- package/examples/context-lens/lenses/testing/spec-review-boundary-values.md +29 -0
- package/examples/context-lens/lenses/testing/test-design-boundary-values.md +29 -0
- package/examples/context-lens/skills/testing/spec-review/SKILL.md +49 -0
- package/examples/context-repo/README.md +148 -0
- package/examples/context-repo/contexts/domain/payment/idempotency.md +27 -0
- package/examples/context-repo/contexts/testing/boundary-value-analysis.md +26 -0
- package/examples/context-repo/contexts/testing/negative-testing.md +26 -0
- package/examples/context-repo/lenses/testing/spec-review-boundary-values.md +35 -0
- package/examples/context-repo/renma.config.json +12 -0
- package/examples/context-repo/skills/testing/spec-review/SKILL.md +71 -0
- package/examples/context-repo/tools/appium/README.md +14 -0
- package/examples/github-actions/renma-ci-report.yml +36 -0
- package/examples/interactive-placeholder/README.md +104 -0
- package/examples/interactive-placeholder/assets/template.txt +1 -0
- package/examples/interactive-placeholder/renma.config.json +6 -0
- package/examples/interactive-placeholder/skills/replace-placeholder/SKILL.md +54 -0
- package/examples/interactive-placeholder/tools/README.md +48 -0
- package/examples/interactive-placeholder/tools/placeholder-demo.mjs +99 -0
- package/package.json +10 -1
- package/plan-discovery.md +749 -0
- package/plan.md +90 -0
- package/scripts/verify-package.mjs +104 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# Context Lens Assets
|
|
2
|
+
|
|
3
|
+
`context_lens` is a Renma asset type for purpose-oriented interpretation over reusable context assets.
|
|
4
|
+
|
|
5
|
+
It keeps the Renma core boundary intact:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
LLM proposes. Renma verifies. Human approves.
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Renma catalogs and validates repository assets. Agents and tools decide what to do at runtime.
|
|
12
|
+
|
|
13
|
+
Renma does not select lenses for a task, rank lenses, assemble prompts, inject context, or run an LLM to judge lens quality.
|
|
14
|
+
|
|
15
|
+
## Model
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
references -> contexts -> context_lenses -> skills
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The design principle is:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
Knowledge should be reusable.
|
|
25
|
+
Interpretation should be purpose-oriented.
|
|
26
|
+
Execution should be skill-specific.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Use this split when the same base context should be read differently for different purposes.
|
|
30
|
+
|
|
31
|
+
For example, a payment retry context can support:
|
|
32
|
+
|
|
33
|
+
- a spec review lens that focuses on ambiguity and source-of-truth gaps
|
|
34
|
+
- a test design lens that focuses on boundary values and expected results
|
|
35
|
+
- a failure analysis lens that focuses on observed symptoms and logs
|
|
36
|
+
|
|
37
|
+
The base context remains reusable. The lens explains how that context should be interpreted for a purpose.
|
|
38
|
+
|
|
39
|
+
See [`examples/context-lens`](../examples/context-lens) for a runnable fixture with two valid lenses, readiness output, inspect output, and an invalid diagnostic example.
|
|
40
|
+
|
|
41
|
+
## Minimal Valid Lens
|
|
42
|
+
|
|
43
|
+
A minimal valid lens declares a stable ID, owner, purpose, and at least one `applies_to` target.
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
---
|
|
47
|
+
id: lens.testing.spec-review.boundary-values
|
|
48
|
+
type: context_lens
|
|
49
|
+
owner: qa-platform
|
|
50
|
+
status: experimental
|
|
51
|
+
purpose: spec_review
|
|
52
|
+
applies_to:
|
|
53
|
+
- context.testing.boundary-value-analysis
|
|
54
|
+
---
|
|
55
|
+
# Spec Review Lens for Boundary Values
|
|
56
|
+
|
|
57
|
+
Review the boundary value analysis context for ambiguity, missing limits, and unclear sources of truth.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`type: context_lens` is optional for files under `lenses/**`, but it is recommended because it makes the file's intent obvious in code review. It is required when a lens is stored under `context/**` or `contexts/**`.
|
|
61
|
+
|
|
62
|
+
## Multiple Lenses
|
|
63
|
+
|
|
64
|
+
Multiple lenses can interpret the same base context for different review purposes:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
---
|
|
68
|
+
id: lens.testing.spec-review.boundary-values
|
|
69
|
+
type: context_lens
|
|
70
|
+
owner: qa-platform
|
|
71
|
+
status: experimental
|
|
72
|
+
purpose: spec_review
|
|
73
|
+
applies_to:
|
|
74
|
+
- context.testing.boundary-value-analysis
|
|
75
|
+
focus:
|
|
76
|
+
- ambiguity
|
|
77
|
+
- missing boundary
|
|
78
|
+
expected_outputs:
|
|
79
|
+
- unresolved questions
|
|
80
|
+
- risk notes
|
|
81
|
+
---
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
---
|
|
86
|
+
id: lens.testing.test-design.boundary-values
|
|
87
|
+
type: context_lens
|
|
88
|
+
owner: qa-platform
|
|
89
|
+
status: experimental
|
|
90
|
+
purpose: test_design
|
|
91
|
+
applies_to:
|
|
92
|
+
- context.testing.boundary-value-analysis
|
|
93
|
+
focus:
|
|
94
|
+
- inclusive limits
|
|
95
|
+
- zero and empty values
|
|
96
|
+
- overflow behavior
|
|
97
|
+
expected_outputs:
|
|
98
|
+
- test cases
|
|
99
|
+
- edge-case checklist
|
|
100
|
+
---
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
A skill declares static lens relationships with `requires_lens` or `optional_lens`:
|
|
104
|
+
|
|
105
|
+
```yaml
|
|
106
|
+
---
|
|
107
|
+
id: skill.testing.spec-review
|
|
108
|
+
owner: qa-platform
|
|
109
|
+
status: experimental
|
|
110
|
+
requires_context:
|
|
111
|
+
- context.testing.boundary-value-analysis
|
|
112
|
+
requires_lens:
|
|
113
|
+
- lens.testing.spec-review.boundary-values
|
|
114
|
+
---
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
These fields create catalog and graph relationships. They do not make Renma choose runtime context or inject the lens into an agent.
|
|
118
|
+
|
|
119
|
+
## Supported Fields
|
|
120
|
+
|
|
121
|
+
Prefer compact, flat metadata. Detailed interpretation guidance belongs in the Markdown body, not in frontmatter.
|
|
122
|
+
|
|
123
|
+
- `id`: required stable lens ID. Prefer the `lens.<domain>.<purpose>` prefix style.
|
|
124
|
+
- `type`: recommended `context_lens` discriminator.
|
|
125
|
+
- `owner`: required accountable owner.
|
|
126
|
+
- `status`: optional lifecycle status: `experimental`, `stable`, `deprecated`, or `archived`.
|
|
127
|
+
- `version`: optional lens schema version. The supported schema version is `1`.
|
|
128
|
+
- `scope`: optional lens scope. The supported scope is `context`.
|
|
129
|
+
- `purpose`: required short purpose label such as `spec_review`, `test_design`, or `failure_analysis`.
|
|
130
|
+
- `applies_to`: required context asset IDs or repository-relative paths this lens interprets.
|
|
131
|
+
- `focus`: optional compact review focus terms.
|
|
132
|
+
- `expected_outputs`: optional compact output expectations.
|
|
133
|
+
|
|
134
|
+
Deprecated field aliases such as `target`, `targets`, `output`, and `outputs` produce warnings. Use `applies_to` and `expected_outputs`.
|
|
135
|
+
|
|
136
|
+
## Diagnostics
|
|
137
|
+
|
|
138
|
+
Context Lens governance diagnostics use stable string codes in JSON output. The detailed diagnostics appear in `scan` and `readiness`; concise summaries appear in `readiness` and `inspect`.
|
|
139
|
+
|
|
140
|
+
Invalid example:
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
---
|
|
144
|
+
id: lens.testing.spec-review.boundary-values
|
|
145
|
+
owner: qa-platform
|
|
146
|
+
applies_to:
|
|
147
|
+
- ./contexts/testing/missing.md
|
|
148
|
+
---
|
|
149
|
+
# Spec Review Lens
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Expected diagnostics include:
|
|
153
|
+
|
|
154
|
+
- `CONTEXT-LENS-MISSING-REQUIRED-FIELD` because `purpose` is missing.
|
|
155
|
+
- `CONTEXT-LENS-PATH-NORMALIZATION-MISMATCH` because `./contexts/testing/missing.md` normalizes to `contexts/testing/missing.md`.
|
|
156
|
+
- `CONTEXT-LENS-TARGET-NOT-FOUND` because the target path does not resolve to a cataloged asset.
|
|
157
|
+
|
|
158
|
+
Blocking Context Lens diagnostics are `error` diagnostics. Warnings are reported by default but do not fail readiness unless another policy makes the repository not ready.
|
|
159
|
+
|
|
160
|
+
## Readiness And Inspect
|
|
161
|
+
|
|
162
|
+
`renma readiness --json` includes an additive `summary.contextLens` object:
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"summary": {
|
|
167
|
+
"contextLens": {
|
|
168
|
+
"enabled": true,
|
|
169
|
+
"detected": true,
|
|
170
|
+
"totalLensCount": 2,
|
|
171
|
+
"validLensCount": 2,
|
|
172
|
+
"invalidLensCount": 0,
|
|
173
|
+
"diagnosticCounts": {
|
|
174
|
+
"error": 0,
|
|
175
|
+
"warning": 0,
|
|
176
|
+
"info": 0
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Markdown readiness includes a `Context Lens` section with lens counts, diagnostic counts, a representative diagnostic code, definition paths, and target references.
|
|
184
|
+
|
|
185
|
+
`renma inspect <file> --format text` includes a concise Context Lens summary:
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
Context Lens:
|
|
189
|
+
- Enabled: yes
|
|
190
|
+
- Detected: yes
|
|
191
|
+
- Lenses: 2/2 valid (0 invalid)
|
|
192
|
+
- Diagnostics: error 0, warning 0, info 0
|
|
193
|
+
- Representative diagnostic: (none)
|
|
194
|
+
- Definition paths: lenses/testing/spec-review-boundary-values.md, lenses/testing/test-design-boundary-values.md
|
|
195
|
+
- Target references: context.testing.boundary-value-analysis
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
`renma inspect <file> --format json` includes the same additive `contextLens` summary object.
|
|
199
|
+
|
|
200
|
+
## CI Usage
|
|
201
|
+
|
|
202
|
+
Use readiness in CI when Context Lens governance should block merges:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
renma readiness . --json
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
The command exits `1` when readiness is not ready, including when blocking Context Lens diagnostics are present.
|
|
209
|
+
|
|
210
|
+
For pull-request review artifacts, `renma ci-report` continues to report deterministic catalog, graph, readiness, finding, and security deltas. It does not call an LLM or make subjective lens-quality judgments.
|
|
211
|
+
|
|
212
|
+
## Authoring Helpers
|
|
213
|
+
|
|
214
|
+
Use `scaffold` to create a compact starter lens:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
renma scaffold context_lens lenses/testing/spec-review-boundary-values.md \
|
|
218
|
+
--id lens.testing.spec-review.boundary-values \
|
|
219
|
+
--title "Spec Review Boundary Values Lens" \
|
|
220
|
+
--owner qa-platform \
|
|
221
|
+
--tags testing,spec-review
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Use `inspect` on a lens to review its purpose metadata and declared graph neighborhood. Lens inspection shows inbound skill references, outbound `applies_to` context targets, and the static `skill -> lens -> context` chain.
|
|
225
|
+
|
|
226
|
+
## Good Lens Boundaries
|
|
227
|
+
|
|
228
|
+
A lens should answer:
|
|
229
|
+
|
|
230
|
+
- What purpose is this context being read for?
|
|
231
|
+
- Which context assets does it apply to?
|
|
232
|
+
- What questions, risks, checks, or evidence should be emphasized?
|
|
233
|
+
- What output shape should the agent or human reviewer produce?
|
|
234
|
+
|
|
235
|
+
A lens should not become:
|
|
236
|
+
|
|
237
|
+
- a copy of the base context
|
|
238
|
+
- a long prompt template
|
|
239
|
+
- a runtime routing rule
|
|
240
|
+
- a QA-specific rule hardcoded into Renma core
|
|
241
|
+
- a replacement for the skill entrypoint
|
|
242
|
+
|
|
243
|
+
## Non-Goals For 0.12.0
|
|
244
|
+
|
|
245
|
+
Renma 0.12.0 intentionally does not implement:
|
|
246
|
+
|
|
247
|
+
- runtime selection
|
|
248
|
+
- prompt assembly
|
|
249
|
+
- context injection
|
|
250
|
+
- automatic LLM judgment or subjective scoring
|
|
251
|
+
- external signal imports from Codex, Claude, IDEs, or similar tools
|
|
252
|
+
|
|
253
|
+
The release stabilizes deterministic Context Lens governance: summary output, diagnostics, readiness integration, inspect integration, docs, and examples.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Context Lifecycle Diagnostics
|
|
2
|
+
|
|
3
|
+
Renma checks shared context lifecycle metadata so deprecated context assets remain traceable and do not point at stale replacements.
|
|
4
|
+
|
|
5
|
+
These diagnostics are deterministic catalog diagnostics. They do not choose replacement context at runtime, infer migration intent, create scan finding IDs, or rewrite metadata.
|
|
6
|
+
|
|
7
|
+
## Scope
|
|
8
|
+
|
|
9
|
+
These diagnostics apply to governed shared context assets: context assets with a `context.*` id, owner metadata, and usage-boundary metadata (`when_to_use` and `when_not_to_use`). Lightweight fixtures or unmanaged context-like files are ignored.
|
|
10
|
+
|
|
11
|
+
## Deprecated context without replacement
|
|
12
|
+
|
|
13
|
+
Renma warns when a deprecated shared context asset has no `superseded_by` metadata:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
Deprecated shared context asset is missing superseded_by metadata.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Prefer linking deprecated context to the current replacement:
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
status: deprecated
|
|
23
|
+
superseded_by:
|
|
24
|
+
- context.testing.boundary-value-analysis
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If there is intentionally no replacement, keep that rationale in the Markdown body and consider whether `archived` is more appropriate than `deprecated`.
|
|
28
|
+
|
|
29
|
+
## Invalid superseded_by targets
|
|
30
|
+
|
|
31
|
+
Renma warns when `superseded_by` points at itself, points at a missing catalog entry, or points at another inactive asset.
|
|
32
|
+
|
|
33
|
+
Example messages:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
Shared context asset superseded_by references itself: "context.testing.old-boundary-analysis".
|
|
37
|
+
Shared context asset superseded_by target "context.testing.missing" does not match a catalog entry.
|
|
38
|
+
Shared context asset superseded_by target "context.testing.old-target" resolves to an inactive asset with status "deprecated".
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`superseded_by` should point at a stable or experimental catalog asset that can serve as the reviewed replacement.
|
|
42
|
+
|
|
43
|
+
## Supersession cycles
|
|
44
|
+
|
|
45
|
+
Renma warns when deprecated context assets form a replacement cycle:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
Shared context asset superseded_by chain forms a cycle involving "context.testing.old-a".
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Break the cycle by pointing each deprecated asset at the actual current replacement, or by archiving assets that have no replacement.
|
|
52
|
+
|
|
53
|
+
## Relationship to context lens
|
|
54
|
+
|
|
55
|
+
These checks are useful before adding purpose-oriented lens assets. A lens should not have to reason through stale replacement chains or cycles when it depends on base context.
|