@blxzer/cursor-trellis-core 0.4.2 → 0.4.3
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/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/task/adapter-middleware.d.ts +91 -0
- package/dist/task/adapter-middleware.d.ts.map +1 -0
- package/dist/task/adapter-middleware.js +384 -0
- package/dist/task/adapter-middleware.js.map +1 -0
- package/dist/task/contract-migrate.d.ts +29 -0
- package/dist/task/contract-migrate.d.ts.map +1 -0
- package/dist/task/contract-migrate.js +207 -0
- package/dist/task/contract-migrate.js.map +1 -0
- package/dist/task/full-quality.d.ts +89 -0
- package/dist/task/full-quality.d.ts.map +1 -0
- package/dist/task/full-quality.js +379 -0
- package/dist/task/full-quality.js.map +1 -0
- package/dist/task/index.d.ts +20 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +10 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/kernel-cli.d.ts +44 -0
- package/dist/task/kernel-cli.d.ts.map +1 -0
- package/dist/task/kernel-cli.js +287 -0
- package/dist/task/kernel-cli.js.map +1 -0
- package/dist/task/kernel-contract.d.ts +113 -0
- package/dist/task/kernel-contract.d.ts.map +1 -0
- package/dist/task/kernel-contract.js +332 -0
- package/dist/task/kernel-contract.js.map +1 -0
- package/dist/task/kernel-store.d.ts +99 -0
- package/dist/task/kernel-store.d.ts.map +1 -0
- package/dist/task/kernel-store.js +735 -0
- package/dist/task/kernel-store.js.map +1 -0
- package/dist/task/lite-context-pack.d.ts +71 -0
- package/dist/task/lite-context-pack.d.ts.map +1 -0
- package/dist/task/lite-context-pack.js +175 -0
- package/dist/task/lite-context-pack.js.map +1 -0
- package/dist/task/ondemand-topology.d.ts +100 -0
- package/dist/task/ondemand-topology.d.ts.map +1 -0
- package/dist/task/ondemand-topology.js +418 -0
- package/dist/task/ondemand-topology.js.map +1 -0
- package/dist/task/p36-artifact-migrate.d.ts +61 -0
- package/dist/task/p36-artifact-migrate.d.ts.map +1 -0
- package/dist/task/p36-artifact-migrate.js +336 -0
- package/dist/task/p36-artifact-migrate.js.map +1 -0
- package/dist/task/p36-wave-c.d.ts +39 -0
- package/dist/task/p36-wave-c.d.ts.map +1 -0
- package/dist/task/p36-wave-c.js +100 -0
- package/dist/task/p36-wave-c.js.map +1 -0
- package/dist/task/records.d.ts +9 -0
- package/dist/task/records.d.ts.map +1 -1
- package/dist/task/records.js +11 -0
- package/dist/task/records.js.map +1 -1
- package/package.json +1 -6
- package/dist/rpc/broker/audit.d.ts +0 -16
- package/dist/rpc/broker/audit.d.ts.map +0 -1
- package/dist/rpc/broker/audit.js +0 -33
- package/dist/rpc/broker/audit.js.map +0 -1
- package/dist/rpc/broker/in-process.d.ts +0 -62
- package/dist/rpc/broker/in-process.d.ts.map +0 -1
- package/dist/rpc/broker/in-process.js +0 -490
- package/dist/rpc/broker/in-process.js.map +0 -1
- package/dist/rpc/broker/journal.d.ts +0 -11
- package/dist/rpc/broker/journal.d.ts.map +0 -1
- package/dist/rpc/broker/journal.js +0 -17
- package/dist/rpc/broker/journal.js.map +0 -1
- package/dist/rpc/contract/errors.d.ts +0 -18
- package/dist/rpc/contract/errors.d.ts.map +0 -1
- package/dist/rpc/contract/errors.js +0 -55
- package/dist/rpc/contract/errors.js.map +0 -1
- package/dist/rpc/contract/parse.d.ts +0 -9
- package/dist/rpc/contract/parse.d.ts.map +0 -1
- package/dist/rpc/contract/parse.js +0 -144
- package/dist/rpc/contract/parse.js.map +0 -1
- package/dist/rpc/contract/topics.d.ts +0 -11
- package/dist/rpc/contract/topics.d.ts.map +0 -1
- package/dist/rpc/contract/topics.js +0 -42
- package/dist/rpc/contract/topics.js.map +0 -1
- package/dist/rpc/contract/types.d.ts +0 -54
- package/dist/rpc/contract/types.d.ts.map +0 -1
- package/dist/rpc/contract/types.js +0 -39
- package/dist/rpc/contract/types.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -10
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -11
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/transport/localhost-server.d.ts +0 -36
- package/dist/rpc/transport/localhost-server.d.ts.map +0 -1
- package/dist/rpc/transport/localhost-server.js +0 -275
- package/dist/rpc/transport/localhost-server.js.map +0 -1
- package/dist/rpc/transport/websocket.d.ts +0 -20
- package/dist/rpc/transport/websocket.d.ts.map +0 -1
- package/dist/rpc/transport/websocket.js +0 -156
- package/dist/rpc/transport/websocket.js.map +0 -1
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 7 Contract dry-run (P28 §15.9 Expand → Migrate → Contract).
|
|
3
|
+
*
|
|
4
|
+
* Read-only scan of old Task / Profile / Artifact references. Field names
|
|
5
|
+
* here are an implementation choice — not a frozen Manifest / migrate ABI.
|
|
6
|
+
* This module must not write task.json, kernel.json, Archive, or verify.md.
|
|
7
|
+
*/
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { isPlainObject } from "./schema.js";
|
|
11
|
+
export const RETIRED_TOP_LEVEL_FIELDS = [
|
|
12
|
+
"task_kind",
|
|
13
|
+
"task_type",
|
|
14
|
+
"kind",
|
|
15
|
+
"mode",
|
|
16
|
+
];
|
|
17
|
+
export const RETIRED_META_FIELDS = [
|
|
18
|
+
"classification",
|
|
19
|
+
"task_kind",
|
|
20
|
+
"task_type",
|
|
21
|
+
"mode",
|
|
22
|
+
];
|
|
23
|
+
function omitKeys(source, keys) {
|
|
24
|
+
const omitted = new Set(keys);
|
|
25
|
+
return Object.fromEntries(Object.entries(source).filter(([key]) => !omitted.has(key)));
|
|
26
|
+
}
|
|
27
|
+
export function stripRetiredExtras(extras) {
|
|
28
|
+
return omitKeys(extras, RETIRED_TOP_LEVEL_FIELDS);
|
|
29
|
+
}
|
|
30
|
+
export function stripRetiredMeta(meta) {
|
|
31
|
+
return omitKeys(meta, RETIRED_META_FIELDS);
|
|
32
|
+
}
|
|
33
|
+
export function scanContractMigration(options) {
|
|
34
|
+
const tasksRoot = options.tasksDir
|
|
35
|
+
? path.resolve(options.tasksDir)
|
|
36
|
+
: path.join(path.resolve(options.root), ".cstl", "tasks");
|
|
37
|
+
const files = collectTaskJsonFiles(tasksRoot);
|
|
38
|
+
const findings = [];
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
findings.push(...scanTaskFile(file));
|
|
41
|
+
}
|
|
42
|
+
findings.push(...scanProfileRefs(options.root));
|
|
43
|
+
return {
|
|
44
|
+
dryRun: true,
|
|
45
|
+
wrote: false,
|
|
46
|
+
scanned: files.length,
|
|
47
|
+
findings,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function collectTaskJsonFiles(tasksRoot) {
|
|
51
|
+
if (!fs.existsSync(tasksRoot))
|
|
52
|
+
return [];
|
|
53
|
+
const out = [];
|
|
54
|
+
const stack = [tasksRoot];
|
|
55
|
+
while (stack.length > 0) {
|
|
56
|
+
const current = stack.pop();
|
|
57
|
+
if (current === undefined)
|
|
58
|
+
continue;
|
|
59
|
+
let entries;
|
|
60
|
+
try {
|
|
61
|
+
entries = fs.readdirSync(current, { withFileTypes: true });
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
for (const entry of entries) {
|
|
67
|
+
const full = path.join(current, entry.name);
|
|
68
|
+
if (entry.isDirectory()) {
|
|
69
|
+
stack.push(full);
|
|
70
|
+
}
|
|
71
|
+
else if (entry.isFile() && entry.name === "task.json") {
|
|
72
|
+
out.push(full);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return out.sort();
|
|
77
|
+
}
|
|
78
|
+
function scanTaskFile(file) {
|
|
79
|
+
const findings = [];
|
|
80
|
+
let parsed;
|
|
81
|
+
try {
|
|
82
|
+
parsed = JSON.parse(fs.readFileSync(file, "utf-8"));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return [
|
|
86
|
+
{
|
|
87
|
+
path: file,
|
|
88
|
+
kind: "retired-field",
|
|
89
|
+
detail: "task.json is not readable JSON",
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
if (!isPlainObject(parsed))
|
|
94
|
+
return findings;
|
|
95
|
+
for (const key of RETIRED_TOP_LEVEL_FIELDS) {
|
|
96
|
+
if (parsed[key] !== undefined) {
|
|
97
|
+
findings.push({
|
|
98
|
+
path: file,
|
|
99
|
+
kind: "retired-field",
|
|
100
|
+
detail: `top-level ${key}=${stringifySmall(parsed[key])}`,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const meta = isPlainObject(parsed.meta) ? parsed.meta : {};
|
|
105
|
+
for (const key of RETIRED_META_FIELDS) {
|
|
106
|
+
if (meta[key] !== undefined) {
|
|
107
|
+
findings.push({
|
|
108
|
+
path: file,
|
|
109
|
+
kind: "retired-field",
|
|
110
|
+
detail: `meta.${key}=${stringifySmall(meta[key])}`,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (parsed.depends_mode !== undefined) {
|
|
115
|
+
findings.push({
|
|
116
|
+
path: file,
|
|
117
|
+
kind: "depends-mode",
|
|
118
|
+
detail: `depends_mode=${stringifySmall(parsed.depends_mode)}`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const topology = isPlainObject(parsed.topology) ? parsed.topology : {};
|
|
122
|
+
const parent = typeof parsed.parent === "string" && parsed.parent.trim() !== ""
|
|
123
|
+
? parsed.parent
|
|
124
|
+
: null;
|
|
125
|
+
if (parent && topology.parent_id !== parent) {
|
|
126
|
+
findings.push({
|
|
127
|
+
path: file,
|
|
128
|
+
kind: "legacy-parent",
|
|
129
|
+
detail: `canonical parent=${parent} without matching topology.parent_id`,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
const children = Array.isArray(parsed.children)
|
|
133
|
+
? parsed.children.filter((item) => typeof item === "string")
|
|
134
|
+
: [];
|
|
135
|
+
if (children.length > 0 && topology.kind !== "parent-child") {
|
|
136
|
+
findings.push({
|
|
137
|
+
path: file,
|
|
138
|
+
kind: "children-inferred-parent",
|
|
139
|
+
detail: `children[]=${children.join(",")} without topology.kind=parent-child`,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const taskDir = path.dirname(file);
|
|
143
|
+
const hasDesign = fs.existsSync(path.join(taskDir, "design.md"));
|
|
144
|
+
const hasImplement = fs.existsSync(path.join(taskDir, "implement.md"));
|
|
145
|
+
const rigor = isPlainObject(parsed.required_controls) &&
|
|
146
|
+
(parsed.required_controls.rigor === "lite" ||
|
|
147
|
+
parsed.required_controls.rigor === "full")
|
|
148
|
+
? parsed.required_controls.rigor
|
|
149
|
+
: null;
|
|
150
|
+
if (hasDesign && hasImplement && rigor === null) {
|
|
151
|
+
findings.push({
|
|
152
|
+
path: file,
|
|
153
|
+
kind: "file-inferred-rigor",
|
|
154
|
+
detail: "design.md+implement.md present without required_controls.rigor",
|
|
155
|
+
});
|
|
156
|
+
findings.push({
|
|
157
|
+
path: file,
|
|
158
|
+
kind: "artifact-inference",
|
|
159
|
+
detail: "artifact files would have inferred Full Rigor under the old closeout path",
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (parsed.profile !== undefined || meta.profile !== undefined) {
|
|
163
|
+
findings.push({
|
|
164
|
+
path: file,
|
|
165
|
+
kind: "profile-ref",
|
|
166
|
+
detail: "legacy profile reference on task record",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return findings;
|
|
170
|
+
}
|
|
171
|
+
function scanProfileRefs(root) {
|
|
172
|
+
const configPath = path.join(path.resolve(root), ".cstl", "config.yaml");
|
|
173
|
+
if (!fs.existsSync(configPath))
|
|
174
|
+
return [];
|
|
175
|
+
let text;
|
|
176
|
+
try {
|
|
177
|
+
text = fs.readFileSync(configPath, "utf-8");
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
if (!/\b(task_kind|task_type|depends_mode|classification)\b/.test(text)) {
|
|
183
|
+
return [];
|
|
184
|
+
}
|
|
185
|
+
return [
|
|
186
|
+
{
|
|
187
|
+
path: configPath,
|
|
188
|
+
kind: "profile-ref",
|
|
189
|
+
detail: "config.yaml mentions retired Task/Profile contract tokens",
|
|
190
|
+
},
|
|
191
|
+
];
|
|
192
|
+
}
|
|
193
|
+
function stringifySmall(value) {
|
|
194
|
+
if (typeof value === "string")
|
|
195
|
+
return value;
|
|
196
|
+
if (typeof value === "number" || typeof value === "boolean")
|
|
197
|
+
return String(value);
|
|
198
|
+
if (value === null)
|
|
199
|
+
return "null";
|
|
200
|
+
try {
|
|
201
|
+
return JSON.stringify(value);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return "[unserializable]";
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=contract-migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-migrate.js","sourceRoot":"","sources":["../../src/task/contract-migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 4 Full Quality contract (P28 Artifact/Quality, P29 Full Check, P30 S4).
|
|
3
|
+
*
|
|
4
|
+
* Pure helpers: resolve required_controls, AC → Evidence ledger, graded
|
|
5
|
+
* Independent Check. Does not write Kernel store or task.json. Disk field
|
|
6
|
+
* names here are an implementation choice — not a frozen Manifest schema.
|
|
7
|
+
* Fingerprints are a testable sha256 fixture, not a locked algorithm.
|
|
8
|
+
*/
|
|
9
|
+
export declare const FULL_QUALITY_SOURCE = "full-quality-contract";
|
|
10
|
+
export declare const FULL_QUALITY_SCHEMA_VERSION: 1;
|
|
11
|
+
export declare const FULL_BASELINE_CONTROLS: readonly ["definition", "execution-contract", "verification-plan", "evidence", "independent-check"];
|
|
12
|
+
export declare const FULL_OPTIONAL_CONTROLS: readonly ["design"];
|
|
13
|
+
export declare const DEFAULT_CONTROL_SURFACES: Record<string, string>;
|
|
14
|
+
export declare const DESIGN_RISK_SIGNALS: readonly ["architecture", "public-contract", "schema", "security", "secret", "framework-semantics", "runtime-semantics"];
|
|
15
|
+
export type FullQualityRigor = "lite" | "full";
|
|
16
|
+
export type FullQualityPhase = "start" | "archive";
|
|
17
|
+
export type IndependentCheckMode = "self-review" | "true-independent";
|
|
18
|
+
export type IndependentCheckResult = "PASS" | "FAIL" | "BLOCKED";
|
|
19
|
+
export type FullQualityControlId = (typeof FULL_BASELINE_CONTROLS)[number] | (typeof FULL_OPTIONAL_CONTROLS)[number];
|
|
20
|
+
export interface ResolveRequiredControlsInput {
|
|
21
|
+
rigor?: FullQualityRigor;
|
|
22
|
+
verificationProfile?: string | null;
|
|
23
|
+
riskSignals?: readonly string[];
|
|
24
|
+
policyRequiresDesign?: boolean;
|
|
25
|
+
explicitControls?: readonly string[];
|
|
26
|
+
surfaces?: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
export interface RequiredControlsBundle {
|
|
29
|
+
schema_version: typeof FULL_QUALITY_SCHEMA_VERSION;
|
|
30
|
+
source: typeof FULL_QUALITY_SOURCE;
|
|
31
|
+
rigor: FullQualityRigor;
|
|
32
|
+
controls: string[];
|
|
33
|
+
surfaces: Record<string, string>;
|
|
34
|
+
resolved_from: {
|
|
35
|
+
verification_profile: string | null;
|
|
36
|
+
risk_signals: string[];
|
|
37
|
+
policy_requires_design: boolean;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface AcceptanceItem {
|
|
41
|
+
id: string;
|
|
42
|
+
statement: string;
|
|
43
|
+
}
|
|
44
|
+
export interface AcEvidenceMapping {
|
|
45
|
+
ac_id: string;
|
|
46
|
+
evidence_ref: string;
|
|
47
|
+
}
|
|
48
|
+
export interface AcEvidenceLedger {
|
|
49
|
+
schema_version: typeof FULL_QUALITY_SCHEMA_VERSION;
|
|
50
|
+
items: AcEvidenceMapping[];
|
|
51
|
+
source_fingerprint: string;
|
|
52
|
+
evidence_fingerprint: string;
|
|
53
|
+
tested_code_fingerprint?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface IndependentCheckVerdict {
|
|
56
|
+
schema_version: typeof FULL_QUALITY_SCHEMA_VERSION;
|
|
57
|
+
mode: IndependentCheckMode;
|
|
58
|
+
readonly: true;
|
|
59
|
+
result: IndependentCheckResult;
|
|
60
|
+
evidence: string;
|
|
61
|
+
independent_worker: boolean;
|
|
62
|
+
code_fingerprint: string;
|
|
63
|
+
}
|
|
64
|
+
export interface EvaluateIndependentCheckInput {
|
|
65
|
+
mode: IndependentCheckMode;
|
|
66
|
+
independentWorkerAvailable: boolean;
|
|
67
|
+
evidence: string;
|
|
68
|
+
codeFingerprint: string;
|
|
69
|
+
attemptedWrites?: boolean;
|
|
70
|
+
}
|
|
71
|
+
export declare function qualityFingerprint(payload: string): string;
|
|
72
|
+
export declare function resolveRequiredControls(input?: ResolveRequiredControlsInput): RequiredControlsBundle;
|
|
73
|
+
export declare function parseAcceptanceItems(prdText: string): AcceptanceItem[];
|
|
74
|
+
export declare function buildAcEvidenceLedger(input: {
|
|
75
|
+
acceptanceItems: readonly AcceptanceItem[];
|
|
76
|
+
mappings: readonly AcEvidenceMapping[];
|
|
77
|
+
sourceFingerprint: string;
|
|
78
|
+
evidenceFingerprint: string;
|
|
79
|
+
testedCodeFingerprint?: string;
|
|
80
|
+
}): AcEvidenceLedger;
|
|
81
|
+
export declare function evaluateIndependentCheck(input: EvaluateIndependentCheckInput): IndependentCheckVerdict;
|
|
82
|
+
export declare function readRequiredControls(extras: Record<string, unknown>): RequiredControlsBundle | null;
|
|
83
|
+
export declare function normalizeRequiredControls(raw: unknown): RequiredControlsBundle;
|
|
84
|
+
export declare function normalizeRequiredControlsInExtras(extras: Record<string, unknown>): void;
|
|
85
|
+
export declare function assertFullQualityForPhase(taskDir: string, extras: Record<string, unknown>, phase: FullQualityPhase, options?: {
|
|
86
|
+
testedCodeFingerprint?: string;
|
|
87
|
+
}): void;
|
|
88
|
+
export declare function assertIndependentCheckGateRecord(record: Record<string, unknown>): void;
|
|
89
|
+
//# sourceMappingURL=full-quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-quality.d.ts","sourceRoot":"","sources":["../../src/task/full-quality.ts"],"names":[],"mappings":"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"}
|