@sdd-method/author-cli 0.0.0-stage → 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.
- package/LICENSE +201 -0
- package/NOTICE +17 -0
- package/README.md +6 -2
- package/dist/author-bin.js +8 -0
- package/dist/author-program.js +99 -0
- package/dist/lib/adr-origin.js +59 -0
- package/dist/lib/agent-harness.js +37 -0
- package/dist/lib/api-surface/__fixtures__/serverless-repo/serverless/serverless.yml +18 -0
- package/dist/lib/api-surface/analyzers/library.js +95 -0
- package/dist/lib/api-surface/analyzers/serverless.js +336 -0
- package/dist/lib/api-surface/analyzers/spring.js +237 -0
- package/dist/lib/api-surface/analyzers/terraform.js +109 -0
- package/dist/lib/api-surface/detect.js +25 -0
- package/dist/lib/api-surface/emit.js +109 -0
- package/dist/lib/api-surface/file-set.js +43 -0
- package/dist/lib/api-surface/index.js +134 -0
- package/dist/lib/api-surface/types.js +17 -0
- package/dist/lib/briefing/index.js +13 -0
- package/dist/lib/briefing/render.js +132 -0
- package/dist/lib/briefing/variables.js +92 -0
- package/dist/lib/catalogue/application-archetype/vocabulary.js +177 -0
- package/dist/lib/catalogue/archetype/maps/android.yaml +66 -0
- package/dist/lib/catalogue/archetype/maps/swiftui.yaml +58 -0
- package/dist/lib/catalogue/archetype/maps/uikit.yaml +48 -0
- package/dist/lib/catalogue/archetype/maps/web-generic.yaml +86 -0
- package/dist/lib/catalogue/archetype/openui-archetype-vocabulary.yaml +46 -0
- package/dist/lib/catalogue/archetype/resolver.js +103 -0
- package/dist/lib/catalogue/archetype/wireframe.js +418 -0
- package/dist/lib/catalogue/baseline-check.js +151 -0
- package/dist/lib/catalogue/build.js +1502 -0
- package/dist/lib/catalogue/builders/adr-supersedes.js +103 -0
- package/dist/lib/catalogue/builders/adrs.js +222 -0
- package/dist/lib/catalogue/builders/application-conformance-coverage.js +47 -0
- package/dist/lib/catalogue/builders/application-data-plane-bindings.js +115 -0
- package/dist/lib/catalogue/builders/c4-components.js +229 -0
- package/dist/lib/catalogue/builders/c4-containers.js +240 -0
- package/dist/lib/catalogue/builders/c4-entity-rollups.js +87 -0
- package/dist/lib/catalogue/builders/c4-external-systems.js +194 -0
- package/dist/lib/catalogue/builders/c4-l1-candidates.js +107 -0
- package/dist/lib/catalogue/builders/c4-systems.js +98 -0
- package/dist/lib/catalogue/builders/capabilities.js +488 -0
- package/dist/lib/catalogue/builders/capability-domain-model.js +74 -0
- package/dist/lib/catalogue/builders/capability-edges.js +256 -0
- package/dist/lib/catalogue/builders/capability-spec-walker.js +99 -0
- package/dist/lib/catalogue/builders/capability-spec.js +348 -0
- package/dist/lib/catalogue/builders/container-dependency.js +183 -0
- package/dist/lib/catalogue/builders/contracts.js +402 -0
- package/dist/lib/catalogue/builders/data-items.js +344 -0
- package/dist/lib/catalogue/builders/data-store-mapping.js +113 -0
- package/dist/lib/catalogue/builders/domain-models.js +175 -0
- package/dist/lib/catalogue/builders/domains.js +119 -0
- package/dist/lib/catalogue/builders/edge-label-merge.js +19 -0
- package/dist/lib/catalogue/builders/entities-manifest.js +160 -0
- package/dist/lib/catalogue/builders/entities-mermaid.js +189 -0
- package/dist/lib/catalogue/builders/entity-persistence.js +102 -0
- package/dist/lib/catalogue/builders/entity-slug.js +47 -0
- package/dist/lib/catalogue/builders/event-catalog-walker.js +186 -0
- package/dist/lib/catalogue/builders/event-edges.js +327 -0
- package/dist/lib/catalogue/builders/events.js +168 -0
- package/dist/lib/catalogue/builders/evidence-class.js +43 -0
- package/dist/lib/catalogue/builders/evidence-target-repo.js +67 -0
- package/dist/lib/catalogue/builders/external-system-exemption.js +120 -0
- package/dist/lib/catalogue/builders/feature-contract.js +77 -0
- package/dist/lib/catalogue/builders/feature-domain-model.js +50 -0
- package/dist/lib/catalogue/builders/feature-grounding-walker.js +254 -0
- package/dist/lib/catalogue/builders/feature-grounding.js +391 -0
- package/dist/lib/catalogue/builders/feature-groups.js +63 -0
- package/dist/lib/catalogue/builders/feature-subscription-channels.js +228 -0
- package/dist/lib/catalogue/builders/feature-tree-walker.js +295 -0
- package/dist/lib/catalogue/builders/features.js +300 -0
- package/dist/lib/catalogue/builders/glossary-xref.js +378 -0
- package/dist/lib/catalogue/builders/glossary.js +204 -0
- package/dist/lib/catalogue/builders/implementations.js +214 -0
- package/dist/lib/catalogue/builders/index.js +64 -0
- package/dist/lib/catalogue/builders/integration-components.js +344 -0
- package/dist/lib/catalogue/builders/integrations.js +181 -0
- package/dist/lib/catalogue/builders/persona-c4system.js +149 -0
- package/dist/lib/catalogue/builders/persona-container.js +133 -0
- package/dist/lib/catalogue/builders/persona-journey-edges.js +133 -0
- package/dist/lib/catalogue/builders/personas.js +152 -0
- package/dist/lib/catalogue/builders/product-edges.js +106 -0
- package/dist/lib/catalogue/builders/product-platform-dependencies.js +405 -0
- package/dist/lib/catalogue/builders/products.js +162 -0
- package/dist/lib/catalogue/builders/quality-scores.js +635 -0
- package/dist/lib/catalogue/builders/repo-capability-exemption.js +61 -0
- package/dist/lib/catalogue/builders/repo-dependency.js +127 -0
- package/dist/lib/catalogue/builders/repo-edges.js +340 -0
- package/dist/lib/catalogue/builders/repositories.js +458 -0
- package/dist/lib/catalogue/builders/scaffolds.js +197 -0
- package/dist/lib/catalogue/builders/screen-tree.js +222 -0
- package/dist/lib/catalogue/builders/screens.js +396 -0
- package/dist/lib/catalogue/builders/service-capability-exemption.js +63 -0
- package/dist/lib/catalogue/builders/service-contract-consumes.js +186 -0
- package/dist/lib/catalogue/builders/service-contract.js +74 -0
- package/dist/lib/catalogue/builders/service-entity-tables.js +187 -0
- package/dist/lib/catalogue/builders/services.js +232 -0
- package/dist/lib/catalogue/builders/system-external-dependency.js +115 -0
- package/dist/lib/catalogue/builders/user-journeys.js +253 -0
- package/dist/lib/catalogue/canonical-schema.yaml +4117 -0
- package/dist/lib/catalogue/cli-version.js +10 -0
- package/dist/lib/catalogue/contract-id.js +49 -0
- package/dist/lib/catalogue/coverage-predicates.js +603 -0
- package/dist/lib/catalogue/coverage-render.js +552 -0
- package/dist/lib/catalogue/coverage-run.js +115 -0
- package/dist/lib/catalogue/csv-reader.js +97 -0
- package/dist/lib/catalogue/csv-writer.js +96 -0
- package/dist/lib/catalogue/data-plane-coherence.js +77 -0
- package/dist/lib/catalogue/ddl-generator.js +233 -0
- package/dist/lib/catalogue/dedupe-keyed-tables.js +0 -0
- package/dist/lib/catalogue/engine-validator.js +239 -0
- package/dist/lib/catalogue/ext-id.js +76 -0
- package/dist/lib/catalogue/feature-grounding-aliases-loader.js +65 -0
- package/dist/lib/catalogue/feature-repo-zero-resolution-summary.js +31 -0
- package/dist/lib/catalogue/finding-identity.js +183 -0
- package/dist/lib/catalogue/findings.js +46 -0
- package/dist/lib/catalogue/fk-validator.js +136 -0
- package/dist/lib/catalogue/freshness.js +70 -0
- package/dist/lib/catalogue/gate-checks.js +338 -0
- package/dist/lib/catalogue/graph-projection.js +346 -0
- package/dist/lib/catalogue/impact-run.js +228 -0
- package/dist/lib/catalogue/manifest-loader.js +435 -0
- package/dist/lib/catalogue/platform-scope.js +7 -0
- package/dist/lib/catalogue/population-checks.js +87 -0
- package/dist/lib/catalogue/relationship-semantics.js +66 -0
- package/dist/lib/catalogue/reverse-product-quality.js +99 -0
- package/dist/lib/catalogue/rubric-coverage-map.yaml +871 -0
- package/dist/lib/catalogue/runway-vocabulary-loader.js +56 -0
- package/dist/lib/catalogue/scaffold-delta.js +261 -0
- package/dist/lib/catalogue/schema-compat.js +52 -0
- package/dist/lib/catalogue/schema-loader.js +87 -0
- package/dist/lib/catalogue/scores-coverage.js +573 -0
- package/dist/lib/catalogue/screen-validation-loader.js +89 -0
- package/dist/lib/catalogue/service-architecture-parser.js +193 -0
- package/dist/lib/catalogue/service-contract-aliases-loader.js +109 -0
- package/dist/lib/catalogue/staleness-verdicts.js +345 -0
- package/dist/lib/catalogue/traceability-loader.js +350 -0
- package/dist/lib/catalogue/validate.js +200 -0
- package/dist/lib/catalogue/version.js +18 -0
- package/dist/lib/conformance/binding.js +70 -0
- package/dist/lib/conformance/finding.js +69 -0
- package/dist/lib/conformance/index.js +578 -0
- package/dist/lib/context-pull/index.js +191 -0
- package/dist/lib/context-pull/resolve.js +70 -0
- package/dist/lib/context-pull/retired-mcp-setup.js +7 -0
- package/dist/lib/contracts-availability/index.js +267 -0
- package/dist/lib/generate-briefing/index.js +77 -0
- package/dist/lib/list/discover.js +100 -0
- package/dist/lib/list/format.js +84 -0
- package/dist/lib/list/index.js +16 -0
- package/dist/lib/lock-file.js +437 -0
- package/dist/lib/pack/log.js +18 -0
- package/dist/lib/pack/schema.js +121 -0
- package/dist/lib/pack/seed.js +182 -0
- package/dist/lib/pack/validate.js +49 -0
- package/dist/lib/package-version.js +92 -0
- package/dist/lib/plan/index.js +69 -0
- package/dist/lib/plan/read-sdd.js +102 -0
- package/dist/lib/plan/render-template.js +84 -0
- package/dist/lib/repo-kind.js +129 -0
- package/dist/lib/scaffold/domain.js +234 -0
- package/dist/lib/scaffold/registry.js +136 -0
- package/dist/lib/scripts.js +7 -0
- package/dist/lib/sdd-index/repo-config.js +245 -0
- package/dist/lib/sdd-reader.js +91 -0
- package/dist/lib/snapshot/advance.js +454 -0
- package/dist/lib/snapshot/diff.js +190 -0
- package/dist/lib/snapshot/fold.js +208 -0
- package/dist/lib/snapshot/land.js +178 -0
- package/dist/lib/snapshot/manifest.js +206 -0
- package/dist/lib/snapshot/targets.js +169 -0
- package/dist/lib/snapshot/verify.js +91 -0
- package/dist/lib/sync/briefing-merge.js +106 -0
- package/dist/lib/sync/bundle-cache.js +109 -0
- package/dist/lib/sync/yaml-block-merge.js +120 -0
- package/dist/lib/validate/aggregate.js +51 -0
- package/dist/lib/validate/bundle-coherence.js +74 -0
- package/dist/lib/validate/dispatch.js +243 -0
- package/dist/lib/validate/index.js +110 -0
- package/dist/lib/validate/plan.js +54 -0
- package/dist/lib/validate/runner.js +85 -0
- package/dist/lib/validate/yaml-parse.js +112 -0
- package/dist/maintain-version.json +4 -0
- package/dist/verbs/api-surface.js +71 -0
- package/dist/verbs/catalogue-check.js +28 -0
- package/dist/verbs/catalogue-verify.js +114 -0
- package/dist/verbs/conformance.js +34 -0
- package/dist/verbs/context.js +39 -0
- package/dist/verbs/contracts.js +34 -0
- package/dist/verbs/generate-briefing.js +29 -0
- package/dist/verbs/list.js +45 -0
- package/dist/verbs/pack-validate.js +17 -0
- package/dist/verbs/path-option.js +25 -0
- package/dist/verbs/plan.js +42 -0
- package/dist/verbs/render.js +87 -0
- package/dist/verbs/scaffold.js +83 -0
- package/dist/verbs/snapshot.js +134 -0
- package/dist/verbs/validate.js +48 -0
- package/dist/verify-program.js +122 -0
- package/dist/verify-version.json +4 -0
- package/package.json +32 -4
- package/scripts/validate-app-dependencies.sh +664 -0
- package/scripts/validate-app-docs.sh +199 -0
- package/scripts/validate-integration-docs.sh +505 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Reverse product-quality scores → the `products` maturity columns.
|
|
2
|
+
//
|
|
3
|
+
// WHY THIS EXISTS. `products` carried two maturity mechanisms and BOTH were inert:
|
|
4
|
+
// - `status` (documented `scaffolded | populated | reviewed`) was hardcoded to
|
|
5
|
+
// `"active"`, a value outside its own vocabulary — removed at schema 3.0.0;
|
|
6
|
+
// - `synthesis_quality` / `synthesis_band` / `last_assessed`, designed for exactly
|
|
7
|
+
// this data, were populated on 0 of 208 rows across two estates.
|
|
8
|
+
//
|
|
9
|
+
// Meanwhile the reverse estate holds 131 gate-registry score files, of which
|
|
10
|
+
// `reverse-product-quality-scores.yaml` is the family at PRODUCT granularity — the
|
|
11
|
+
// only one whose unit is a product row. So the fix is to fill the richer column from
|
|
12
|
+
// the data that already exists, rather than populate the coarser one from a weaker
|
|
13
|
+
// signal and leave this empty beside it.
|
|
14
|
+
//
|
|
15
|
+
// SCOPE, measured rather than assumed: 45 such files exist, but 24 are empty shells
|
|
16
|
+
// and several units describe *covered* sub-products rather than the SDD's own. Using
|
|
17
|
+
// the self-product rule below, 15 units qualify and 12 carry a score. So this
|
|
18
|
+
// populates ~12 rows today — a real but modest yield, and additive: it only fills
|
|
19
|
+
// empty nullable cells, so no existing row changes value.
|
|
20
|
+
//
|
|
21
|
+
// THE SELF-PRODUCT RULE. A file may list several units (one estate file lists nine).
|
|
22
|
+
// The SDD's own product is the unit whose `product_path` is `.` AND whose key equals
|
|
23
|
+
// the SDD's `sdd_id`. Both conditions are required: `product_path` alone admits
|
|
24
|
+
// synthetic gate fixtures (three exist under one platform SDD with keys like
|
|
25
|
+
// `beta/product-pass`), and key-matching alone admits covered sub-products.
|
|
26
|
+
import { readFile } from "node:fs/promises";
|
|
27
|
+
import { join } from "node:path";
|
|
28
|
+
import { parse as parseYaml } from "yaml";
|
|
29
|
+
export const REVERSE_PRODUCT_QUALITY_REL = "orchestration/gate-registry/reverse-product-quality-scores.yaml";
|
|
30
|
+
/** The closed band vocabulary (catalogue-schema `products.synthesis_band`). */
|
|
31
|
+
export const SYNTHESIS_BANDS = ["developing", "working", "strong"];
|
|
32
|
+
/**
|
|
33
|
+
* Read this SDD's own product-quality score, if the reverse gate registry has one.
|
|
34
|
+
*
|
|
35
|
+
* Returns an empty object when the file is absent, unparseable, has no units, or has
|
|
36
|
+
* no self-product unit — all normal states, not defects. A forward-authored estate has
|
|
37
|
+
* no reverse scores at all, and the columns stay empty there by design (the schema
|
|
38
|
+
* documents them as reverse-method only).
|
|
39
|
+
*/
|
|
40
|
+
export async function loadReverseProductQuality(sddPath, sddId, findings) {
|
|
41
|
+
let text;
|
|
42
|
+
try {
|
|
43
|
+
text = await readFile(join(sddPath, REVERSE_PRODUCT_QUALITY_REL), "utf-8");
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
if (err.code === "ENOENT")
|
|
47
|
+
return {};
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
50
|
+
let raw;
|
|
51
|
+
try {
|
|
52
|
+
raw = parseYaml(text);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
// A malformed registry must not fail the build: the catalogue is still correct
|
|
56
|
+
// without the score. Say so rather than silently emitting empty columns.
|
|
57
|
+
findings.add("convention", `${REVERSE_PRODUCT_QUALITY_REL}: failed to parse YAML — product maturity columns left empty (${err.message})`);
|
|
58
|
+
return {};
|
|
59
|
+
}
|
|
60
|
+
const doc = (raw ?? {});
|
|
61
|
+
const units = doc.units;
|
|
62
|
+
if (typeof units !== "object" || units === null)
|
|
63
|
+
return {};
|
|
64
|
+
// The self-product rule: `product_path: .` AND key === sdd_id. See the header.
|
|
65
|
+
const unit = units[sddId];
|
|
66
|
+
if (!unit || typeof unit !== "object")
|
|
67
|
+
return {};
|
|
68
|
+
const productPath = String(unit.product_path ?? "").trim();
|
|
69
|
+
if (productPath !== ".")
|
|
70
|
+
return {};
|
|
71
|
+
const q = unit.product_synthesis_quality;
|
|
72
|
+
if (!q || typeof q !== "object")
|
|
73
|
+
return {};
|
|
74
|
+
const out = {};
|
|
75
|
+
if (typeof q.total === "number" && Number.isFinite(q.total)) {
|
|
76
|
+
if (q.total < 0 || q.total > 10) {
|
|
77
|
+
findings.add("convention", `${REVERSE_PRODUCT_QUALITY_REL}: units.${sddId} total ${q.total} is outside the rubric range 0-10 — left empty`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
out.quality = q.total;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const band = String(q.band ?? "").trim();
|
|
84
|
+
if (band !== "") {
|
|
85
|
+
if (SYNTHESIS_BANDS.includes(band)) {
|
|
86
|
+
out.band = band;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// A band outside the closed vocabulary is reported, not passed through: the
|
|
90
|
+
// column would otherwise carry a value no consumer can interpret.
|
|
91
|
+
findings.add("convention", `${REVERSE_PRODUCT_QUALITY_REL}: units.${sddId} band "${band}" is not in {${SYNTHESIS_BANDS.join(" | ")}} — left empty`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const assessedAt = String(doc.assessed_at ?? "").trim();
|
|
95
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(assessedAt))
|
|
96
|
+
out.assessedAt = assessedAt;
|
|
97
|
+
return out;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=reverse-product-quality.js.map
|