@jevitate/cli 0.6.0 → 0.8.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/dist/ai-cli.d.ts +3 -1
- package/dist/ai-cli.js +60 -16
- package/dist/ai-cli.js.map +1 -1
- package/dist/approval-provenance.d.ts +120 -0
- package/dist/approval-provenance.js +300 -0
- package/dist/approval-provenance.js.map +1 -0
- package/dist/author-journey-cli.js +11 -18
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +29012 -20685
- package/dist/build-info.generated.js +2 -2
- package/dist/builtin-analyzers.d.ts +7 -0
- package/dist/builtin-analyzers.js +19 -0
- package/dist/builtin-analyzers.js.map +1 -0
- package/dist/campaign-cli.d.ts +6 -0
- package/dist/campaign-cli.js +9 -4
- package/dist/campaign-cli.js.map +1 -1
- package/dist/catalog-analysis.d.ts +70 -0
- package/dist/catalog-analysis.js +507 -0
- package/dist/catalog-analysis.js.map +1 -0
- package/dist/catalog-api.d.ts +73 -0
- package/dist/catalog-api.js +97 -0
- package/dist/catalog-api.js.map +1 -0
- package/dist/catalog-cli.d.ts +12 -0
- package/dist/catalog-cli.js +224 -0
- package/dist/catalog-cli.js.map +1 -0
- package/dist/catalog-review.d.ts +29 -0
- package/dist/catalog-review.js +290 -0
- package/dist/catalog-review.js.map +1 -0
- package/dist/catalog.d.ts +133 -0
- package/dist/catalog.js +352 -0
- package/dist/catalog.js.map +1 -0
- package/dist/check-api.js +24 -2
- package/dist/check-api.js.map +1 -1
- package/dist/check-cli.d.ts +3 -0
- package/dist/check-cli.js +18 -4
- package/dist/check-cli.js.map +1 -1
- package/dist/check-execute.js +25 -9
- package/dist/check-execute.js.map +1 -1
- package/dist/check-plan.js +4 -1
- package/dist/check-plan.js.map +1 -1
- package/dist/check-suite.js +6 -3
- package/dist/check-suite.js.map +1 -1
- package/dist/check-types.d.ts +12 -1
- package/dist/check-types.js.map +1 -1
- package/dist/cli-output.js +86 -4
- package/dist/cli-output.js.map +1 -1
- package/dist/cli-shared.d.ts +22 -2
- package/dist/cli-shared.js +34 -5
- package/dist/cli-shared.js.map +1 -1
- package/dist/demo-aspect-api.d.ts +21 -5
- package/dist/demo-aspect-api.js +30 -1
- package/dist/demo-aspect-api.js.map +1 -1
- package/dist/demo-aspect-cli.js +64 -5
- package/dist/demo-aspect-cli.js.map +1 -1
- package/dist/environments.js +6 -1
- package/dist/environments.js.map +1 -1
- package/dist/exit-codes.js +4 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/explore-adversarial.d.ts +3 -1
- package/dist/explore-adversarial.js +3 -3
- package/dist/explore-adversarial.js.map +1 -1
- package/dist/explore-author.js +5 -2
- package/dist/explore-author.js.map +1 -1
- package/dist/explore-cli.js +162 -13
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-coverage.d.ts +6 -2
- package/dist/explore-coverage.js +5 -4
- package/dist/explore-coverage.js.map +1 -1
- package/dist/explore-feature.d.ts +3 -1
- package/dist/explore-feature.js +2 -2
- package/dist/explore-feature.js.map +1 -1
- package/dist/explore-goal.d.ts +37 -6
- package/dist/explore-goal.js +70 -52
- package/dist/explore-goal.js.map +1 -1
- package/dist/explore-shared.d.ts +12 -7
- package/dist/explore-shared.js +9 -1
- package/dist/explore-shared.js.map +1 -1
- package/dist/goal-run-flags.d.ts +2 -0
- package/dist/goal-run-flags.js +8 -1
- package/dist/goal-run-flags.js.map +1 -1
- package/dist/http-5xx-outcome.d.ts +8 -3
- package/dist/http-5xx-outcome.js +5 -15
- package/dist/http-5xx-outcome.js.map +1 -1
- package/dist/init-cli.d.ts +7 -0
- package/dist/init-cli.js +79 -9
- package/dist/init-cli.js.map +1 -1
- package/dist/init-codeowners.d.ts +39 -0
- package/dist/init-codeowners.js +91 -0
- package/dist/init-codeowners.js.map +1 -0
- package/dist/init-keys.d.ts +3 -1
- package/dist/init-keys.js +20 -8
- package/dist/init-keys.js.map +1 -1
- package/dist/init-skills.d.ts +85 -7
- package/dist/init-skills.js +303 -36
- package/dist/init-skills.js.map +1 -1
- package/dist/jev-advisor.d.ts +72 -0
- package/dist/jev-advisor.js +172 -0
- package/dist/jev-advisor.js.map +1 -0
- package/dist/journey-api.d.ts +104 -5
- package/dist/journey-api.js +165 -23
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +1 -1
- package/dist/journey-cli.js +320 -13
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-demo-api.d.ts +7 -1
- package/dist/journey-demo-api.js +8 -3
- package/dist/journey-demo-api.js.map +1 -1
- package/dist/journey-demo-cli.js +3 -0
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-lint-sarif.d.ts +19 -0
- package/dist/journey-lint-sarif.js +48 -0
- package/dist/journey-lint-sarif.js.map +1 -0
- package/dist/journey-network-checks.d.ts +45 -9
- package/dist/journey-network-checks.js +117 -30
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-prefix.d.ts +24 -15
- package/dist/journey-prefix.js +53 -7
- package/dist/journey-prefix.js.map +1 -1
- package/dist/journey-review-api.d.ts +19 -0
- package/dist/journey-review-api.js +46 -0
- package/dist/journey-review-api.js.map +1 -0
- package/dist/journey-review-store.d.ts +16 -0
- package/dist/journey-review-store.js +95 -0
- package/dist/journey-review-store.js.map +1 -0
- package/dist/journey-review.d.ts +47 -0
- package/dist/journey-review.js +499 -0
- package/dist/journey-review.js.map +1 -0
- package/dist/journey-verify.d.ts +61 -0
- package/dist/journey-verify.js +144 -0
- package/dist/journey-verify.js.map +1 -0
- package/dist/key-report.d.ts +20 -5
- package/dist/key-report.js +32 -9
- package/dist/key-report.js.map +1 -1
- package/dist/kill-signal.js +10 -2
- package/dist/kill-signal.js.map +1 -1
- package/dist/load-api.js +9 -3
- package/dist/load-api.js.map +1 -1
- package/dist/load-cli.js +4 -2
- package/dist/load-cli.js.map +1 -1
- package/dist/log-classes.d.ts +73 -0
- package/dist/log-classes.js +167 -0
- package/dist/log-classes.js.map +1 -0
- package/dist/log-correlation.d.ts +29 -10
- package/dist/log-correlation.js +44 -21
- package/dist/log-correlation.js.map +1 -1
- package/dist/login-cli.d.ts +15 -0
- package/dist/login-cli.js +116 -0
- package/dist/login-cli.js.map +1 -0
- package/dist/logs-cli.js +3 -1
- package/dist/logs-cli.js.map +1 -1
- package/dist/mcp-api.d.ts +1 -0
- package/dist/mcp-api.js +61 -12
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-cli-runner.d.ts +2 -0
- package/dist/mcp-cli-runner.js +3 -1
- package/dist/mcp-cli-runner.js.map +1 -1
- package/dist/mcp-cli-tools.d.ts +6 -0
- package/dist/mcp-cli-tools.js +182 -23
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mission-cli.js +8 -4
- package/dist/mission-cli.js.map +1 -1
- package/dist/mission-journal.d.ts +4 -1
- package/dist/mission-journal.js +9 -3
- package/dist/mission-journal.js.map +1 -1
- package/dist/mission-queue-cli.js +21 -2
- package/dist/mission-queue-cli.js.map +1 -1
- package/dist/mission-queue-runner.d.ts +6 -0
- package/dist/mission-queue-runner.js +33 -3
- package/dist/mission-queue-runner.js.map +1 -1
- package/dist/multi-run-cli.d.ts +7 -1
- package/dist/multi-run-cli.js +10 -3
- package/dist/multi-run-cli.js.map +1 -1
- package/dist/multi-run.d.ts +38 -3
- package/dist/multi-run.js +115 -23
- package/dist/multi-run.js.map +1 -1
- package/dist/persona-login.d.ts +199 -0
- package/dist/persona-login.js +574 -0
- package/dist/persona-login.js.map +1 -0
- package/dist/pre-approval.d.ts +98 -0
- package/dist/pre-approval.js +175 -0
- package/dist/pre-approval.js.map +1 -0
- package/dist/program.js +10 -0
- package/dist/program.js.map +1 -1
- package/dist/project-dir.d.ts +2 -1
- package/dist/project-dir.js +3 -1
- package/dist/project-dir.js.map +1 -1
- package/dist/promotions.d.ts +15 -0
- package/dist/promotions.js +52 -0
- package/dist/promotions.js.map +1 -0
- package/dist/readiness.d.ts +29 -0
- package/dist/readiness.js +291 -0
- package/dist/readiness.js.map +1 -0
- package/dist/regression-cli.js +4 -2
- package/dist/regression-cli.js.map +1 -1
- package/dist/report-api.d.ts +24 -2
- package/dist/report-api.js +33 -5
- package/dist/report-api.js.map +1 -1
- package/dist/report-cli.js +8 -1
- package/dist/report-cli.js.map +1 -1
- package/dist/result-schema.d.ts +12 -0
- package/dist/result-schema.js +8 -0
- package/dist/result-schema.js.map +1 -1
- package/dist/run-index.d.ts +4 -2
- package/dist/run-index.js +3 -1
- package/dist/run-index.js.map +1 -1
- package/dist/run-key-preflight.d.ts +2 -1
- package/dist/run-key-preflight.js +3 -2
- package/dist/run-key-preflight.js.map +1 -1
- package/dist/run-metadata.d.ts +26 -0
- package/dist/run-metadata.js +41 -0
- package/dist/run-metadata.js.map +1 -0
- package/dist/run-tags-cli.d.ts +12 -0
- package/dist/run-tags-cli.js +35 -0
- package/dist/run-tags-cli.js.map +1 -0
- package/dist/self-heal-adapter.js +3 -1
- package/dist/self-heal-adapter.js.map +1 -1
- package/dist/site-cli.d.ts +1 -1
- package/dist/site-cli.js +24 -1
- package/dist/site-cli.js.map +1 -1
- package/dist/source-cli.js +4 -2
- package/dist/source-cli.js.map +1 -1
- package/dist/source-run-api.js +17 -7
- package/dist/source-run-api.js.map +1 -1
- package/dist/suite-explore-options.d.ts +14 -0
- package/dist/suite-explore-options.js +7 -0
- package/dist/suite-explore-options.js.map +1 -1
- package/dist/sweep-api.d.ts +266 -0
- package/dist/sweep-api.js +828 -0
- package/dist/sweep-api.js.map +1 -0
- package/dist/sweep-cli.d.ts +9 -0
- package/dist/sweep-cli.js +115 -0
- package/dist/sweep-cli.js.map +1 -0
- package/dist/target-config.d.ts +5 -2
- package/dist/target-config.js +15 -0
- package/dist/target-config.js.map +1 -1
- package/dist/usability-capture.js +6 -0
- package/dist/usability-capture.js.map +1 -1
- package/dist/ux-cli.js +3 -1
- package/dist/ux-cli.js.map +1 -1
- package/dist/ux-usability.d.ts +9 -3
- package/dist/ux-usability.js +6 -4
- package/dist/ux-usability.js.map +1 -1
- package/dist/verify-fix-cli.js +4 -2
- package/dist/verify-fix-cli.js.map +1 -1
- package/package.json +13 -13
- package/skills/jevitate-demo/SKILL.md +5 -2
- package/skills/jevitate-explore/SKILL.md +6 -2
- package/skills/jevitate-getting-started/SKILL.md +12 -0
- package/skills/jevitate-run-journey/SKILL.md +17 -4
- package/skills/jevitate-test-campaign/SKILL.md +26 -5
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { AcceptedFindings, Finding, Journey } from "@jevitate/journey";
|
|
2
|
+
import type { JevSetup } from "./jev-advisor.js";
|
|
3
|
+
import { type Catalog } from "./catalog.js";
|
|
4
|
+
/**
|
|
5
|
+
* #433 — THE pre-approval pipeline. Every human approval — `persona approve`, `job approve`,
|
|
6
|
+
* `journey promote`, `demo approve` — asks `preApprovalFindings(subject, catalog, ctx)` for the
|
|
7
|
+
* findings about the item being approved, renders them in its review sheet before approving, and
|
|
8
|
+
* passes them through `acknowledgeFindings`: when any finding `requiresAcknowledgment`, the approval
|
|
9
|
+
* is refused (`ApprovalFindingsError`, E_APPROVAL_FINDINGS, exit 1) unless the approver gives
|
|
10
|
+
* `--accept-findings "<reason>"`, which is recorded with the approval (`acceptedFindings`).
|
|
11
|
+
*
|
|
12
|
+
* ── Writing an analyzer (#434 readiness / GtWR checks + Jev, #435 conflicts / duplicates) ──────
|
|
13
|
+
*
|
|
14
|
+
* import { registerPreApprovalAnalyzer, type PreApprovalAnalyzer } from "./pre-approval.js";
|
|
15
|
+
* const readiness: PreApprovalAnalyzer = {
|
|
16
|
+
* id: "readiness", // unique; prefixes every finding's acknowledgment key
|
|
17
|
+
* appliesTo: ["job", "persona", "journey"], // the subject kinds it analyzes
|
|
18
|
+
* async analyze(subject, catalog, ctx) { // the item, the whole catalog, the approval context
|
|
19
|
+
* return [{ analyzer: "readiness", code: "job.vague-term", severity: "warn", message: "…",
|
|
20
|
+
* requiresAcknowledgment: false, characteristic: "unambiguous" }];
|
|
21
|
+
* },
|
|
22
|
+
* };
|
|
23
|
+
* registerPreApprovalAnalyzer(readiness); // once, at startup (program wiring)
|
|
24
|
+
*
|
|
25
|
+
* Rules an analyzer keeps:
|
|
26
|
+
* - It only READS: it never changes the catalog, a Journey or an approval.
|
|
27
|
+
* - Advisory judgments (Jev) report a probability and leave `requiresAcknowledgment` to a rule in
|
|
28
|
+
* code over the typed answer (e.g. #435: a `conflicting` / `duplicate` classification) — the
|
|
29
|
+
* model never decides an approval. Without a judgment key it returns its deterministic findings
|
|
30
|
+
* (and an `info` "skipped" finding), never an error.
|
|
31
|
+
* - It is cheap to re-run: the review sheets (`journey|persona|job review`, MCP `review_*`) run
|
|
32
|
+
* the same pipeline, so an expensive analyzer caches by the items' content hashes.
|
|
33
|
+
* - A thrown error does not wave the approval through: it becomes a finding that requires an
|
|
34
|
+
* acknowledgment (fail closed), naming the analyzer.
|
|
35
|
+
*/
|
|
36
|
+
/** What is being approved: a catalog persona or job, or a Journey (promote / demo approve). */
|
|
37
|
+
export type ApprovalSubject = {
|
|
38
|
+
readonly kind: "persona";
|
|
39
|
+
readonly id: string;
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: "job";
|
|
42
|
+
readonly id: string;
|
|
43
|
+
} | {
|
|
44
|
+
readonly kind: "journey";
|
|
45
|
+
readonly id: string;
|
|
46
|
+
};
|
|
47
|
+
/** The approval path asking. */
|
|
48
|
+
export type ApprovalAction = "persona approve" | "job approve" | "journey promote" | "demo approve" | "review";
|
|
49
|
+
export interface PreApprovalContext {
|
|
50
|
+
readonly action: ApprovalAction;
|
|
51
|
+
/**
|
|
52
|
+
* The Journey as it will be approved, when it differs from the catalog's copy (demo approve
|
|
53
|
+
* applies its annotations first). Absent: the catalog's copy.
|
|
54
|
+
*/
|
|
55
|
+
readonly journey?: Journey;
|
|
56
|
+
/**
|
|
57
|
+
* #434: include the readiness section (deterministic checks + GtWR rules, and the advisory Jev
|
|
58
|
+
* questions). Every approval sets it; a review sheet sets it with `--readiness`.
|
|
59
|
+
*/
|
|
60
|
+
readonly readiness?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* #434/#435: the advisory Jev layer — an advisor (the command was given `--real` and a judgment
|
|
63
|
+
* key is configured), or why it was skipped. Absent: skipped ("pass --real").
|
|
64
|
+
*/
|
|
65
|
+
readonly jev?: JevSetup;
|
|
66
|
+
}
|
|
67
|
+
export interface PreApprovalAnalyzer {
|
|
68
|
+
/** Unique. Each finding's `analyzer` is this id. */
|
|
69
|
+
readonly id: string;
|
|
70
|
+
/** The subject kinds it analyzes (it is not called for the others). */
|
|
71
|
+
readonly appliesTo: readonly ApprovalSubject["kind"][];
|
|
72
|
+
analyze(subject: ApprovalSubject, catalog: Catalog, ctx: PreApprovalContext): readonly Finding[] | Promise<readonly Finding[]>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Registers an analyzer for every approval path and review sheet. Returns its unregister (tests).
|
|
76
|
+
* A second analyzer with the same id is refused (one id, one meaning in recorded acknowledgments).
|
|
77
|
+
*/
|
|
78
|
+
export declare function registerPreApprovalAnalyzer(analyzer: PreApprovalAnalyzer): () => void;
|
|
79
|
+
/** The analyzers every approval runs: the built-in deterministic catalog-link checks, then the registered ones. */
|
|
80
|
+
export declare function preApprovalAnalyzers(): readonly PreApprovalAnalyzer[];
|
|
81
|
+
/** #433: the findings about `subject` from every analyzer that applies — acknowledgment-requiring first. */
|
|
82
|
+
export declare function preApprovalFindings(subject: ApprovalSubject, catalog: Catalog, ctx: PreApprovalContext, analyzers?: readonly PreApprovalAnalyzer[]): Promise<Finding[]>;
|
|
83
|
+
/** The key an acknowledgment records a finding by: `<analyzer>/<code>`. */
|
|
84
|
+
export declare function findingKey(f: Finding): string;
|
|
85
|
+
/** #433: findings that require an acknowledgment were present and no `--accept-findings` reason was given. */
|
|
86
|
+
export declare class ApprovalFindingsError extends Error {
|
|
87
|
+
readonly findings: readonly Finding[];
|
|
88
|
+
readonly code = "E_APPROVAL_FINDINGS";
|
|
89
|
+
constructor(message: string, findings: readonly Finding[]);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* #433: the acknowledgment rule, in code. Findings requiring an acknowledgment refuse the approval
|
|
93
|
+
* unless `acceptFindings` (a non-empty reason) is given; then they are what the approval records.
|
|
94
|
+
* Returns undefined when nothing needed acknowledging.
|
|
95
|
+
*/
|
|
96
|
+
export declare function acknowledgeFindings(what: string, findings: readonly Finding[], acceptFindings: string | undefined): AcceptedFindings | undefined;
|
|
97
|
+
/** #433: the deterministic link and staleness checks every approval starts with. */
|
|
98
|
+
export declare const catalogLinkAnalyzer: PreApprovalAnalyzer;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { findJob, findPersona, journeyLinks, journeysForJob, journeysForPersona, personaLinkId, catalogJourney } from "./catalog.js";
|
|
2
|
+
const registry = [];
|
|
3
|
+
/**
|
|
4
|
+
* Registers an analyzer for every approval path and review sheet. Returns its unregister (tests).
|
|
5
|
+
* A second analyzer with the same id is refused (one id, one meaning in recorded acknowledgments).
|
|
6
|
+
*/
|
|
7
|
+
export function registerPreApprovalAnalyzer(analyzer) {
|
|
8
|
+
if (registry.some((a) => a.id === analyzer.id))
|
|
9
|
+
throw new Error(`a pre-approval analyzer '${analyzer.id}' is already registered`);
|
|
10
|
+
registry.push(analyzer);
|
|
11
|
+
return () => {
|
|
12
|
+
const i = registry.indexOf(analyzer);
|
|
13
|
+
if (i !== -1)
|
|
14
|
+
registry.splice(i, 1);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** The analyzers every approval runs: the built-in deterministic catalog-link checks, then the registered ones. */
|
|
18
|
+
export function preApprovalAnalyzers() {
|
|
19
|
+
return [catalogLinkAnalyzer, ...registry];
|
|
20
|
+
}
|
|
21
|
+
const SEVERITY_ORDER = { fail: 0, warn: 1, info: 2 };
|
|
22
|
+
/** #433: the findings about `subject` from every analyzer that applies — acknowledgment-requiring first. */
|
|
23
|
+
export async function preApprovalFindings(subject, catalog, ctx, analyzers = preApprovalAnalyzers()) {
|
|
24
|
+
const out = [];
|
|
25
|
+
for (const analyzer of analyzers) {
|
|
26
|
+
if (!analyzer.appliesTo.includes(subject.kind))
|
|
27
|
+
continue;
|
|
28
|
+
try {
|
|
29
|
+
out.push(...(await analyzer.analyze(subject, catalog, ctx)));
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
out.push({
|
|
33
|
+
analyzer: analyzer.id,
|
|
34
|
+
code: "analyzer.error",
|
|
35
|
+
severity: "fail",
|
|
36
|
+
message: `the ${analyzer.id} analysis could not run: ${err instanceof Error ? err.message : String(err)}`,
|
|
37
|
+
fix: "fix the cause and review again, or acknowledge with --accept-findings \"<reason>\"",
|
|
38
|
+
requiresAcknowledgment: true,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return out
|
|
43
|
+
.map((f, i) => ({ f, i }))
|
|
44
|
+
.sort((a, b) => Number(b.f.requiresAcknowledgment) - Number(a.f.requiresAcknowledgment) || SEVERITY_ORDER[a.f.severity] - SEVERITY_ORDER[b.f.severity] || a.i - b.i)
|
|
45
|
+
.map(({ f }) => f);
|
|
46
|
+
}
|
|
47
|
+
/** The key an acknowledgment records a finding by: `<analyzer>/<code>`. */
|
|
48
|
+
export function findingKey(f) {
|
|
49
|
+
return `${f.analyzer}/${f.code}`;
|
|
50
|
+
}
|
|
51
|
+
/** #433: findings that require an acknowledgment were present and no `--accept-findings` reason was given. */
|
|
52
|
+
export class ApprovalFindingsError extends Error {
|
|
53
|
+
findings;
|
|
54
|
+
code = "E_APPROVAL_FINDINGS";
|
|
55
|
+
constructor(message, findings) {
|
|
56
|
+
super(message);
|
|
57
|
+
this.findings = findings;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* #433: the acknowledgment rule, in code. Findings requiring an acknowledgment refuse the approval
|
|
62
|
+
* unless `acceptFindings` (a non-empty reason) is given; then they are what the approval records.
|
|
63
|
+
* Returns undefined when nothing needed acknowledging.
|
|
64
|
+
*/
|
|
65
|
+
export function acknowledgeFindings(what, findings, acceptFindings) {
|
|
66
|
+
const blocking = findings.filter((f) => f.requiresAcknowledgment);
|
|
67
|
+
if (blocking.length === 0)
|
|
68
|
+
return undefined;
|
|
69
|
+
const reason = acceptFindings?.trim() ?? "";
|
|
70
|
+
if (reason === "") {
|
|
71
|
+
throw new ApprovalFindingsError(`${what}: ${blocking.length} pre-approval finding(s) need an acknowledgment — ${blocking.map((f) => `${findingKey(f)}: ${f.message}`).join("; ")}. ` +
|
|
72
|
+
`Fix them, or approve anyway with --accept-findings "<reason>" (recorded with the approval)`, blocking);
|
|
73
|
+
}
|
|
74
|
+
return { reason, findings: [...new Set(blocking.map(findingKey))] };
|
|
75
|
+
}
|
|
76
|
+
// ── The built-in analyzer: deterministic catalog links and staleness ──────────────────────────
|
|
77
|
+
const ANALYZER = "catalog-links";
|
|
78
|
+
function finding(code, severity, message, opts = {}) {
|
|
79
|
+
return {
|
|
80
|
+
analyzer: ANALYZER,
|
|
81
|
+
code,
|
|
82
|
+
severity,
|
|
83
|
+
message,
|
|
84
|
+
...(opts.fix === undefined ? {} : { fix: opts.fix }),
|
|
85
|
+
requiresAcknowledgment: opts.ack === true,
|
|
86
|
+
...(opts.items === undefined || opts.items.length === 0 ? {} : { items: opts.items }),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function personaFindings(id, catalog) {
|
|
90
|
+
const persona = findPersona(catalog, id);
|
|
91
|
+
if (persona === undefined)
|
|
92
|
+
return [];
|
|
93
|
+
const out = [];
|
|
94
|
+
if (persona.status === "stale")
|
|
95
|
+
out.push(finding("persona.changed", "warn", `persona '${id}' changed since its approval; approving re-vets it and clears "needs re-review" on its Journeys`));
|
|
96
|
+
const jobs = catalog.jobs.filter((j) => j.personas.includes(id));
|
|
97
|
+
if (jobs.length === 0)
|
|
98
|
+
out.push(finding("persona.no-job", "info", `no job in the catalog serves persona '${id}'`, { fix: `list it in a job's "personas" (.jevitate/jobs.json)` }));
|
|
99
|
+
const stale = journeysForPersona(catalog, id).filter((j) => j.promoted && persona.status === "stale");
|
|
100
|
+
if (stale.length > 0)
|
|
101
|
+
out.push(finding("persona.journeys-need-re-review", "info", `${stale.length} promoted Journey(s) linked to it show "needs re-review" until it is approved again`, { items: stale.map((j) => `journey:${j.id}`) }));
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
function jobFindings(id, catalog) {
|
|
105
|
+
const job = findJob(catalog, id);
|
|
106
|
+
if (job === undefined)
|
|
107
|
+
return [];
|
|
108
|
+
const out = [];
|
|
109
|
+
if (job.status === "stale")
|
|
110
|
+
out.push(finding("job.changed", "warn", `job '${id}' changed since its approval; approving re-vets it and clears "needs re-review" on its Journeys`));
|
|
111
|
+
if (job.personas.length === 0)
|
|
112
|
+
out.push(finding("job.no-persona", "warn", `job '${id}' serves no persona`, { fix: `add the persona ids it serves to its "personas"` }));
|
|
113
|
+
for (const pid of job.personas) {
|
|
114
|
+
const persona = findPersona(catalog, pid);
|
|
115
|
+
if (persona === undefined) {
|
|
116
|
+
out.push(finding("job.unknown-persona", "fail", `job '${id}' serves persona '${pid}', which .jevitate/personas.json does not declare`, {
|
|
117
|
+
fix: `declare persona '${pid}' in .jevitate/personas.json, or remove it from the job's "personas"`,
|
|
118
|
+
ack: true,
|
|
119
|
+
items: [`persona:${pid}`],
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
else if (persona.status !== "approved") {
|
|
123
|
+
out.push(finding("job.unvetted-persona", "warn", `job '${id}' serves persona '${pid}', which is ${persona.status === "draft" ? "not approved yet" : "stale (changed since its approval)"}`, { fix: `jevitate persona review ${pid}, then persona approve ${pid}`, items: [`persona:${pid}`] }));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const journeys = journeysForJob(catalog, id);
|
|
127
|
+
for (const pid of job.personas) {
|
|
128
|
+
if (!journeys.some((j) => j.promoted && personaLinkId(catalog, j) === pid)) {
|
|
129
|
+
out.push(finding("job.gap", "info", `no promoted Journey does job '${id}' as persona '${pid}'`, { items: [`persona:${pid}`] }));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
function journeyFindings(j, catalog) {
|
|
135
|
+
const links = journeyLinks(catalog, j);
|
|
136
|
+
if (!links.linked) {
|
|
137
|
+
return [finding("journey.unlinked", "info", `not linked to a job/persona — it promotes as before (opt-in: set metadata.job and metadata.persona to catalog ids)`)];
|
|
138
|
+
}
|
|
139
|
+
const out = [];
|
|
140
|
+
if (links.job?.status === "unknown")
|
|
141
|
+
out.push(finding("journey.unknown-job", "fail", `links job '${links.job.id}', which the catalog does not declare`, { fix: "fix metadata.job, or declare the job in .jevitate/jobs.json", items: [`job:${links.job.id}`] }));
|
|
142
|
+
if (links.persona?.status === "unknown") {
|
|
143
|
+
out.push(finding("journey.unknown-persona", "fail", `links persona '${links.persona.id}', which .jevitate/personas.json does not declare (a Journey with a job names a catalog persona id)`, { fix: "set metadata.persona to a persona id, or declare it", items: [`persona:${links.persona.id}`] }));
|
|
144
|
+
}
|
|
145
|
+
if (links.job !== undefined && links.persona === undefined)
|
|
146
|
+
out.push(finding("journey.no-persona", "warn", `links job '${links.job.id}' but no persona`, { fix: "set metadata.persona to the id of the persona doing the job" }));
|
|
147
|
+
if (links.unvetted.length > 0) {
|
|
148
|
+
out.push(finding("journey.unvetted", "warn", `its links are not approved: ${links.unvetted.join(", ")} — promote needs them approved, or --accept-unvetted "<reason>"`, { items: links.unvetted.map((u) => u.replace(/ \(.*\)$/, "")) }));
|
|
149
|
+
}
|
|
150
|
+
const job = links.job === undefined ? undefined : findJob(catalog, links.job.id);
|
|
151
|
+
if (job !== undefined && links.persona !== undefined && links.persona.status !== "unknown" && !job.personas.includes(links.persona.id)) {
|
|
152
|
+
out.push(finding("journey.persona-not-served", "fail", `persona '${links.persona.id}' does the job, but job '${job.id}' does not list that persona (it serves: ${job.personas.join(", ") || "none"})`, {
|
|
153
|
+
fix: `add '${links.persona.id}' to the job's "personas", or link the persona the job serves`,
|
|
154
|
+
ack: true,
|
|
155
|
+
items: [`job:${job.id}`, `persona:${links.persona.id}`],
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
for (const why of links.needsReReview)
|
|
159
|
+
out.push(finding("journey.needs-re-review", "warn", `needs re-review: ${why}`));
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
/** #433: the deterministic link and staleness checks every approval starts with. */
|
|
163
|
+
export const catalogLinkAnalyzer = {
|
|
164
|
+
id: ANALYZER,
|
|
165
|
+
appliesTo: ["persona", "job", "journey"],
|
|
166
|
+
analyze(subject, catalog, ctx) {
|
|
167
|
+
if (subject.kind === "persona")
|
|
168
|
+
return personaFindings(subject.id, catalog);
|
|
169
|
+
if (subject.kind === "job")
|
|
170
|
+
return jobFindings(subject.id, catalog);
|
|
171
|
+
const j = ctx.journey === undefined ? catalog.journeys.find((x) => x.id === subject.id) : catalogJourney(ctx.journey);
|
|
172
|
+
return j === undefined ? [] : journeyFindings(j, catalog);
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
//# sourceMappingURL=pre-approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-approval.js","sourceRoot":"","sources":["../src/pre-approval.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAqC,MAAM,cAAc,CAAC;AAuExK,MAAM,QAAQ,GAA0B,EAAE,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAA6B;IACvE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAClI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,mBAAmB,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AAE9D,4GAA4G;AAC5G,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAwB,EACxB,OAAgB,EAChB,GAAuB,EACvB,YAA4C,oBAAoB,EAAE;IAElE,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QACzD,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC;gBACP,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrB,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,OAAO,QAAQ,CAAC,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACzG,GAAG,EAAE,oFAAoF;gBACzF,sBAAsB,EAAE,IAAI;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACnK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,OAAO,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,8GAA8G;AAC9G,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAInC;IAHF,IAAI,GAAG,qBAAqB,CAAC;IACtC,YACE,OAAe,EACN,QAA4B;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,aAAQ,GAAR,QAAQ,CAAoB;IAGvC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,QAA4B,EAAE,cAAkC;IAChH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,qBAAqB,CAC7B,GAAG,IAAI,KAAK,QAAQ,CAAC,MAAM,qDAAqD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAClJ,4FAA4F,EAC9F,QAAQ,CACT,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,iGAAiG;AAEjG,MAAM,QAAQ,GAAG,eAAe,CAAC;AAEjC,SAAS,OAAO,CAAC,IAAY,EAAE,QAA6B,EAAE,OAAe,EAAE,OAA0D,EAAE;IACzI,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACpD,sBAAsB,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI;QACzC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;KACtF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,OAAgB;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,iGAAiG,CAAC,CAAC,CAAC;IAC9L,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,yCAAyC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,qDAAqD,EAAE,CAAC,CAAC,CAAC;IACnL,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IACtG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,iCAAiC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,qFAAqF,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzO,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,EAAU,EAAE,OAAgB;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,iGAAiG,CAAC,CAAC,CAAC;IAClL,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,EAAE,GAAG,EAAE,iDAAiD,EAAE,CAAC,CAAC,CAAC;IACxK,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CACN,OAAO,CAAC,qBAAqB,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,GAAG,mDAAmD,EAAE;gBAC5H,GAAG,EAAE,oBAAoB,GAAG,sEAAsE;gBAClG,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC;aAC1B,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,GAAG,eAAe,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oCAAoC,EAAE,EAAE,EAAE,GAAG,EAAE,2BAA2B,GAAG,0BAA0B,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClS,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,iCAAiC,EAAE,iBAAiB,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClI,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,CAAiB,EAAE,OAAgB;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,EAAE,oHAAoH,CAAC,CAAC,CAAC;IACrK,CAAC;IACD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG,CAAC,EAAE,uCAAuC,EAAE,EAAE,GAAG,EAAE,6DAA6D,EAAE,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjQ,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,EAAE,kBAAkB,KAAK,CAAC,OAAO,CAAC,EAAE,qGAAqG,EAAE,EAAE,GAAG,EAAE,qDAAqD,EAAE,KAAK,EAAE,CAAC,WAAW,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxS,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG,CAAC,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAE,6DAA6D,EAAE,CAAC,CAAC,CAAC;IAClO,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,EAAE,+BAA+B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iEAAiE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5O,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjF,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACvI,GAAG,CAAC,IAAI,CACN,OAAO,CAAC,4BAA4B,EAAE,MAAM,EAAE,YAAY,KAAK,CAAC,OAAO,CAAC,EAAE,4BAA4B,GAAG,CAAC,EAAE,4CAA4C,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE;YAC5L,GAAG,EAAE,QAAQ,KAAK,CAAC,OAAO,CAAC,EAAE,+DAA+D;YAC5F,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,WAAW,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;SACxD,CAAC,CACH,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,aAAa;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,EAAE,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC;IACvH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,mBAAmB,GAAwB;IACtD,EAAE,EAAE,QAAQ;IACZ,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtH,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC"}
|
package/dist/program.js
CHANGED
|
@@ -15,10 +15,14 @@ import { registerProfileCommands } from "./profile-cli.js";
|
|
|
15
15
|
import { registerSiteCommands } from "./site-cli.js";
|
|
16
16
|
import { registerRecordingCommands } from "./recording-cli.js";
|
|
17
17
|
import { registerJourneyCommands } from "./journey-cli.js";
|
|
18
|
+
import { registerCatalogCommands } from "./catalog-cli.js";
|
|
19
|
+
import { registerBuiltinAnalyzers } from "./builtin-analyzers.js";
|
|
18
20
|
import { registerSourceCommands } from "./source-cli.js";
|
|
19
21
|
import { registerLoadCommands } from "./load-cli.js";
|
|
20
22
|
import { registerExploreCommands } from "./explore-cli.js";
|
|
23
|
+
import { registerLoginCommand } from "./login-cli.js";
|
|
21
24
|
import { registerCampaignCommands } from "./campaign-cli.js";
|
|
25
|
+
import { registerSweepCommand } from "./sweep-cli.js";
|
|
22
26
|
import { registerVerifyFixCommands } from "./verify-fix-cli.js";
|
|
23
27
|
import { registerAuthorJourneyCommands } from "./author-journey-cli.js";
|
|
24
28
|
import { registerDemoCommands } from "./demo-aspect-cli.js";
|
|
@@ -48,15 +52,20 @@ export function buildProgram(deps) {
|
|
|
48
52
|
program.name("jevitate").description("Autonomous browser testing that turns discovered bugs into deterministic regression tests").version(versionString());
|
|
49
53
|
// #218: the shared refusal path (cli-refusal.ts) needs to know which command is running.
|
|
50
54
|
trackActionCommand(program);
|
|
55
|
+
// #434/#435: the readiness and catalog-analysis pre-approval analyzers (once per process).
|
|
56
|
+
registerBuiltinAnalyzers();
|
|
51
57
|
registerInitCommands(program, deps);
|
|
52
58
|
registerProfileCommands(program, deps);
|
|
53
59
|
registerSiteCommands(program, deps);
|
|
54
60
|
registerRecordingCommands(program, deps);
|
|
55
61
|
registerJourneyCommands(program, deps);
|
|
62
|
+
registerCatalogCommands(program, deps); // #433: persona/job review|approve, catalog status
|
|
56
63
|
registerSourceCommands(program, deps);
|
|
57
64
|
registerLoadCommands(program, deps);
|
|
58
65
|
registerExploreCommands(program, deps, buildProgram);
|
|
66
|
+
registerLoginCommand(program, deps); // #427: mint a persona's storage state from env credentials
|
|
59
67
|
registerCampaignCommands(program, deps, buildProgram); // #293: journey-anchored campaigns
|
|
68
|
+
registerSweepCommand(program, deps, buildProgram); // #425: many targets × personas, one aggregate
|
|
60
69
|
registerVerifyFixCommands(program, deps);
|
|
61
70
|
// `ledger add|verify|list` (#195 part 6): the repro material verify-fix needs, kept by fingerprint.
|
|
62
71
|
registerLedgerCommands(program, {
|
|
@@ -80,6 +89,7 @@ export function buildProgram(deps) {
|
|
|
80
89
|
sitePolicyDbPath: resolveDbPath(deps),
|
|
81
90
|
...(deps.explore?.targetsConfigPath === undefined ? {} : { targetsConfigPath: deps.explore.targetsConfigPath }),
|
|
82
91
|
...(deps.environmentsFile === undefined ? {} : { environmentsFile: deps.environmentsFile }),
|
|
92
|
+
...(deps.catalogDir === undefined ? {} : { catalogDir: deps.catalogDir }),
|
|
83
93
|
...(deps.explore?.browserPortFactory === undefined ? {} : { browserPortFactory: deps.explore.browserPortFactory }),
|
|
84
94
|
browserLaunch: (flags) => browserLaunchFromFlags(flags),
|
|
85
95
|
}, withBrowserLaunchFlags);
|
package/dist/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAGL,aAAa,EACb,kBAAkB,EAClB,wBAAwB,EAExB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;GAMG;AACH,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IACvF,OAAO,GAAG,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,MAAM,WAAW,MAAM,CAAC,OAAO,GAAG,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,2FAA2F,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3J,yFAAyF;IACzF,kBAAkB,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
package/dist/project-dir.d.ts
CHANGED
|
@@ -61,7 +61,8 @@ export interface ProjectInitReport {
|
|
|
61
61
|
/**
|
|
62
62
|
* What the repo's `.jevitate/.gitignore` keeps out of git: run output (`logs/`, pruned by
|
|
63
63
|
* retention), unapproved model-drafted Journey annotations (`journeys/.drafts/`, #246: a draft
|
|
64
|
-
* reaches the repo only through `journey annotate --approve`, as part of its Journey),
|
|
64
|
+
* reaches the repo only through `journey annotate --approve`, as part of its Journey), the Jev answer cache (`cache/`, #434/#435:
|
|
65
|
+
* answers keyed by content hash — never a secret, but machine-local), and every secret or machine-local file jevitate keeps in `~/.jevitate`, in case one
|
|
65
66
|
* is ever copied or written here — credentials, config, targets, the policy database, browser
|
|
66
67
|
* profiles and sessions (storage states hold live cookies), the inbox, the mission queue, trust
|
|
67
68
|
* decisions, source clones, env files, HAR captures and traces. Journeys, regressions and
|
package/dist/project-dir.js
CHANGED
|
@@ -115,7 +115,8 @@ const GITIGNORE_HEADER = "# jevitate: local run output and anything secret or ma
|
|
|
115
115
|
/**
|
|
116
116
|
* What the repo's `.jevitate/.gitignore` keeps out of git: run output (`logs/`, pruned by
|
|
117
117
|
* retention), unapproved model-drafted Journey annotations (`journeys/.drafts/`, #246: a draft
|
|
118
|
-
* reaches the repo only through `journey annotate --approve`, as part of its Journey),
|
|
118
|
+
* reaches the repo only through `journey annotate --approve`, as part of its Journey), the Jev answer cache (`cache/`, #434/#435:
|
|
119
|
+
* answers keyed by content hash — never a secret, but machine-local), and every secret or machine-local file jevitate keeps in `~/.jevitate`, in case one
|
|
119
120
|
* is ever copied or written here — credentials, config, targets, the policy database, browser
|
|
120
121
|
* profiles and sessions (storage states hold live cookies), the inbox, the mission queue, trust
|
|
121
122
|
* decisions, source clones, env files, HAR captures and traces. Journeys, regressions and
|
|
@@ -124,6 +125,7 @@ const GITIGNORE_HEADER = "# jevitate: local run output and anything secret or ma
|
|
|
124
125
|
export const PROJECT_GITIGNORE = [
|
|
125
126
|
"logs/",
|
|
126
127
|
"journeys/.drafts/",
|
|
128
|
+
"cache/",
|
|
127
129
|
"/credentials.json",
|
|
128
130
|
"/config.json",
|
|
129
131
|
"/targets.json",
|
package/dist/project-dir.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-dir.js","sourceRoot":"","sources":["../src/project-dir.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"project-dir.js","sourceRoot":"","sources":["../src/project-dir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-promotion lines in human-readable Markdown outputs (today: the `journey demo` guide).
|
|
3
|
+
* Never in CLI stdout, JSON envelopes, SARIF, JUnit or `check`/CI artifacts.
|
|
4
|
+
*
|
|
5
|
+
* On by default. Turned off by `JEVITATE_PROMOTIONS=0|false|off|no`, or by
|
|
6
|
+
* `{ "promotions": false }` in `~/.jevitate/config.json`. A malformed config fails closed
|
|
7
|
+
* (an error), like the other config slices; an absent file or key means "on".
|
|
8
|
+
*/
|
|
9
|
+
export declare class PromotionsConfigError extends Error {
|
|
10
|
+
readonly code: "E_PROMOTIONS_CONFIG";
|
|
11
|
+
}
|
|
12
|
+
export declare const PROMOTIONS_ENV = "JEVITATE_PROMOTIONS";
|
|
13
|
+
/** The one Journeeze line appended to demo guides. */
|
|
14
|
+
export declare const JOURNEEZE_GUIDE_FOOTER = "_Want people's take on this journey too? Journeeze \u2014 human comprehension feedback for your journeys (coming soon): https://journeeze.dev_";
|
|
15
|
+
export declare function promotionsEnabled(env?: Readonly<Record<string, string | undefined>>, path?: string): boolean;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { resolveDataDir } from "./data-dir.js";
|
|
3
|
+
/**
|
|
4
|
+
* Cross-promotion lines in human-readable Markdown outputs (today: the `journey demo` guide).
|
|
5
|
+
* Never in CLI stdout, JSON envelopes, SARIF, JUnit or `check`/CI artifacts.
|
|
6
|
+
*
|
|
7
|
+
* On by default. Turned off by `JEVITATE_PROMOTIONS=0|false|off|no`, or by
|
|
8
|
+
* `{ "promotions": false }` in `~/.jevitate/config.json`. A malformed config fails closed
|
|
9
|
+
* (an error), like the other config slices; an absent file or key means "on".
|
|
10
|
+
*/
|
|
11
|
+
export class PromotionsConfigError extends Error {
|
|
12
|
+
code = "E_PROMOTIONS_CONFIG";
|
|
13
|
+
}
|
|
14
|
+
export const PROMOTIONS_ENV = "JEVITATE_PROMOTIONS";
|
|
15
|
+
/** The one Journeeze line appended to demo guides. */
|
|
16
|
+
export const JOURNEEZE_GUIDE_FOOTER = "_Want people's take on this journey too? Journeeze — human comprehension feedback for your journeys (coming soon): https://journeeze.dev_";
|
|
17
|
+
export function promotionsEnabled(env = process.env, path = resolveDataDir(["config.json"])) {
|
|
18
|
+
const flag = env[PROMOTIONS_ENV]?.trim().toLowerCase();
|
|
19
|
+
if (flag !== undefined && flag !== "") {
|
|
20
|
+
if (["0", "false", "off", "no"].includes(flag))
|
|
21
|
+
return false;
|
|
22
|
+
if (["1", "true", "on", "yes"].includes(flag))
|
|
23
|
+
return true;
|
|
24
|
+
throw new PromotionsConfigError(`${PROMOTIONS_ENV} must be one of 0/1/false/true/off/on/no/yes`);
|
|
25
|
+
}
|
|
26
|
+
let raw;
|
|
27
|
+
try {
|
|
28
|
+
raw = readFileSync(path, "utf8");
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
if (typeof e === "object" && e !== null && "code" in e && e.code === "ENOENT")
|
|
32
|
+
return true;
|
|
33
|
+
throw new PromotionsConfigError(`cannot read ${path}: ${e instanceof Error ? e.message : String(e)}`);
|
|
34
|
+
}
|
|
35
|
+
let parsed;
|
|
36
|
+
try {
|
|
37
|
+
parsed = JSON.parse(raw);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new PromotionsConfigError(`${path} is not valid JSON`);
|
|
41
|
+
}
|
|
42
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
43
|
+
throw new PromotionsConfigError(`${path} must be a JSON object`);
|
|
44
|
+
}
|
|
45
|
+
const v = parsed.promotions;
|
|
46
|
+
if (v === undefined)
|
|
47
|
+
return true;
|
|
48
|
+
if (typeof v !== "boolean")
|
|
49
|
+
throw new PromotionsConfigError(`${path}: "promotions" must be true or false`);
|
|
50
|
+
return v;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=promotions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promotions.js","sourceRoot":"","sources":["../src/promotions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,GAAG,qBAA8B,CAAC;CAChD;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAEpD,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GACjC,2IAA2I,CAAC;AAE9I,MAAM,UAAU,iBAAiB,CAC/B,MAAoD,OAAO,CAAC,GAAG,EAC/D,IAAI,GAAG,cAAc,CAAC,CAAC,aAAa,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3D,MAAM,IAAI,qBAAqB,CAAC,GAAG,cAAc,8CAA8C,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3F,MAAM,IAAI,qBAAqB,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,CAAC,GAAI,MAAkC,CAAC,UAAU,CAAC;IACzD,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,sCAAsC,CAAC,CAAC;IAC3G,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Finding, type QualityFinding } from "@jevitate/journey";
|
|
2
|
+
import type { PreApprovalAnalyzer } from "./pre-approval.js";
|
|
3
|
+
/**
|
|
4
|
+
* #434 — the Readiness section of every review sheet (`journey|job|persona review --readiness`, and
|
|
5
|
+
* every approval: `persona approve`, `job approve`, `journey promote`, `demo approve`), as two
|
|
6
|
+
* pre-approval analyzers kept visibly apart:
|
|
7
|
+
*
|
|
8
|
+
* 1. `readiness` — deterministic checks, each pass / warn / fail with a fix-it line: the links
|
|
9
|
+
* exist and are approved, the intent is complete, the lint passes, the mutation proof is known
|
|
10
|
+
* and current; a job's story parts; and the INCOSE GtWR writing rules (gtwr-rules.ts) on job
|
|
11
|
+
* stories and personas, each citing its rule id and characteristic. Blocking stays with the
|
|
12
|
+
* gates that already exist (lint errors → `--accept-weak`, unapproved links →
|
|
13
|
+
* `--accept-unvetted`, broken links → the catalog-links acknowledgment), so readiness never
|
|
14
|
+
* double-gates: none of its findings requires an acknowledgment.
|
|
15
|
+
* 2. `readiness-jev` — advisory Jev questions (typed Noul answers, each with its probability)
|
|
16
|
+
* through the judgment gateway. A low probability becomes "not ready because … (GtWR:
|
|
17
|
+
* <characteristic>)". Jev never decides: none of these findings requires an acknowledgment, and
|
|
18
|
+
* none changes an exit code. Without an advisor (no `--real`, no key) it reports why it skipped.
|
|
19
|
+
*/
|
|
20
|
+
export declare const READINESS = "readiness";
|
|
21
|
+
export declare const READINESS_JEV = "readiness-jev";
|
|
22
|
+
/** A Jev probability below this is "not ready because …". */
|
|
23
|
+
export declare const READINESS_LOW_PROBABILITY = 0.5;
|
|
24
|
+
/** #434: one GtWR rule finding as a readiness finding (`gtwr:<rule>@<field>`), citing the rule and characteristic. */
|
|
25
|
+
export declare function gtwrFinding(q: QualityFinding): Finding;
|
|
26
|
+
/** #434: the deterministic readiness checks and GtWR rule findings. */
|
|
27
|
+
export declare const readinessAnalyzer: PreApprovalAnalyzer;
|
|
28
|
+
/** #434: the advisory Jev readiness questions (Noul, with probabilities). */
|
|
29
|
+
export declare const jevReadinessAnalyzer: PreApprovalAnalyzer;
|