@isaacriehm/cairn-core 0.2.0 → 0.3.1
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/.tsbuildinfo +1 -1
- package/dist/claude/runner.d.ts +1 -1
- package/dist/claude/runner.js +62 -1
- package/dist/claude/runner.js.map +1 -1
- package/dist/claude/types.d.ts +14 -7
- package/dist/claude/types.js +5 -7
- package/dist/claude/types.js.map +1 -1
- package/dist/context/index.d.ts +4 -4
- package/dist/context/index.js +3 -4
- package/dist/context/index.js.map +1 -1
- package/dist/context/spec-delta.js +2 -3
- package/dist/context/spec-delta.js.map +1 -1
- package/dist/context/task-summary.d.ts +18 -0
- package/dist/context/task-summary.js +89 -0
- package/dist/context/task-summary.js.map +1 -0
- package/dist/decision-capture/id.d.ts +21 -4
- package/dist/decision-capture/id.js +56 -5
- package/dist/decision-capture/id.js.map +1 -1
- package/dist/decision-capture/index.d.ts +7 -22
- package/dist/decision-capture/index.js +7 -17
- package/dist/decision-capture/index.js.map +1 -1
- package/dist/doctor/index.d.ts +1 -1
- package/dist/doctor/index.js +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.js +1 -1
- package/dist/events/writer.d.ts +1 -1
- package/dist/events/writer.js +1 -1
- package/dist/gc/canary.d.ts +13 -23
- package/dist/gc/canary.js +36 -92
- package/dist/gc/canary.js.map +1 -1
- package/dist/gc/citation-integrity.d.ts +6 -6
- package/dist/gc/citation-integrity.js +64 -20
- package/dist/gc/citation-integrity.js.map +1 -1
- package/dist/gc/frontmatter.js +1 -1
- package/dist/gc/generator-drift.js +1 -1
- package/dist/gc/generator-drift.js.map +1 -1
- package/dist/gc/index.d.ts +2 -2
- package/dist/gc/index.js +1 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/gc/quality-update.js +1 -1
- package/dist/gc/quality-update.js.map +1 -1
- package/dist/gc/types.d.ts +1 -30
- package/dist/ground/index.d.ts +2 -2
- package/dist/ground/index.js +1 -1
- package/dist/ground/index.js.map +1 -1
- package/dist/ground/ledgers.d.ts +0 -4
- package/dist/ground/ledgers.js +10 -8
- package/dist/ground/ledgers.js.map +1 -1
- package/dist/ground/manifest.js +0 -2
- package/dist/ground/manifest.js.map +1 -1
- package/dist/ground/quality-grades.js +3 -1
- package/dist/ground/quality-grades.js.map +1 -1
- package/dist/ground/schemas.d.ts +2 -7
- package/dist/ground/schemas.js +7 -2
- package/dist/ground/schemas.js.map +1 -1
- package/dist/ground/scope-index.d.ts +59 -12
- package/dist/ground/scope-index.js +212 -43
- package/dist/ground/scope-index.js.map +1 -1
- package/dist/hooks/bypass-detection.js +4 -2
- package/dist/hooks/bypass-detection.js.map +1 -1
- package/dist/hooks/post-tool-use/citation-scanner.d.ts +7 -5
- package/dist/hooks/post-tool-use/citation-scanner.js +15 -9
- package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
- package/dist/hooks/post-tool-use/copy-scanner.js +1 -1
- package/dist/hooks/post-tool-use/copy-scanner.js.map +1 -1
- package/dist/hooks/post-tool-use/ledger-cache.d.ts +8 -0
- package/dist/hooks/post-tool-use/ledger-cache.js +53 -0
- package/dist/hooks/post-tool-use/ledger-cache.js.map +1 -1
- package/dist/hooks/post-tool-use/legend-builder.d.ts +3 -3
- package/dist/hooks/post-tool-use/legend-builder.js +30 -8
- package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
- package/dist/hooks/post-tool-use/read-enricher.d.ts +1 -1
- package/dist/hooks/post-tool-use/read-enricher.js +68 -21
- package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
- package/dist/hooks/post-tool-use/write-guardian.js +148 -18
- package/dist/hooks/post-tool-use/write-guardian.js.map +1 -1
- package/dist/hooks/runners/index.d.ts +1 -0
- package/dist/hooks/runners/index.js +1 -0
- package/dist/hooks/runners/index.js.map +1 -1
- package/dist/hooks/runners/payload.d.ts +1 -1
- package/dist/hooks/runners/payload.js +27 -12
- package/dist/hooks/runners/payload.js.map +1 -1
- package/dist/hooks/runners/session-start.js +212 -66
- package/dist/hooks/runners/session-start.js.map +1 -1
- package/dist/hooks/runners/stop.d.ts +9 -12
- package/dist/hooks/runners/stop.js +67 -36
- package/dist/hooks/runners/stop.js.map +1 -1
- package/dist/hooks/runners/user-prompt-submit.d.ts +15 -0
- package/dist/hooks/runners/user-prompt-submit.js +149 -0
- package/dist/hooks/runners/user-prompt-submit.js.map +1 -0
- package/dist/hooks/user-prompt-submit.d.ts +7 -0
- package/dist/hooks/user-prompt-submit.js +12 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -0
- package/dist/index.d.ts +1 -6
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/init/baseline-audit.d.ts +5 -1
- package/dist/init/baseline-audit.js +25 -2
- package/dist/init/baseline-audit.js.map +1 -1
- package/dist/init/glob-inference.d.ts +16 -0
- package/dist/init/glob-inference.js +108 -0
- package/dist/init/glob-inference.js.map +1 -0
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.js +1 -0
- package/dist/init/index.js.map +1 -1
- package/dist/init/ingest-docs.d.ts +1 -1
- package/dist/init/ingest-docs.js +19 -6
- package/dist/init/ingest-docs.js.map +1 -1
- package/dist/init/init.js +12 -7
- package/dist/init/init.js.map +1 -1
- package/dist/init/mapper-merge.d.ts +8 -2
- package/dist/init/mapper-merge.js +50 -32
- package/dist/init/mapper-merge.js.map +1 -1
- package/dist/init/mapper-parallel.d.ts +2 -3
- package/dist/init/mapper-parallel.js +9 -38
- package/dist/init/mapper-parallel.js.map +1 -1
- package/dist/init/mapper-prompts.js +1 -1
- package/dist/init/mapper-prompts.js.map +1 -1
- package/dist/init/mapper.d.ts +6 -127
- package/dist/init/mapper.js +30 -7
- package/dist/init/mapper.js.map +1 -1
- package/dist/init/module-slicer.d.ts +1 -1
- package/dist/init/module-slicer.js +1 -1
- package/dist/init/multi-dev/install.d.ts +5 -11
- package/dist/init/multi-dev/install.js +4 -6
- package/dist/init/multi-dev/install.js.map +1 -1
- package/dist/init/overlay.d.ts +2 -2
- package/dist/init/overlay.js +1 -1
- package/dist/init/overlay.js.map +1 -1
- package/dist/init/phases/10-strip.js +1 -2
- package/dist/init/phases/10-strip.js.map +1 -1
- package/dist/init/phases/12-multidev.d.ts +1 -6
- package/dist/init/phases/12-multidev.js +1 -6
- package/dist/init/phases/12-multidev.js.map +1 -1
- package/dist/init/phases/3b-seed.d.ts +1 -10
- package/dist/init/phases/3b-seed.js +1 -10
- package/dist/init/phases/3b-seed.js.map +1 -1
- package/dist/init/phases/4-pilot.js +53 -15
- package/dist/init/phases/4-pilot.js.map +1 -1
- package/dist/init/phases/5-brand.js +10 -10
- package/dist/init/phases/5-brand.js.map +1 -1
- package/dist/init/prompts.d.ts +6 -8
- package/dist/init/prompts.js +3 -6
- package/dist/init/prompts.js.map +1 -1
- package/dist/init/rules-merge/ingest.js +1 -1
- package/dist/init/source-comments/classify.d.ts +1 -41
- package/dist/init/source-comments/classify.js +68 -37
- package/dist/init/source-comments/classify.js.map +1 -1
- package/dist/init/source-comments/index.d.ts +2 -2
- package/dist/init/source-comments/index.js +2 -2
- package/dist/init/source-comments/index.js.map +1 -1
- package/dist/init/source-comments/ingest.d.ts +38 -2
- package/dist/init/source-comments/ingest.js +237 -4
- package/dist/init/source-comments/ingest.js.map +1 -1
- package/dist/init/source-comments/strip-replace.d.ts +10 -19
- package/dist/init/source-comments/strip-replace.js +26 -2
- package/dist/init/source-comments/strip-replace.js.map +1 -1
- package/dist/init/source-comments/walker.d.ts +9 -2
- package/dist/init/source-comments/walker.js +38 -19
- package/dist/init/source-comments/walker.js.map +1 -1
- package/dist/init/submodules.d.ts +3 -2
- package/dist/init/types.d.ts +3 -5
- package/dist/init/types.js +3 -5
- package/dist/init/types.js.map +1 -1
- package/dist/init/visual.d.ts +4 -9
- package/dist/init/visual.js +1 -16
- package/dist/init/visual.js.map +1 -1
- package/dist/logger.d.ts +0 -1
- package/dist/logger.js +0 -1
- package/dist/logger.js.map +1 -1
- package/dist/mcp/context.d.ts +2 -3
- package/dist/mcp/context.js.map +1 -1
- package/dist/mcp/errors.d.ts +1 -1
- package/dist/mcp/errors.js.map +1 -1
- package/dist/mcp/history/prompt.d.ts +2 -1
- package/dist/mcp/history/walker.js +1 -1
- package/dist/mcp/history/walker.js.map +1 -1
- package/dist/mcp/path-allowlist.d.ts +0 -6
- package/dist/mcp/path-allowlist.js +0 -10
- package/dist/mcp/path-allowlist.js.map +1 -1
- package/dist/mcp/schemas.d.ts +15 -72
- package/dist/mcp/schemas.js +21 -70
- package/dist/mcp/schemas.js.map +1 -1
- package/dist/mcp/serve.d.ts +1 -1
- package/dist/mcp/serve.js +2 -5
- package/dist/mcp/serve.js.map +1 -1
- package/dist/mcp/server.js +10 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/telemetry.d.ts +8 -1
- package/dist/mcp/telemetry.js +16 -0
- package/dist/mcp/telemetry.js.map +1 -1
- package/dist/mcp/tools/decision-get.js +37 -29
- package/dist/mcp/tools/decision-get.js.map +1 -1
- package/dist/mcp/tools/decisions-in-scope.js +22 -3
- package/dist/mcp/tools/decisions-in-scope.js.map +1 -1
- package/dist/mcp/tools/index.js +2 -2
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/invariant-get.js +1 -1
- package/dist/mcp/tools/invariant-get.js.map +1 -1
- package/dist/mcp/tools/invariants-in-scope.js +26 -7
- package/dist/mcp/tools/invariants-in-scope.js.map +1 -1
- package/dist/mcp/tools/query-history.js +3 -3
- package/dist/mcp/tools/query-history.js.map +1 -1
- package/dist/mcp/tools/resolve-attention.d.ts +3 -3
- package/dist/mcp/tools/resolve-attention.js +40 -28
- package/dist/mcp/tools/resolve-attention.js.map +1 -1
- package/dist/mcp/tools/search.js +3 -4
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/task-create.d.ts +15 -0
- package/dist/mcp/tools/task-create.js +96 -0
- package/dist/mcp/tools/task-create.js.map +1 -0
- package/dist/mcp/tools/timeline.js +3 -7
- package/dist/mcp/tools/timeline.js.map +1 -1
- package/dist/profiles/types.d.ts +1 -1
- package/dist/profiles/types.js +1 -1
- package/dist/session/id.d.ts +1 -3
- package/dist/session/id.js +1 -1
- package/dist/session/id.js.map +1 -1
- package/dist/session-start/build.d.ts +12 -14
- package/dist/session-start/build.js +68 -38
- package/dist/session-start/build.js.map +1 -1
- package/dist/session-start/index.d.ts +2 -2
- package/dist/session-start/index.js +2 -2
- package/dist/session-start/index.js.map +1 -1
- package/dist/session-start/templates.d.ts +20 -4
- package/dist/session-start/templates.js +45 -35
- package/dist/session-start/templates.js.map +1 -1
- package/dist/status-line/format.d.ts +19 -11
- package/dist/status-line/format.js +44 -36
- package/dist/status-line/format.js.map +1 -1
- package/dist/status-line/index.d.ts +3 -1
- package/dist/status-line/index.js +1 -1
- package/dist/status-line/index.js.map +1 -1
- package/dist/status-line/reader.d.ts +9 -6
- package/dist/status-line/reader.js +50 -15
- package/dist/status-line/reader.js.map +1 -1
- package/dist/status-line/writer.d.ts +5 -0
- package/dist/status-line/writer.js +9 -0
- package/dist/status-line/writer.js.map +1 -1
- package/dist/trace/index.d.ts +44 -0
- package/dist/trace/index.js +51 -0
- package/dist/trace/index.js.map +1 -0
- package/package.json +2 -3
- package/templates/.archive/README.md +3 -3
- package/templates/.cairn/config/sensors.yaml +16 -19
- package/templates/.cairn/config/stub-patterns.yaml +4 -4
- package/templates/.cairn/config/trust-policy.yaml +3 -35
- package/templates/.cairn/config/workflow.md +13 -194
- package/templates/.cairn/git-hooks/commit-msg +1 -1
- package/templates/.cairn/ground/canonical-map/topics.yaml +3 -26
- package/templates/.cairn/ground/capabilities/snippets.yaml +0 -1
- package/templates/.cairn/ground/manifest.yaml +5 -8
- package/templates/.cairn/ground/product/personas.yaml +0 -1
- package/templates/.github/workflows/cairn-check.yml +3 -5
- package/dist/context/checkpoint.d.ts +0 -11
- package/dist/context/checkpoint.js +0 -30
- package/dist/context/checkpoint.js.map +0 -1
- package/dist/decision-capture/capture.d.ts +0 -57
- package/dist/decision-capture/capture.js +0 -186
- package/dist/decision-capture/capture.js.map +0 -1
- package/dist/decision-capture/extractor.d.ts +0 -20
- package/dist/decision-capture/extractor.js +0 -103
- package/dist/decision-capture/extractor.js.map +0 -1
- package/dist/decision-capture/prompt.d.ts +0 -15
- package/dist/decision-capture/prompt.js +0 -68
- package/dist/decision-capture/prompt.js.map +0 -1
- package/dist/decision-capture/refinement-prompt.d.ts +0 -25
- package/dist/decision-capture/refinement-prompt.js +0 -146
- package/dist/decision-capture/refinement-prompt.js.map +0 -1
- package/dist/decision-capture/refinement-schema.d.ts +0 -52
- package/dist/decision-capture/refinement-schema.js +0 -61
- package/dist/decision-capture/refinement-schema.js.map +0 -1
- package/dist/decision-capture/refinement.d.ts +0 -60
- package/dist/decision-capture/refinement.js +0 -439
- package/dist/decision-capture/refinement.js.map +0 -1
- package/dist/decision-capture/schema.d.ts +0 -70
- package/dist/decision-capture/schema.js +0 -71
- package/dist/decision-capture/schema.js.map +0 -1
- package/dist/decision-capture/types.d.ts +0 -201
- package/dist/decision-capture/types.js +0 -20
- package/dist/decision-capture/types.js.map +0 -1
- package/dist/decision-capture/writer.d.ts +0 -90
- package/dist/decision-capture/writer.js +0 -267
- package/dist/decision-capture/writer.js.map +0 -1
- package/dist/frontend-types.d.ts +0 -243
- package/dist/frontend-types.js +0 -15
- package/dist/frontend-types.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -14
- package/dist/hooks/index.js +0 -14
- package/dist/hooks/index.js.map +0 -1
- package/dist/inbox.d.ts +0 -17
- package/dist/inbox.js +0 -30
- package/dist/inbox.js.map +0 -1
- package/dist/mcp/tools/append-run-note.d.ts +0 -18
- package/dist/mcp/tools/append-run-note.js +0 -54
- package/dist/mcp/tools/append-run-note.js.map +0 -1
- package/dist/mcp/tools/append.d.ts +0 -8
- package/dist/mcp/tools/append.js +0 -37
- package/dist/mcp/tools/append.js.map +0 -1
- package/dist/mcp/tools/ask-operator.d.ts +0 -34
- package/dist/mcp/tools/ask-operator.js +0 -97
- package/dist/mcp/tools/ask-operator.js.map +0 -1
- package/dist/mcp/tools/drop-task.d.ts +0 -12
- package/dist/mcp/tools/drop-task.js +0 -68
- package/dist/mcp/tools/drop-task.js.map +0 -1
- package/dist/mcp/tools/record-run-event.d.ts +0 -10
- package/dist/mcp/tools/record-run-event.js +0 -32
- package/dist/mcp/tools/record-run-event.js.map +0 -1
- package/dist/prompt.d.ts +0 -19
- package/dist/prompt.js +0 -50
- package/dist/prompt.js.map +0 -1
- package/dist/tier0/classify.d.ts +0 -10
- package/dist/tier0/classify.js +0 -110
- package/dist/tier0/classify.js.map +0 -1
- package/dist/tier0/index.d.ts +0 -2
- package/dist/tier0/index.js +0 -2
- package/dist/tier0/index.js.map +0 -1
- package/dist/tier0/types.d.ts +0 -24
- package/dist/tier0/types.js +0 -9
- package/dist/tier0/types.js.map +0 -1
- package/dist/tightener/index.d.ts +0 -4
- package/dist/tightener/index.js +0 -4
- package/dist/tightener/index.js.map +0 -1
- package/dist/tightener/prompt.d.ts +0 -3
- package/dist/tightener/prompt.js +0 -67
- package/dist/tightener/prompt.js.map +0 -1
- package/dist/tightener/schema.d.ts +0 -68
- package/dist/tightener/schema.js +0 -44
- package/dist/tightener/schema.js.map +0 -1
- package/dist/tightener/tighten.d.ts +0 -2
- package/dist/tightener/tighten.js +0 -66
- package/dist/tightener/tighten.js.map +0 -1
- package/dist/tightener/types.d.ts +0 -74
- package/dist/tightener/types.js +0 -6
- package/dist/tightener/types.js.map +0 -1
- package/templates/.claude/settings.json +0 -57
- package/templates/.mcp.json +0 -8
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JSON Schema enforced by `claude --json-schema` for the decision-extractor
|
|
3
|
-
* output. Mirrors `DecisionExtractorOutput` exactly.
|
|
4
|
-
*
|
|
5
|
-
* Assertion kinds match the production set in `src/ground/schemas.ts`. The
|
|
6
|
-
* extractor's `parameters` is a free-form object; the cairn materializes
|
|
7
|
-
* the assertion into the draft as-is and lets sensors validate at evaluation
|
|
8
|
-
* time. Rejecting at extract time would block the operator's intent over
|
|
9
|
-
* a malformed parameter the agent might still get right on the next pass.
|
|
10
|
-
*/
|
|
11
|
-
export declare const DECISION_EXTRACTOR_OUTPUT_SCHEMA: {
|
|
12
|
-
readonly type: "object";
|
|
13
|
-
readonly additionalProperties: false;
|
|
14
|
-
readonly properties: {
|
|
15
|
-
readonly subject: {
|
|
16
|
-
readonly type: "string";
|
|
17
|
-
readonly minLength: 1;
|
|
18
|
-
};
|
|
19
|
-
readonly summary: {
|
|
20
|
-
readonly type: "string";
|
|
21
|
-
readonly minLength: 1;
|
|
22
|
-
};
|
|
23
|
-
readonly scope_globs: {
|
|
24
|
-
readonly type: "array";
|
|
25
|
-
readonly items: {
|
|
26
|
-
readonly type: "string";
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
readonly supersedes: {
|
|
30
|
-
readonly anyOf: readonly [{
|
|
31
|
-
readonly type: "string";
|
|
32
|
-
readonly pattern: "^DEC-\\d{4,}$";
|
|
33
|
-
}, {
|
|
34
|
-
readonly type: "null";
|
|
35
|
-
}];
|
|
36
|
-
};
|
|
37
|
-
readonly candidate_assertions: {
|
|
38
|
-
readonly type: "array";
|
|
39
|
-
readonly maxItems: 3;
|
|
40
|
-
readonly items: {
|
|
41
|
-
readonly type: "object";
|
|
42
|
-
readonly additionalProperties: false;
|
|
43
|
-
readonly properties: {
|
|
44
|
-
readonly id: {
|
|
45
|
-
readonly type: "string";
|
|
46
|
-
};
|
|
47
|
-
readonly kind: {
|
|
48
|
-
readonly enum: readonly ["schema_must_contain", "text_must_match", "text_must_not_match", "index_must_exist", "ast_pattern", "file_must_not_be_modified", "query_must_filter_by", "route_must_have_guard", "event_must_emit", "service_method_must_call", "human_review_hint"];
|
|
49
|
-
};
|
|
50
|
-
readonly description: {
|
|
51
|
-
readonly type: "string";
|
|
52
|
-
readonly minLength: 1;
|
|
53
|
-
};
|
|
54
|
-
readonly parameters: {
|
|
55
|
-
readonly type: "object";
|
|
56
|
-
readonly additionalProperties: true;
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
readonly required: readonly ["kind", "description"];
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
readonly confidence_signal: {
|
|
63
|
-
readonly enum: readonly ["high", "medium", "low"];
|
|
64
|
-
};
|
|
65
|
-
readonly not_a_decision: {
|
|
66
|
-
readonly type: "boolean";
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
readonly required: readonly ["subject", "summary", "scope_globs", "candidate_assertions", "confidence_signal", "not_a_decision"];
|
|
70
|
-
};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JSON Schema enforced by `claude --json-schema` for the decision-extractor
|
|
3
|
-
* output. Mirrors `DecisionExtractorOutput` exactly.
|
|
4
|
-
*
|
|
5
|
-
* Assertion kinds match the production set in `src/ground/schemas.ts`. The
|
|
6
|
-
* extractor's `parameters` is a free-form object; the cairn materializes
|
|
7
|
-
* the assertion into the draft as-is and lets sensors validate at evaluation
|
|
8
|
-
* time. Rejecting at extract time would block the operator's intent over
|
|
9
|
-
* a malformed parameter the agent might still get right on the next pass.
|
|
10
|
-
*/
|
|
11
|
-
export const DECISION_EXTRACTOR_OUTPUT_SCHEMA = {
|
|
12
|
-
type: "object",
|
|
13
|
-
additionalProperties: false,
|
|
14
|
-
properties: {
|
|
15
|
-
subject: { type: "string", minLength: 1 },
|
|
16
|
-
summary: { type: "string", minLength: 1 },
|
|
17
|
-
scope_globs: {
|
|
18
|
-
type: "array",
|
|
19
|
-
items: { type: "string" },
|
|
20
|
-
},
|
|
21
|
-
supersedes: {
|
|
22
|
-
anyOf: [
|
|
23
|
-
{ type: "string", pattern: "^DEC-\\d{4,}$" },
|
|
24
|
-
{ type: "null" },
|
|
25
|
-
],
|
|
26
|
-
},
|
|
27
|
-
candidate_assertions: {
|
|
28
|
-
type: "array",
|
|
29
|
-
maxItems: 3,
|
|
30
|
-
items: {
|
|
31
|
-
type: "object",
|
|
32
|
-
additionalProperties: false,
|
|
33
|
-
properties: {
|
|
34
|
-
id: { type: "string" },
|
|
35
|
-
kind: {
|
|
36
|
-
enum: [
|
|
37
|
-
"schema_must_contain",
|
|
38
|
-
"text_must_match",
|
|
39
|
-
"text_must_not_match",
|
|
40
|
-
"index_must_exist",
|
|
41
|
-
"ast_pattern",
|
|
42
|
-
"file_must_not_be_modified",
|
|
43
|
-
"query_must_filter_by",
|
|
44
|
-
"route_must_have_guard",
|
|
45
|
-
"event_must_emit",
|
|
46
|
-
"service_method_must_call",
|
|
47
|
-
"human_review_hint",
|
|
48
|
-
],
|
|
49
|
-
},
|
|
50
|
-
description: { type: "string", minLength: 1 },
|
|
51
|
-
parameters: {
|
|
52
|
-
type: "object",
|
|
53
|
-
additionalProperties: true,
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
required: ["kind", "description"],
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
confidence_signal: { enum: ["high", "medium", "low"] },
|
|
60
|
-
not_a_decision: { type: "boolean" },
|
|
61
|
-
},
|
|
62
|
-
required: [
|
|
63
|
-
"subject",
|
|
64
|
-
"summary",
|
|
65
|
-
"scope_globs",
|
|
66
|
-
"candidate_assertions",
|
|
67
|
-
"confidence_signal",
|
|
68
|
-
"not_a_decision",
|
|
69
|
-
],
|
|
70
|
-
};
|
|
71
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/decision-capture/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;QACzC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;QACzC,WAAW,EAAE;YACX,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE;gBAC5C,EAAE,IAAI,EAAE,MAAM,EAAE;aACjB;SACF;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACtB,IAAI,EAAE;wBACJ,IAAI,EAAE;4BACJ,qBAAqB;4BACrB,iBAAiB;4BACjB,qBAAqB;4BACrB,kBAAkB;4BAClB,aAAa;4BACb,2BAA2B;4BAC3B,sBAAsB;4BACtB,uBAAuB;4BACvB,iBAAiB;4BACjB,0BAA0B;4BAC1B,mBAAmB;yBACpB;qBACF;oBACD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;oBAC7C,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,oBAAoB,EAAE,IAAI;qBAC3B;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;aAClC;SACF;QACD,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QACtD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KACpC;IACD,QAAQ,EAAE;QACR,SAAS;QACT,SAAS;QACT,aAAa;QACb,sBAAsB;QACtB,mBAAmB;QACnB,gBAAgB;KACjB;CACO,CAAC"}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Phase 14 — decision capture flow.
|
|
3
|
-
*
|
|
4
|
-
* Per WORKFLOW_GUIDE / L26 / L27 / INTEGRATION_PLAN §5 Phase 14:
|
|
5
|
-
*
|
|
6
|
-
* /direction <text> OR free-text Tier-0 classified as `direction`
|
|
7
|
-
* → Tier-1 decision-extractor produces structured candidate
|
|
8
|
-
* → cairn writes draft to .cairn/ground/decisions/_inbox/DEC-NNNN.draft.md
|
|
9
|
-
* → Discord prompt: 🟢 commit | 🟡 edit | 🔴 not-a-decision
|
|
10
|
-
* → on 🟢: status:accepted, move to .cairn/ground/decisions/DEC-NNNN.md,
|
|
11
|
-
* regenerate decisions.ledger.yaml; assertions become live
|
|
12
|
-
* → on 🟡: leave draft + post correction prompt (re-run extractor on follow-up)
|
|
13
|
-
* → on 🔴: discard draft (no record)
|
|
14
|
-
*
|
|
15
|
-
* The extractor is read-only (no file-write tools). The draft writer + the
|
|
16
|
-
* confirm flow are pure-mechanical. The only LLM call is the extractor;
|
|
17
|
-
* everything else is the cairn assembling state from the typed payload.
|
|
18
|
-
*/
|
|
19
|
-
import type { ClaudeTier } from "../claude/index.js";
|
|
20
|
-
/** Assertion shape the extractor proposes — superset of DecisionAssertion kinds. */
|
|
21
|
-
export interface CandidateAssertion {
|
|
22
|
-
/** Optional id; cairn fills in `<DEC-id>-A<N>` if absent. */
|
|
23
|
-
id?: string;
|
|
24
|
-
kind: "schema_must_contain" | "text_must_match" | "text_must_not_match" | "index_must_exist" | "ast_pattern" | "file_must_not_be_modified" | "query_must_filter_by" | "route_must_have_guard" | "event_must_emit" | "service_method_must_call" | "human_review_hint";
|
|
25
|
-
/** Free-form description of what the assertion enforces. */
|
|
26
|
-
description: string;
|
|
27
|
-
/**
|
|
28
|
-
* Inline assertion-specific knobs — typed loosely on this side because the
|
|
29
|
-
* extractor's output is best-effort. Sensors/Layer-D evaluate these against
|
|
30
|
-
* the diff at run time; malformed entries fail loud at evaluation, not here.
|
|
31
|
-
*/
|
|
32
|
-
parameters?: Record<string, unknown>;
|
|
33
|
-
}
|
|
34
|
-
export interface DecisionExtractorOutput {
|
|
35
|
-
/** One-line subject — imperative voice. */
|
|
36
|
-
subject: string;
|
|
37
|
-
/** 2-4 sentence summary expanding the subject. */
|
|
38
|
-
summary: string;
|
|
39
|
-
/** Repo-relative globs the decision binds. May be empty. */
|
|
40
|
-
scope_globs: string[];
|
|
41
|
-
/**
|
|
42
|
-
* Existing decision id this one supersedes, when the operator's direction
|
|
43
|
-
* is explicitly a course-change. Format DEC-NNNN. Null/undefined when not
|
|
44
|
-
* applicable.
|
|
45
|
-
*/
|
|
46
|
-
supersedes?: string | null;
|
|
47
|
-
/** 0-3 candidate assertions; cairn materializes them into the draft. */
|
|
48
|
-
candidate_assertions: CandidateAssertion[];
|
|
49
|
-
/** Extractor's confidence the input was a real direction. */
|
|
50
|
-
confidence_signal: "high" | "medium" | "low";
|
|
51
|
-
/**
|
|
52
|
-
* Set when the extractor decided the input was not a direction at all
|
|
53
|
-
* (rambling, off-topic, question-shaped). When true, the draft is NOT
|
|
54
|
-
* written; the caller treats it as a no-op.
|
|
55
|
-
*/
|
|
56
|
-
not_a_decision: boolean;
|
|
57
|
-
}
|
|
58
|
-
export interface DecisionExtractorInput {
|
|
59
|
-
/** Raw operator text (slash-arg or free-text body). */
|
|
60
|
-
raw_text: string;
|
|
61
|
-
/** Operator id (for audit / decided_by frontmatter). */
|
|
62
|
-
author_id: string;
|
|
63
|
-
/** When the message was received. ISO timestamp. */
|
|
64
|
-
received_at: string;
|
|
65
|
-
/** Source channel/source for traceability. */
|
|
66
|
-
source: string;
|
|
67
|
-
/**
|
|
68
|
-
* Optional: existing accepted-decision summaries the extractor can cite for
|
|
69
|
-
* supersedes. Each item: `{id, title, scope_summary}`. Order: most recent
|
|
70
|
-
* first. Cap to ~10 per call to keep the prompt bounded.
|
|
71
|
-
*/
|
|
72
|
-
accepted_decisions?: {
|
|
73
|
-
id: string;
|
|
74
|
-
title: string;
|
|
75
|
-
scope_summary: string;
|
|
76
|
-
}[];
|
|
77
|
-
/** Tier — default 1 (Haiku) per workflow.md `decision_extractor: 1`. */
|
|
78
|
-
tier: ClaudeTier;
|
|
79
|
-
/** Per-call timeout. Default 120_000 ms. */
|
|
80
|
-
timeout_ms?: number;
|
|
81
|
-
}
|
|
82
|
-
/** A draft written to `_inbox/`. Returned by writeDecisionDraft. */
|
|
83
|
-
export interface DecisionDraft {
|
|
84
|
-
/** Allocated DEC-id. */
|
|
85
|
-
id: string;
|
|
86
|
-
/** Repo-relative path of the draft file. */
|
|
87
|
-
draft_path: string;
|
|
88
|
-
/** Path the draft will move to on accept. */
|
|
89
|
-
canonical_path: string;
|
|
90
|
-
/** Original extractor output (for confirmation rendering). */
|
|
91
|
-
output: DecisionExtractorOutput;
|
|
92
|
-
/** Raw direction text the operator submitted. */
|
|
93
|
-
raw_text: string;
|
|
94
|
-
}
|
|
95
|
-
/** Operator's verdict on a draft. */
|
|
96
|
-
export type DraftConfirmDecision = "commit" | "edit" | "reject";
|
|
97
|
-
export interface ConfirmResult {
|
|
98
|
-
decision: DraftConfirmDecision;
|
|
99
|
-
/** Set when decision="commit" — final canonical path of the accepted decision. */
|
|
100
|
-
accepted_path?: string;
|
|
101
|
-
/** Number of ledger entries after regenerate. */
|
|
102
|
-
ledger_size?: number;
|
|
103
|
-
/** Extractor's structured output preserved for downstream observers. */
|
|
104
|
-
draft?: DecisionDraft;
|
|
105
|
-
/** When decision="edit", operator-supplied correction text. */
|
|
106
|
-
correction?: string;
|
|
107
|
-
/** Extractor confidence. */
|
|
108
|
-
confidence?: "high" | "medium" | "low";
|
|
109
|
-
}
|
|
110
|
-
/** Aggregate result handed back from runDecisionCapture. */
|
|
111
|
-
export interface DecisionCaptureResult {
|
|
112
|
-
/** True iff the extractor flagged not_a_decision and the flow short-circuited. */
|
|
113
|
-
short_circuited: boolean;
|
|
114
|
-
/** Set when the extractor produced a draft. */
|
|
115
|
-
draft?: DecisionDraft;
|
|
116
|
-
/** Set when the operator confirmed via the dialog. */
|
|
117
|
-
confirm?: ConfirmResult;
|
|
118
|
-
/**
|
|
119
|
-
* Set when refinement ran after a 🟢 commit. Absent on edit/reject paths,
|
|
120
|
-
* on bypassRefinement, or when the proposer call failed (the accept still
|
|
121
|
-
* succeeds in that case — refinement is best-effort).
|
|
122
|
-
*/
|
|
123
|
-
refinement?: RefinementResult;
|
|
124
|
-
/** Total wall-clock time. */
|
|
125
|
-
duration_ms: number;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* The Tier-1 proposer's per-candidate verdict on whether a strict
|
|
129
|
-
* `DecisionAssertion` shape can be formed and what it should contain.
|
|
130
|
-
*
|
|
131
|
-
* The proposer never decides what gets persisted — it just provides a
|
|
132
|
-
* recommendation. The operator's dialog choice determines what actually
|
|
133
|
-
* lands in the file. The runner re-validates each `strict_assertion`
|
|
134
|
-
* against the production `DecisionAssertion` zod before lifting; a
|
|
135
|
-
* proposal that fails zod is downgraded to `demote` automatically.
|
|
136
|
-
*/
|
|
137
|
-
export interface RefinementProposal {
|
|
138
|
-
/** Stable id of the candidate this proposal corresponds to (`<DEC-id>-A<NN>`). */
|
|
139
|
-
candidate_id: string;
|
|
140
|
-
/** Original loose kind from the candidate. */
|
|
141
|
-
candidate_kind: CandidateAssertion["kind"];
|
|
142
|
-
/**
|
|
143
|
-
* Proposer's verdict:
|
|
144
|
-
* - `lift` — confident strict shape; ready to promote into `assertions:`
|
|
145
|
-
* - `demote` — too vague to form mechanical params; convert to
|
|
146
|
-
* `human_review_hint` (always soft, always zod-valid)
|
|
147
|
-
* - `skip` — leave under `candidate_assertions:` for future refinement
|
|
148
|
-
*/
|
|
149
|
-
status: "lift" | "demote" | "skip";
|
|
150
|
-
/** Proposer's confidence in its own recommendation. */
|
|
151
|
-
confidence_signal: "high" | "medium" | "low";
|
|
152
|
-
/**
|
|
153
|
-
* Strict params object the proposer recommends. SHAPE depends on
|
|
154
|
-
* `candidate_kind`. Validated against `DecisionAssertion` zod at apply
|
|
155
|
-
* time; an invalid shape forces auto-demote.
|
|
156
|
-
* Only set when status === "lift".
|
|
157
|
-
*/
|
|
158
|
-
strict_assertion?: Record<string, unknown>;
|
|
159
|
-
/**
|
|
160
|
-
* Human-readable explanation rendered into the operator dialog.
|
|
161
|
-
* Always present so the operator can audit each proposal at confirm
|
|
162
|
-
* time without reading the raw JSON.
|
|
163
|
-
*/
|
|
164
|
-
rationale: string;
|
|
165
|
-
}
|
|
166
|
-
/** Aggregate output of `proposeStrictAssertions`. */
|
|
167
|
-
export interface RefinerOutput {
|
|
168
|
-
/** One proposal per candidate, in original order. */
|
|
169
|
-
proposals: RefinementProposal[];
|
|
170
|
-
}
|
|
171
|
-
export interface RefinerInput {
|
|
172
|
-
decision_id: string;
|
|
173
|
-
/** Decision's one-line subject (for prompt context). */
|
|
174
|
-
subject: string;
|
|
175
|
-
/** Decision's summary (for prompt context). */
|
|
176
|
-
summary: string;
|
|
177
|
-
/** Repo-relative globs the decision binds. */
|
|
178
|
-
scope_globs: string[];
|
|
179
|
-
/** Candidate assertions to refine. Order preserved on output. */
|
|
180
|
-
candidates: CandidateAssertion[];
|
|
181
|
-
/** Tier — default haiku. */
|
|
182
|
-
tier: ClaudeTier;
|
|
183
|
-
/** Per-call timeout. Default 120_000 ms. */
|
|
184
|
-
timeout_ms?: number;
|
|
185
|
-
}
|
|
186
|
-
/** Final outcome after operator dialog + lift. */
|
|
187
|
-
export interface RefinementResult {
|
|
188
|
-
decision_id: string;
|
|
189
|
-
/** Proposals as returned by the proposer (pre-decision). */
|
|
190
|
-
proposals: RefinementProposal[];
|
|
191
|
-
/** Operator's choice id from the refinement dialog. */
|
|
192
|
-
operator_choice: "approve_all" | "approve_high_only" | "demote_all" | "skip";
|
|
193
|
-
/** Number of candidates lifted into `assertions:`. */
|
|
194
|
-
lifted_count: number;
|
|
195
|
-
/** Number of candidates demoted into `human_review_hint`. */
|
|
196
|
-
demoted_count: number;
|
|
197
|
-
/** Number of candidates kept under `candidate_assertions:`. */
|
|
198
|
-
skipped_count: number;
|
|
199
|
-
/** Set when the proposer threw or returned malformed output. */
|
|
200
|
-
proposer_failed?: boolean;
|
|
201
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Phase 14 — decision capture flow.
|
|
3
|
-
*
|
|
4
|
-
* Per WORKFLOW_GUIDE / L26 / L27 / INTEGRATION_PLAN §5 Phase 14:
|
|
5
|
-
*
|
|
6
|
-
* /direction <text> OR free-text Tier-0 classified as `direction`
|
|
7
|
-
* → Tier-1 decision-extractor produces structured candidate
|
|
8
|
-
* → cairn writes draft to .cairn/ground/decisions/_inbox/DEC-NNNN.draft.md
|
|
9
|
-
* → Discord prompt: 🟢 commit | 🟡 edit | 🔴 not-a-decision
|
|
10
|
-
* → on 🟢: status:accepted, move to .cairn/ground/decisions/DEC-NNNN.md,
|
|
11
|
-
* regenerate decisions.ledger.yaml; assertions become live
|
|
12
|
-
* → on 🟡: leave draft + post correction prompt (re-run extractor on follow-up)
|
|
13
|
-
* → on 🔴: discard draft (no record)
|
|
14
|
-
*
|
|
15
|
-
* The extractor is read-only (no file-write tools). The draft writer + the
|
|
16
|
-
* confirm flow are pure-mechanical. The only LLM call is the extractor;
|
|
17
|
-
* everything else is the cairn assembling state from the typed payload.
|
|
18
|
-
*/
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/decision-capture/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Draft writer + confirm-side persistence.
|
|
3
|
-
*
|
|
4
|
-
* `writeDecisionDraft` materializes the extractor output into
|
|
5
|
-
* `.cairn/ground/decisions/_inbox/<DEC-id>.draft.md`. Frontmatter
|
|
6
|
-
* conforms to `DecisionFrontmatter` (status: "draft").
|
|
7
|
-
*
|
|
8
|
-
* `acceptDraft` moves the draft to its canonical path with status flipped
|
|
9
|
-
* to "accepted" and triggers a ledger regenerate.
|
|
10
|
-
*
|
|
11
|
-
* `rejectDraft` removes the draft file entirely. The id remains burned —
|
|
12
|
-
* `allocateDecisionId` always returns mark+1, so a rejected DEC-NNNN never
|
|
13
|
-
* gets reissued (per monotonic-id principle, single source in decision-capture/id.ts).
|
|
14
|
-
*/
|
|
15
|
-
import type { DecisionDraft, DecisionExtractorOutput } from "./types.js";
|
|
16
|
-
export interface WriteDecisionDraftArgs {
|
|
17
|
-
repoRoot: string;
|
|
18
|
-
id: string;
|
|
19
|
-
output: DecisionExtractorOutput;
|
|
20
|
-
rawText: string;
|
|
21
|
-
authorId: string;
|
|
22
|
-
receivedAt: string;
|
|
23
|
-
source: string;
|
|
24
|
-
}
|
|
25
|
-
export declare function writeDecisionDraft(args: WriteDecisionDraftArgs): DecisionDraft;
|
|
26
|
-
export interface AcceptDraftResult {
|
|
27
|
-
acceptedPath: string;
|
|
28
|
-
ledgerSize: number;
|
|
29
|
-
ledgerPath: string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Move a draft to the canonical decisions/ dir, flip status:draft → accepted,
|
|
33
|
-
* then regenerate the decisions ledger so accepted assertions become live.
|
|
34
|
-
*
|
|
35
|
-
* If a `supersedes` link exists, this also stamps `superseded_by` on the
|
|
36
|
-
* referenced decision (when the file is present). Best-effort — a missing
|
|
37
|
-
* referent doesn't block acceptance.
|
|
38
|
-
*/
|
|
39
|
-
export declare function acceptDraft(args: {
|
|
40
|
-
repoRoot: string;
|
|
41
|
-
draft: DecisionDraft;
|
|
42
|
-
}): AcceptDraftResult;
|
|
43
|
-
/**
|
|
44
|
-
* Discard a draft. The DEC-id is NOT recycled — the allocator advances
|
|
45
|
-
* past every existing DEC-NNNN.* file. Per the monotonic-id rule, even
|
|
46
|
-
* rejected drafts burn their id, so we leave a tombstone at
|
|
47
|
-
* `_inbox/<DEC-id>.rejected.md` rather than deleting outright. The
|
|
48
|
-
* tombstone has `status: rejected` and is excluded from the ledger by
|
|
49
|
-
* the existing `status === "accepted"` filter.
|
|
50
|
-
*/
|
|
51
|
-
export declare function rejectDraft(args: {
|
|
52
|
-
repoRoot: string;
|
|
53
|
-
draft: DecisionDraft;
|
|
54
|
-
}): void;
|
|
55
|
-
export interface LiftVerdict {
|
|
56
|
-
candidate_id: string;
|
|
57
|
-
status: "lift" | "demote" | "skip";
|
|
58
|
-
/** Strict assertion params (without id/kind — writer injects them). */
|
|
59
|
-
strict_assertion?: Record<string, unknown>;
|
|
60
|
-
/** Original candidate kind (carried onto lifted assertion). */
|
|
61
|
-
candidate_kind: "schema_must_contain" | "text_must_match" | "text_must_not_match" | "index_must_exist" | "ast_pattern" | "file_must_not_be_modified" | "query_must_filter_by" | "route_must_have_guard" | "event_must_emit" | "service_method_must_call" | "human_review_hint";
|
|
62
|
-
/** Original candidate description (used when demoted to human_review_hint). */
|
|
63
|
-
candidate_description: string;
|
|
64
|
-
}
|
|
65
|
-
export interface LiftResult {
|
|
66
|
-
decision_id: string;
|
|
67
|
-
decision_path: string;
|
|
68
|
-
lifted_count: number;
|
|
69
|
-
demoted_count: number;
|
|
70
|
-
skipped_count: number;
|
|
71
|
-
ledger_size: number;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Apply per-candidate verdicts to an accepted decision file.
|
|
75
|
-
*
|
|
76
|
-
* For each verdict:
|
|
77
|
-
* - status="lift" → strict_assertion (with id/kind injected) lands in
|
|
78
|
-
* frontmatter `assertions:`
|
|
79
|
-
* - status="demote" → a `{kind: human_review_hint, description}` assertion
|
|
80
|
-
* lands in `assertions:` (always soft, always zod-valid)
|
|
81
|
-
* - status="skip" → original candidate stays under `candidate_assertions:`
|
|
82
|
-
*
|
|
83
|
-
* Then regenerates the decisions ledger so the new strict assertions are
|
|
84
|
-
* visible to Layer-D sensors on the next run.
|
|
85
|
-
*/
|
|
86
|
-
export declare function liftCandidatesToAssertions(args: {
|
|
87
|
-
repoRoot: string;
|
|
88
|
-
decisionId: string;
|
|
89
|
-
verdicts: LiftVerdict[];
|
|
90
|
-
}): LiftResult;
|