@descryy/mcp 0.5.0 → 0.7.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/action-handshake.d.ts +8 -75
- package/dist/action-handshake.d.ts.map +1 -1
- package/dist/action-handshake.js +9 -79
- package/dist/action-handshake.js.map +1 -1
- package/dist/bin/descry-mcp.d.ts +4 -15
- package/dist/bin/descry-mcp.d.ts.map +1 -1
- package/dist/bin/descry-mcp.js +12 -42
- package/dist/bin/descry-mcp.js.map +1 -1
- package/dist/browser/driver.d.ts +62 -178
- package/dist/browser/driver.d.ts.map +1 -1
- package/dist/browser/driver.js +14 -46
- package/dist/browser/driver.js.map +1 -1
- package/dist/browser/evidence.d.ts +11 -35
- package/dist/browser/evidence.d.ts.map +1 -1
- package/dist/browser/evidence.js +25 -51
- package/dist/browser/evidence.js.map +1 -1
- package/dist/browser/fake-driver.d.ts +12 -16
- package/dist/browser/fake-driver.d.ts.map +1 -1
- package/dist/browser/fake-driver.js +24 -17
- package/dist/browser/fake-driver.js.map +1 -1
- package/dist/browser/graph-write.d.ts +4 -45
- package/dist/browser/graph-write.d.ts.map +1 -1
- package/dist/browser/graph-write.js +8 -53
- package/dist/browser/graph-write.js.map +1 -1
- package/dist/browser/playwright-driver.d.ts +17 -67
- package/dist/browser/playwright-driver.d.ts.map +1 -1
- package/dist/browser/playwright-driver.js +169 -166
- package/dist/browser/playwright-driver.js.map +1 -1
- package/dist/browser/provider.d.ts +5 -34
- package/dist/browser/provider.d.ts.map +1 -1
- package/dist/browser/provider.js +4 -24
- package/dist/browser/provider.js.map +1 -1
- package/dist/browser/registry.d.ts +26 -106
- package/dist/browser/registry.d.ts.map +1 -1
- package/dist/browser/registry.js +20 -77
- package/dist/browser/registry.js.map +1 -1
- package/dist/browser/scenario-resolve.d.ts +10 -44
- package/dist/browser/scenario-resolve.d.ts.map +1 -1
- package/dist/browser/scenario-resolve.js +10 -41
- package/dist/browser/scenario-resolve.js.map +1 -1
- package/dist/browser/scenario-runner.d.ts +12 -70
- package/dist/browser/scenario-runner.d.ts.map +1 -1
- package/dist/browser/scenario-runner.js +33 -91
- package/dist/browser/scenario-runner.js.map +1 -1
- package/dist/browser/stack-parser.d.ts +4 -28
- package/dist/browser/stack-parser.d.ts.map +1 -1
- package/dist/browser/stack-parser.js +12 -39
- package/dist/browser/stack-parser.js.map +1 -1
- package/dist/browser/tool-support.d.ts +20 -67
- package/dist/browser/tool-support.d.ts.map +1 -1
- package/dist/browser/tool-support.js +22 -66
- package/dist/browser/tool-support.js.map +1 -1
- package/dist/browser/url-scheme.d.ts +14 -0
- package/dist/browser/url-scheme.d.ts.map +1 -0
- package/dist/browser/url-scheme.js +38 -0
- package/dist/browser/url-scheme.js.map +1 -0
- package/dist/cancellation.d.ts +11 -46
- package/dist/cancellation.d.ts.map +1 -1
- package/dist/cancellation.js +11 -46
- package/dist/cancellation.js.map +1 -1
- package/dist/capped.d.ts +17 -0
- package/dist/capped.d.ts.map +1 -0
- package/dist/capped.js +15 -0
- package/dist/capped.js.map +1 -0
- package/dist/disclosure-ledger.d.ts +6 -30
- package/dist/disclosure-ledger.d.ts.map +1 -1
- package/dist/disclosure-ledger.js +4 -26
- package/dist/disclosure-ledger.js.map +1 -1
- package/dist/index.d.ts +10 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -17
- package/dist/index.js.map +1 -1
- package/dist/module-trust.d.ts +24 -0
- package/dist/module-trust.d.ts.map +1 -0
- package/dist/module-trust.js +60 -0
- package/dist/module-trust.js.map +1 -0
- package/dist/path-confinement.d.ts +31 -0
- package/dist/path-confinement.d.ts.map +1 -0
- package/dist/path-confinement.js +44 -0
- package/dist/path-confinement.js.map +1 -0
- package/dist/protocol.d.ts +10 -53
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +14 -60
- package/dist/protocol.js.map +1 -1
- package/dist/registry.d.ts +10 -58
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +38 -90
- package/dist/registry.js.map +1 -1
- package/dist/render.d.ts +79 -11
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +126 -14
- package/dist/render.js.map +1 -1
- package/dist/runtime-registry.d.ts +8 -49
- package/dist/runtime-registry.d.ts.map +1 -1
- package/dist/runtime-registry.js +72 -63
- package/dist/runtime-registry.js.map +1 -1
- package/dist/scenarios/index.d.ts +1 -1
- package/dist/scenarios/index.d.ts.map +1 -1
- package/dist/scenarios/index.js +1 -1
- package/dist/scenarios/index.js.map +1 -1
- package/dist/scenarios/parse.d.ts +4 -18
- package/dist/scenarios/parse.d.ts.map +1 -1
- package/dist/scenarios/parse.js +14 -34
- package/dist/scenarios/parse.js.map +1 -1
- package/dist/scenarios/scenario.d.ts +18 -74
- package/dist/scenarios/scenario.d.ts.map +1 -1
- package/dist/scenarios/scenario.js +7 -34
- package/dist/scenarios/scenario.js.map +1 -1
- package/dist/scenarios/storage.d.ts +11 -41
- package/dist/scenarios/storage.d.ts.map +1 -1
- package/dist/scenarios/storage.js +57 -47
- package/dist/scenarios/storage.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +55 -13
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +69 -239
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +76 -231
- package/dist/session.js.map +1 -1
- package/dist/tools/analyze.d.ts +27 -101
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +58 -148
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/browser-click.d.ts +3 -21
- package/dist/tools/browser-click.d.ts.map +1 -1
- package/dist/tools/browser-click.js +10 -31
- package/dist/tools/browser-click.js.map +1 -1
- package/dist/tools/browser-close-session.d.ts +4 -13
- package/dist/tools/browser-close-session.d.ts.map +1 -1
- package/dist/tools/browser-close-session.js +4 -13
- package/dist/tools/browser-close-session.js.map +1 -1
- package/dist/tools/browser-fill.d.ts +5 -36
- package/dist/tools/browser-fill.d.ts.map +1 -1
- package/dist/tools/browser-fill.js +9 -44
- package/dist/tools/browser-fill.js.map +1 -1
- package/dist/tools/browser-navigate.d.ts +6 -27
- package/dist/tools/browser-navigate.d.ts.map +1 -1
- package/dist/tools/browser-navigate.js +6 -23
- package/dist/tools/browser-navigate.js.map +1 -1
- package/dist/tools/browser-run-scenario.d.ts +5 -31
- package/dist/tools/browser-run-scenario.d.ts.map +1 -1
- package/dist/tools/browser-run-scenario.js +10 -46
- package/dist/tools/browser-run-scenario.js.map +1 -1
- package/dist/tools/browser-save-scenario.d.ts +3 -28
- package/dist/tools/browser-save-scenario.d.ts.map +1 -1
- package/dist/tools/browser-save-scenario.js +102 -55
- package/dist/tools/browser-save-scenario.js.map +1 -1
- package/dist/tools/browser-snapshot.d.ts +6 -39
- package/dist/tools/browser-snapshot.d.ts.map +1 -1
- package/dist/tools/browser-snapshot.js +4 -31
- package/dist/tools/browser-snapshot.js.map +1 -1
- package/dist/tools/browser-start-session.d.ts +4 -23
- package/dist/tools/browser-start-session.d.ts.map +1 -1
- package/dist/tools/browser-start-session.js +38 -51
- package/dist/tools/browser-start-session.js.map +1 -1
- package/dist/tools/browser-type.d.ts +5 -35
- package/dist/tools/browser-type.d.ts.map +1 -1
- package/dist/tools/browser-type.js +10 -45
- package/dist/tools/browser-type.js.map +1 -1
- package/dist/tools/contracts.d.ts +17 -63
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +91 -47
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/cross-pr.d.ts +56 -15
- package/dist/tools/cross-pr.d.ts.map +1 -1
- package/dist/tools/cross-pr.js +141 -38
- package/dist/tools/cross-pr.js.map +1 -1
- package/dist/tools/git-diff.d.ts +18 -2
- package/dist/tools/git-diff.d.ts.map +1 -1
- package/dist/tools/git-diff.js +143 -23
- package/dist/tools/git-diff.js.map +1 -1
- package/dist/tools/git-history.d.ts +5 -16
- package/dist/tools/git-history.d.ts.map +1 -1
- package/dist/tools/git-history.js +3 -10
- package/dist/tools/git-history.js.map +1 -1
- package/dist/tools/history.d.ts +4 -33
- package/dist/tools/history.d.ts.map +1 -1
- package/dist/tools/history.js +6 -31
- package/dist/tools/history.js.map +1 -1
- package/dist/tools/impact.d.ts +7 -51
- package/dist/tools/impact.d.ts.map +1 -1
- package/dist/tools/impact.js +15 -67
- package/dist/tools/impact.js.map +1 -1
- package/dist/tools/index.d.ts +3 -8
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/kit.d.ts +66 -113
- package/dist/tools/kit.d.ts.map +1 -1
- package/dist/tools/kit.js +60 -28
- package/dist/tools/kit.js.map +1 -1
- package/dist/tools/link-workspace.d.ts +7 -45
- package/dist/tools/link-workspace.d.ts.map +1 -1
- package/dist/tools/link-workspace.js +10 -48
- package/dist/tools/link-workspace.js.map +1 -1
- package/dist/tools/lookup.d.ts +4 -14
- package/dist/tools/lookup.d.ts.map +1 -1
- package/dist/tools/lookup.js +4 -14
- package/dist/tools/lookup.js.map +1 -1
- package/dist/tools/mark-incident.d.ts +7 -54
- package/dist/tools/mark-incident.d.ts.map +1 -1
- package/dist/tools/mark-incident.js +15 -68
- package/dist/tools/mark-incident.js.map +1 -1
- package/dist/tools/observe-runtime.d.ts +27 -210
- package/dist/tools/observe-runtime.d.ts.map +1 -1
- package/dist/tools/observe-runtime.js +258 -436
- package/dist/tools/observe-runtime.js.map +1 -1
- package/dist/tools/observe-tests.d.ts +9 -88
- package/dist/tools/observe-tests.d.ts.map +1 -1
- package/dist/tools/observe-tests.js +34 -108
- package/dist/tools/observe-tests.js.map +1 -1
- package/dist/tools/pr-analysis.d.ts +18 -2
- package/dist/tools/pr-analysis.d.ts.map +1 -1
- package/dist/tools/pr-analysis.js +73 -23
- package/dist/tools/pr-analysis.js.map +1 -1
- package/dist/tools/pre-push.d.ts +94 -9
- package/dist/tools/pre-push.d.ts.map +1 -1
- package/dist/tools/pre-push.js +139 -34
- package/dist/tools/pre-push.js.map +1 -1
- package/dist/tools/propagation.d.ts +11 -53
- package/dist/tools/propagation.d.ts.map +1 -1
- package/dist/tools/propagation.js +14 -57
- package/dist/tools/propagation.js.map +1 -1
- package/dist/tools/questions.d.ts +13 -63
- package/dist/tools/questions.d.ts.map +1 -1
- package/dist/tools/questions.js +33 -105
- package/dist/tools/questions.js.map +1 -1
- package/dist/tools/refusal-fetch.d.ts +4 -40
- package/dist/tools/refusal-fetch.d.ts.map +1 -1
- package/dist/tools/refusal-fetch.js +4 -40
- package/dist/tools/refusal-fetch.js.map +1 -1
- package/dist/tools/runtime-incident.d.ts +4 -63
- package/dist/tools/runtime-incident.d.ts.map +1 -1
- package/dist/tools/runtime-incident.js +10 -87
- package/dist/tools/runtime-incident.js.map +1 -1
- package/dist/tools/scope.d.ts +7 -25
- package/dist/tools/scope.d.ts.map +1 -1
- package/dist/tools/scope.js +17 -20
- package/dist/tools/scope.js.map +1 -1
- package/dist/tools/similar-incidents.d.ts +11 -86
- package/dist/tools/similar-incidents.d.ts.map +1 -1
- package/dist/tools/similar-incidents.js +7 -71
- package/dist/tools/similar-incidents.js.map +1 -1
- package/dist/tools/validate.d.ts +31 -47
- package/dist/tools/validate.d.ts.map +1 -1
- package/dist/tools/validate.js +133 -61
- package/dist/tools/validate.js.map +1 -1
- package/dist/tools/verification-status.d.ts +9 -64
- package/dist/tools/verification-status.d.ts.map +1 -1
- package/dist/tools/verification-status.js +9 -62
- package/dist/tools/verification-status.js.map +1 -1
- package/dist/tools/verify-claim.d.ts +5 -52
- package/dist/tools/verify-claim.d.ts.map +1 -1
- package/dist/tools/verify-claim.js +6 -56
- package/dist/tools/verify-claim.js.map +1 -1
- package/dist/transport.d.ts +15 -52
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +16 -60
- package/dist/transport.js.map +1 -1
- package/package.json +33 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-push.js","sourceRoot":"","sources":["../../src/tools/pre-push.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pre-push.js","sourceRoot":"","sources":["../../src/tools/pre-push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `propagation` —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* **Field-level propagation requires R3.** §11A.6 is explicit: propagation
|
|
8
|
-
* compares *shapes*, not names, and shapes are what a type checker buys. Below
|
|
9
|
-
* R3 this query still returns something useful — the paths data *can* travel —
|
|
10
|
-
* but "where the `currency` field ends up" and "which functions this value can
|
|
11
|
-
* reach" are different claims, and only the second is provable at R2. The query
|
|
12
|
-
* layer already computes the floor and writes the note; this tool's job is to
|
|
13
|
-
* make sure a caller cannot receive the answer without it, and to refuse to
|
|
14
|
-
* dress a path-level answer up as a field-level one in its headline.
|
|
15
|
-
*
|
|
16
|
-
* ## The empty answer is several different answers
|
|
17
|
-
*
|
|
18
|
-
* The resolution guard above was the only guard here, and it protects the
|
|
19
|
-
* *quality* of a non-empty answer. It says nothing about an empty one.
|
|
20
|
-
*
|
|
21
|
-
* **`PROPAGATES_TO` has no producer.** No adapter emits it, and it is the first
|
|
22
|
-
* of the four edge types this walk follows — five of §11.5's six hops are that
|
|
23
|
-
* type. So on a real graph this tool returned `reached: []` and a headline
|
|
24
|
-
* reading *"X can reach 0 node(s)"*: a user asks what propagates and is told
|
|
25
|
-
* nothing propagates. That is §20.2's fourth category collapsing into its
|
|
26
|
-
* second, in the user-facing surface rather than in an instrument, and it is
|
|
27
|
-
* the same defect `hidden-dependency.ts` carries `analysed` for.
|
|
28
|
-
*
|
|
29
|
-
* So an empty walk is now attributed rather than reported. The tool probes the
|
|
30
|
-
* edges incident to the start node and reports which of the requested types it
|
|
31
|
-
* found. **It deliberately does not claim which cause applies** — a local probe
|
|
32
|
-
* cannot separate *no producer emits this edge type* from *this node has none
|
|
33
|
-
* of them*, and guessing between them would be the same overreach one level
|
|
34
|
-
* down. It names the candidates and says it cannot choose.
|
|
35
|
-
*/
|
|
2
|
+
* `propagation` — §11.9 data-flow query. Field-level answers require R3 (§11A.6:
|
|
3
|
+
* shapes need a type checker); below R3, path-level only, labelled as such.
|
|
4
|
+
* `PROPAGATES_TO` has no producer today — an empty walk is attributed (edge
|
|
5
|
+
* types actually present near the node), never reported as "reaches 0 nodes". */
|
|
36
6
|
import { type BriefNode, type NodeCandidates, type ToolDefinition } from "./kit.ts";
|
|
37
7
|
/** A node the data can reach, with how far along the walk it sits. */
|
|
38
8
|
export interface ReachedNode extends BriefNode {
|
|
@@ -44,31 +14,19 @@ export interface PropagationReport {
|
|
|
44
14
|
/** Capped by `limit`; `reachedTotal` is the uncapped count. */
|
|
45
15
|
readonly reached: readonly ReachedNode[];
|
|
46
16
|
readonly reachedTotal: number;
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* False means the answer is *where data can flow*, not *which field arrives
|
|
51
|
-
* where* — the second compares shapes and shapes need a type checker.
|
|
52
|
-
*/
|
|
17
|
+
/** True only at R3+. False means "where data can flow", not "which field arrives
|
|
18
|
+
* where" — the latter compares shapes, needing a type checker. */
|
|
53
19
|
readonly fieldLevel: boolean;
|
|
54
|
-
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* **An empty `reached` with `analysed: false` means the walk did not run**,
|
|
58
|
-
* not that nothing propagates. `PROPAGATES_TO` has no producer today, so
|
|
59
|
-
* this is the common case rather than the exotic one.
|
|
60
|
-
*/
|
|
20
|
+
/** False when no edge of any walked type touches the start node. Empty `reached`
|
|
21
|
+
* with `analysed: false` means the walk didn't run, not that nothing propagates —
|
|
22
|
+
* the common case, since `PROPAGATES_TO` has no producer today. */
|
|
61
23
|
readonly analysed: boolean;
|
|
62
24
|
readonly edgeTypesWalked: readonly string[];
|
|
63
25
|
/** The subset of `edgeTypesWalked` actually found on an edge touching this node. */
|
|
64
26
|
readonly edgeTypesPresent: readonly string[];
|
|
65
27
|
}
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* `NodeCandidates` arrives when the symbol did not resolve to exactly one
|
|
70
|
-
* node, and nothing was walked.
|
|
71
|
-
*/
|
|
28
|
+
/** One call, two shapes — narrow on `"from" in data`. `NodeCandidates` arrives when
|
|
29
|
+
* the symbol didn't resolve to exactly one node, and nothing was walked. */
|
|
72
30
|
export type PropagationData = PropagationReport | NodeCandidates;
|
|
73
31
|
export declare const propagationTool: ToolDefinition;
|
|
74
32
|
//# sourceMappingURL=propagation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propagation.d.ts","sourceRoot":"","sources":["../../src/tools/propagation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"propagation.d.ts","sourceRoot":"","sources":["../../src/tools/propagation.ts"],"names":[],"mappings":"AAAA;;;;iFAIiF;AAIjF,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAGlB,sEAAsE;AACtE,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;uEACmE;IACnE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;wEAEoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED;6EAC6E;AAC7E,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;AA0JjE,eAAO,MAAM,eAAe,EAAE,cAY7B,CAAC"}
|
|
@@ -1,38 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `propagation` —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* **Field-level propagation requires R3.** §11A.6 is explicit: propagation
|
|
8
|
-
* compares *shapes*, not names, and shapes are what a type checker buys. Below
|
|
9
|
-
* R3 this query still returns something useful — the paths data *can* travel —
|
|
10
|
-
* but "where the `currency` field ends up" and "which functions this value can
|
|
11
|
-
* reach" are different claims, and only the second is provable at R2. The query
|
|
12
|
-
* layer already computes the floor and writes the note; this tool's job is to
|
|
13
|
-
* make sure a caller cannot receive the answer without it, and to refuse to
|
|
14
|
-
* dress a path-level answer up as a field-level one in its headline.
|
|
15
|
-
*
|
|
16
|
-
* ## The empty answer is several different answers
|
|
17
|
-
*
|
|
18
|
-
* The resolution guard above was the only guard here, and it protects the
|
|
19
|
-
* *quality* of a non-empty answer. It says nothing about an empty one.
|
|
20
|
-
*
|
|
21
|
-
* **`PROPAGATES_TO` has no producer.** No adapter emits it, and it is the first
|
|
22
|
-
* of the four edge types this walk follows — five of §11.5's six hops are that
|
|
23
|
-
* type. So on a real graph this tool returned `reached: []` and a headline
|
|
24
|
-
* reading *"X can reach 0 node(s)"*: a user asks what propagates and is told
|
|
25
|
-
* nothing propagates. That is §20.2's fourth category collapsing into its
|
|
26
|
-
* second, in the user-facing surface rather than in an instrument, and it is
|
|
27
|
-
* the same defect `hidden-dependency.ts` carries `analysed` for.
|
|
28
|
-
*
|
|
29
|
-
* So an empty walk is now attributed rather than reported. The tool probes the
|
|
30
|
-
* edges incident to the start node and reports which of the requested types it
|
|
31
|
-
* found. **It deliberately does not claim which cause applies** — a local probe
|
|
32
|
-
* cannot separate *no producer emits this edge type* from *this node has none
|
|
33
|
-
* of them*, and guessing between them would be the same overreach one level
|
|
34
|
-
* down. It names the candidates and says it cannot choose.
|
|
35
|
-
*/
|
|
2
|
+
* `propagation` — §11.9 data-flow query. Field-level answers require R3 (§11A.6:
|
|
3
|
+
* shapes need a type checker); below R3, path-level only, labelled as such.
|
|
4
|
+
* `PROPAGATES_TO` has no producer today — an empty walk is attributed (edge
|
|
5
|
+
* types actually present near the node), never reported as "reaches 0 nodes". */
|
|
36
6
|
import { dataFlowFrom, DATA_FLOW_EDGE_TYPES } from "@descryy/core";
|
|
37
7
|
import { answer, briefNode, optionalInteger, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
|
|
38
8
|
import { resolveOneNode } from "./lookup.js";
|
|
@@ -104,10 +74,8 @@ async function run(args, ctx) {
|
|
|
104
74
|
notes.push(`${reached.length - shown.length} further node(s) are on the path but not listed — the reply ` +
|
|
105
75
|
`is capped at ${limit}.`);
|
|
106
76
|
}
|
|
107
|
-
// Which
|
|
108
|
-
//
|
|
109
|
-
// to follow, and "reaches 0 nodes" is a statement about the graph's contents
|
|
110
|
-
// rather than about this symbol.
|
|
77
|
+
// Which walked edge types exist around the start node — the baseline precondition.
|
|
78
|
+
// None present means "reaches 0 nodes" is a statement about the graph, not the symbol.
|
|
111
79
|
const walked = edgeTypes ?? DATA_FLOW_EDGE_TYPES;
|
|
112
80
|
const present = new Set();
|
|
113
81
|
for (const edge of [
|
|
@@ -144,12 +112,8 @@ async function run(args, ctx) {
|
|
|
144
112
|
})),
|
|
145
113
|
reachedTotal: reached.length,
|
|
146
114
|
fieldLevel,
|
|
147
|
-
/**
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* **An empty `reached` with `analysed: false` means the walk did not
|
|
151
|
-
* run, not that nothing propagates.** Mirrors `HiddenDependencyReport`.
|
|
152
|
-
*/
|
|
115
|
+
/** False when no edge of any walked type touches the start node — empty
|
|
116
|
+
* `reached` with this false means the walk didn't run. Mirrors `HiddenDependencyReport`. */
|
|
153
117
|
analysed,
|
|
154
118
|
edgeTypesWalked: walked,
|
|
155
119
|
edgeTypesPresent: [...present].sort(),
|
|
@@ -157,20 +121,13 @@ async function run(args, ctx) {
|
|
|
157
121
|
notes,
|
|
158
122
|
},
|
|
159
123
|
...(analysed ? (reached.length === 0 ? { state: "empty" } : {}) : { state: "refused" }),
|
|
160
|
-
// Never name-level
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
// single assertions about existence: a missing environment variable, a
|
|
164
|
-
// migration head. This tool's claim is that *data* travels a route, and data
|
|
165
|
-
// is a shape concern by nature: a `PROPAGATES_TO` edge derived without a
|
|
166
|
-
// type checker is a weaker fact than the resolved reference underneath it.
|
|
167
|
-
// So R3 and R4 reach A on their own merits and R2 is capped at B, which is
|
|
168
|
-
// the conservative reading and the one "when in doubt, understate" picks.
|
|
124
|
+
// Never name-level — §11A.5's R2/class-A carve-out is for existence facts (a
|
|
125
|
+
// missing env var), not a data-flow shape claim. R2 stays capped at B here;
|
|
126
|
+
// only R3/R4 reach A, the conservative "when in doubt, understate" reading.
|
|
169
127
|
nameLevel: false,
|
|
170
|
-
// The headline is
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
// notes say.
|
|
128
|
+
// The headline is what a user acts on — not-analysable gets its own sentence
|
|
129
|
+
// rather than reusing "reaches 0 node(s)" with a note beneath it (a zero in the
|
|
130
|
+
// headline reads as a measurement regardless of the notes).
|
|
174
131
|
headline: !analysed
|
|
175
132
|
? `Data flow out of ${found.node.name} was not analysed: the graph holds no ` +
|
|
176
133
|
`${walked.join("/")} edge touching it. This is not a finding that nothing propagates.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propagation.js","sourceRoot":"","sources":["../../src/tools/propagation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"propagation.js","sourceRoot":"","sources":["../../src/tools/propagation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,75 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `questions` —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* a refusal carries `attrs.blockedBy` + `attrs.refusalClass` (DEC-242) → the
|
|
7
|
-
* grouper collapses rows sharing both into one question (DEC-243) → a
|
|
8
|
-
* confirmed answer is stored and capped at reliability class B regardless of
|
|
9
|
-
* anything else (DEC-223). Nothing before this tool could show a question to
|
|
10
|
-
* a person or accept an answer back. This is that door — the same role
|
|
11
|
-
* `link_workspace` plays for the workspace-pairing declaration, except this
|
|
12
|
-
* one both reads and writes, because "what's still open" and "record an
|
|
13
|
-
* answer" are one conversation, not two round trips.
|
|
14
|
-
*
|
|
15
|
-
* ## One tool, not two — and not folded into `link_workspace`
|
|
16
|
-
*
|
|
17
|
-
* DEC-243 named two shapes and built neither: a dedicated tool, or extending
|
|
18
|
-
* `link_workspace`'s write pattern to accept a `ConfirmedFact`. Rejected the
|
|
19
|
-
* second explicitly: `session.ts`'s own `writeConfirmedFact` already exists
|
|
20
|
-
* as "a second, narrow writer... so a future field gets a third writer, not
|
|
21
|
-
* a branch in this one" — the identical reasoning applies one layer up.
|
|
22
|
-
* `link_workspace` is about workspace pairing; bolting an unrelated write
|
|
23
|
-
* concern onto it would be the tool-layer version of the shape drift DEC's
|
|
24
|
-
* own `MODEL.fields`/`DTO.fields` incident already cost this project once
|
|
25
|
-
* (§3.1). A dedicated tool that both lists and answers is one coherent
|
|
26
|
-
* concern — "the question queue" — read and write together because a caller
|
|
27
|
-
* asking "what's still open" immediately after recording an answer should
|
|
28
|
-
* see the queue that answer just shrank, not have to call twice.
|
|
29
|
-
*
|
|
30
|
-
* ## Answering re-computes locally rather than re-reading the file
|
|
31
|
-
*
|
|
32
|
-
* `session.config.confirmedFacts` is loaded once at session start and is
|
|
33
|
-
* `readonly` — writing via `writeConfirmedFact` does not update it in
|
|
34
|
-
* memory. Rather than reload `.descry/config.json` from disk mid-call, the
|
|
35
|
-
* just-written fact is merged into a local copy for this response only, the
|
|
36
|
-
* same way `writeConfirmedFact`'s own `replaced` return value already tells
|
|
37
|
-
* a caller what was overwritten without a second read.
|
|
38
|
-
*/
|
|
2
|
+
* `questions` — lets a human answer an open refusal question in this conversation.
|
|
3
|
+
* DEC-242: a refusal carries `attrs.blockedBy`+`refusalClass`. DEC-243: grouped into
|
|
4
|
+
* one question per pair; a dedicated read+write tool, not folded into `link_workspace`.
|
|
5
|
+
* DEC-223: a recorded answer caps at reliability class B regardless of anything else. */
|
|
39
6
|
import type { RefusalDropCounts, RefusalQuestion } from "@descryy/core";
|
|
40
7
|
import type { ConfirmedFact } from "@descryy/ir";
|
|
41
8
|
import { type ToolDefinition } from "./kit.ts";
|
|
42
|
-
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* Read and write together because a caller asking "what's still open"
|
|
46
|
-
* immediately after recording an answer should see the queue that answer
|
|
47
|
-
* changed, not have to call twice.
|
|
48
|
-
*/
|
|
9
|
+
/** Both halves of one conversation: the queue, and the answer that just shrank it.
|
|
10
|
+
* Read and write together so a caller doesn't need two calls. */
|
|
49
11
|
export interface QuestionsData {
|
|
50
|
-
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* A human assertion, not a graph fact: when it is later used to mint an
|
|
54
|
-
* edge, that edge is capped at reliability class B by DEC-223 regardless of
|
|
55
|
-
* anything else about it.
|
|
56
|
-
*/
|
|
12
|
+
/** The `ConfirmedFact` written by this call, or null when none given. A human
|
|
13
|
+
* assertion, not a graph fact — capped at reliability class B (DEC-223) when
|
|
14
|
+
* later used to mint an edge. */
|
|
57
15
|
readonly recorded: ConfirmedFact | null;
|
|
58
|
-
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* DEC-242's `value-unknown` class only. A reader-capability gap or a
|
|
62
|
-
* per-call value never appears here, because no sentence answers those.
|
|
63
|
-
*/
|
|
16
|
+
/** Rows a human could resolve, grouped by `blockedBy` — DEC-242's `value-unknown`
|
|
17
|
+
* class only. A reader-capability gap or per-call value never appears here. */
|
|
64
18
|
readonly questions: readonly RefusalQuestion[];
|
|
65
19
|
/** Every refusal-ledger row, classified or not. The outer denominator. */
|
|
66
20
|
readonly totalRefusalRows: number;
|
|
67
|
-
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* The gap between this and `totalRefusalRows` is rows no adapter classified:
|
|
71
|
-
* never askable, and **not the same population** as "still open".
|
|
72
|
-
*/
|
|
21
|
+
/** Of those, how many carry `attrs.blockedBy`/`refusalClass` at all. The gap vs
|
|
22
|
+
* `totalRefusalRows` is unclassified rows — never askable, not "still open". */
|
|
73
23
|
readonly classifiedRows: number;
|
|
74
24
|
/** Rows a stored confirmed fact already answers, so they are not listed as questions. */
|
|
75
25
|
readonly alreadyAnswered: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/tools/questions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/tools/questions.ts"],"names":[],"mappings":"AAAA;;;;yFAIyF;AAGzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAGlB;kEACkE;AAClE,MAAM,WAAW,aAAa;IAC5B;;sCAEkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC;oFACgF;IAChF,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,0EAA0E;IAC1E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;qFACiF;IACjF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,yFAAyF;IACzF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAsPD,eAAO,MAAM,aAAa,EAAE,cAoB3B,CAAC"}
|
package/dist/tools/questions.js
CHANGED
|
@@ -1,41 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `questions` —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* a refusal carries `attrs.blockedBy` + `attrs.refusalClass` (DEC-242) → the
|
|
7
|
-
* grouper collapses rows sharing both into one question (DEC-243) → a
|
|
8
|
-
* confirmed answer is stored and capped at reliability class B regardless of
|
|
9
|
-
* anything else (DEC-223). Nothing before this tool could show a question to
|
|
10
|
-
* a person or accept an answer back. This is that door — the same role
|
|
11
|
-
* `link_workspace` plays for the workspace-pairing declaration, except this
|
|
12
|
-
* one both reads and writes, because "what's still open" and "record an
|
|
13
|
-
* answer" are one conversation, not two round trips.
|
|
14
|
-
*
|
|
15
|
-
* ## One tool, not two — and not folded into `link_workspace`
|
|
16
|
-
*
|
|
17
|
-
* DEC-243 named two shapes and built neither: a dedicated tool, or extending
|
|
18
|
-
* `link_workspace`'s write pattern to accept a `ConfirmedFact`. Rejected the
|
|
19
|
-
* second explicitly: `session.ts`'s own `writeConfirmedFact` already exists
|
|
20
|
-
* as "a second, narrow writer... so a future field gets a third writer, not
|
|
21
|
-
* a branch in this one" — the identical reasoning applies one layer up.
|
|
22
|
-
* `link_workspace` is about workspace pairing; bolting an unrelated write
|
|
23
|
-
* concern onto it would be the tool-layer version of the shape drift DEC's
|
|
24
|
-
* own `MODEL.fields`/`DTO.fields` incident already cost this project once
|
|
25
|
-
* (§3.1). A dedicated tool that both lists and answers is one coherent
|
|
26
|
-
* concern — "the question queue" — read and write together because a caller
|
|
27
|
-
* asking "what's still open" immediately after recording an answer should
|
|
28
|
-
* see the queue that answer just shrank, not have to call twice.
|
|
29
|
-
*
|
|
30
|
-
* ## Answering re-computes locally rather than re-reading the file
|
|
31
|
-
*
|
|
32
|
-
* `session.config.confirmedFacts` is loaded once at session start and is
|
|
33
|
-
* `readonly` — writing via `writeConfirmedFact` does not update it in
|
|
34
|
-
* memory. Rather than reload `.descry/config.json` from disk mid-call, the
|
|
35
|
-
* just-written fact is merged into a local copy for this response only, the
|
|
36
|
-
* same way `writeConfirmedFact`'s own `replaced` return value already tells
|
|
37
|
-
* a caller what was overwritten without a second read.
|
|
38
|
-
*/
|
|
2
|
+
* `questions` — lets a human answer an open refusal question in this conversation.
|
|
3
|
+
* DEC-242: a refusal carries `attrs.blockedBy`+`refusalClass`. DEC-243: grouped into
|
|
4
|
+
* one question per pair; a dedicated read+write tool, not folded into `link_workspace`.
|
|
5
|
+
* DEC-223: a recorded answer caps at reliability class B regardless of anything else. */
|
|
39
6
|
import { applyConfirmedFacts, counts, groupRefusalsIntoQuestions } from "@descryy/core";
|
|
40
7
|
import { writeConfirmedFact } from "../session.js";
|
|
41
8
|
import { answer, optionalEnum, optionalString, requiredString, ToolInputError, } from "./kit.js";
|
|
@@ -76,14 +43,9 @@ const SCHEMA = {
|
|
|
76
43
|
required: ["blockedBy", "value"],
|
|
77
44
|
additionalProperties: false,
|
|
78
45
|
},
|
|
79
|
-
// Declared here, not only in the prose
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
// `additionalProperties: false`, a client validating against the schema it
|
|
83
|
-
// was handed would reject the exact call the description asked for. A
|
|
84
|
-
// parameter a tool documents and a parameter a tool declares have to be
|
|
85
|
-
// the same set; `tool-schema-prose.test.ts` now holds the whole registry
|
|
86
|
-
// to that.
|
|
46
|
+
// Declared here, not only in the prose — `tool-schema-prose.test.ts` holds the
|
|
47
|
+
// registry to keeping documented and declared params in sync (a documented-but-
|
|
48
|
+
// undeclared param was once silently rejected under additionalProperties:false).
|
|
87
49
|
confirmToken: {
|
|
88
50
|
type: "string",
|
|
89
51
|
description: "The token returned by a previous call that carried \"answer\". Recording a confirmed value " +
|
|
@@ -94,21 +56,9 @@ const SCHEMA = {
|
|
|
94
56
|
},
|
|
95
57
|
additionalProperties: false,
|
|
96
58
|
};
|
|
97
|
-
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* Extracted so `describeAction` can call it too: an `action` tool's mint must
|
|
101
|
-
* refuse what its run would refuse, or it asks a developer to confirm a
|
|
102
|
-
* sentence with no referent. The instance that made this concrete here is the
|
|
103
|
-
* worst one this tool can produce — a `scope: "workspace"` answer in a
|
|
104
|
-
* repository with no workspace was described as *"reaching EVERY repository in
|
|
105
|
-
* this workspace"* and then refused on the second call, after the
|
|
106
|
-
* confirmation. Ruled in
|
|
107
|
-
* `documents/decisions-inbox/DEC-387.md`.
|
|
108
|
-
*
|
|
109
|
-
* Reads the session only for `config.workspace`; writes nothing, so it is safe
|
|
110
|
-
* to run at mint time, outside the call budget.
|
|
111
|
-
*/
|
|
59
|
+
/** The `answer` arg, read+validated once — shared by `describeAction` so mint and run
|
|
60
|
+
* refuse identically (DEC-387: a `scope:"workspace"` answer was once described as
|
|
61
|
+
* workspace-wide then refused on redemption). Reads only `config.workspace`, writes nothing. */
|
|
112
62
|
function readAnswer(answerArg, session) {
|
|
113
63
|
if (typeof answerArg !== "object" || answerArg === null) {
|
|
114
64
|
throw new ToolInputError('"answer" must be an object');
|
|
@@ -128,6 +78,7 @@ function readAnswer(answerArg, session) {
|
|
|
128
78
|
async function run(args, ctx) {
|
|
129
79
|
const { session } = ctx;
|
|
130
80
|
const notes = [];
|
|
81
|
+
// `confirmedFacts` is readonly and loaded once at session start; merged locally below instead of a mid-call disk reload.
|
|
131
82
|
let facts = session.config.confirmedFacts;
|
|
132
83
|
let recorded = null;
|
|
133
84
|
const answerArg = args["answer"];
|
|
@@ -136,13 +87,9 @@ async function run(args, ctx) {
|
|
|
136
87
|
throw new ToolInputError('"answer" must be an object');
|
|
137
88
|
}
|
|
138
89
|
const { blockedBy, value, environment, confirmedBy, scope } = readAnswer(answerArg, session);
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
// Best-effort: a repo path with no git history (a fixture, a non-git
|
|
143
|
-
// checkout) simply cannot supply one, and that is exactly the "unknown"
|
|
144
|
-
// case `confirmedAtCommit` is designed to carry as an absence rather than
|
|
145
|
-
// a guess — never let this recording fail because the disclosure couldn't.
|
|
90
|
+
// `confirmedAtCommit`: repo's commit at answer time, so a later mint can tell if
|
|
91
|
+
// code moved since. Best-effort — no git history means no value, an absence not
|
|
92
|
+
// a guess; must never fail the recording because the disclosure couldn't.
|
|
146
93
|
const confirmedAtCommit = await session
|
|
147
94
|
.root()
|
|
148
95
|
.then((r) => r.commitSha)
|
|
@@ -156,9 +103,8 @@ async function run(args, ctx) {
|
|
|
156
103
|
confirmedAt: new Date().toISOString(),
|
|
157
104
|
...(confirmedAtCommit === undefined ? {} : { confirmedAtCommit }),
|
|
158
105
|
scope,
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
// in was later re-linked into a different workspace.
|
|
106
|
+
// Stamped on the fact, not looked up at read time — a fact must not reach
|
|
107
|
+
// further because its repo was later re-linked into a different workspace.
|
|
162
108
|
...(scope === "workspace" && session.config.workspace !== undefined
|
|
163
109
|
? { workspace: session.config.workspace }
|
|
164
110
|
: {}),
|
|
@@ -177,10 +123,8 @@ async function run(args, ctx) {
|
|
|
177
123
|
const provider = session.provider();
|
|
178
124
|
const { refs, truncated } = provider.unresolvedRefs();
|
|
179
125
|
const total = counts(session.store().driver).unresolvedRefs;
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
// those actually reach this repository — this call supplies the candidates,
|
|
183
|
-
// it does not pre-approve them.
|
|
126
|
+
// Plus workspace-scoped facts from `link_workspace` siblings. `applyConfirmedFacts`
|
|
127
|
+
// decides which actually reach this repo — this call only supplies candidates.
|
|
184
128
|
const { answered, stillOpen } = applyConfirmedFacts(refs, [...facts, ...(session.config.linkedFacts ?? [])], session.config.repo, session.config.workspace);
|
|
185
129
|
const grouped = groupRefusalsIntoQuestions(session.config.repo, stillOpen);
|
|
186
130
|
if (truncated) {
|
|
@@ -195,10 +139,8 @@ async function run(args, ctx) {
|
|
|
195
139
|
if (answered.length > 0) {
|
|
196
140
|
notes.push(`${answered.length} previously-open row(s) are already answered by a stored confirmed fact and ` +
|
|
197
141
|
"are not listed as questions.");
|
|
198
|
-
// Named, never folded in
|
|
199
|
-
//
|
|
200
|
-
// different facts about what this developer actually knows, and only the
|
|
201
|
-
// second one carries the risk the scope field exists to make deliberate.
|
|
142
|
+
// Named, never folded in — "answered here" vs "answered elsewhere as workspace-wide"
|
|
143
|
+
// are different facts, and only the second carries the risk `scope` makes deliberate.
|
|
202
144
|
const elsewhere = answered.filter((a) => a.fromAnotherRepo);
|
|
203
145
|
if (elsewhere.length > 0) {
|
|
204
146
|
const repos = [...new Set(elsewhere.flatMap((a) => a.facts.map((f) => f.repo)))].sort();
|
|
@@ -220,23 +162,17 @@ async function run(args, ctx) {
|
|
|
220
162
|
`${grouped.questions.reduce((n, q) => n + q.sites.length, 0)} call site(s).`;
|
|
221
163
|
return answer({
|
|
222
164
|
headline,
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
//
|
|
226
|
-
// axis this tool never conflates with resolution. `UnresolvedRef` itself
|
|
227
|
-
// carries no resolution level (refusals are not edges and were never
|
|
228
|
-
// scored, per DEC-223's own matching function), so R0 is the honest
|
|
229
|
-
// floor rather than a borrowed number — the same choice `link_workspace`
|
|
230
|
-
// makes for the same reason: this is not a claim resting on graph edges.
|
|
165
|
+
// Name-level fact (expression present or not, same class as a missing env var).
|
|
166
|
+
// `UnresolvedRef` carries no resolution level (refusals aren't edges, DEC-223),
|
|
167
|
+
// so R0 is the honest floor — same choice `link_workspace` makes, same reason.
|
|
231
168
|
nameLevel: true,
|
|
232
169
|
resolutionFloor: 0,
|
|
233
170
|
commitSha: provider.baseStamp().commitSha,
|
|
234
171
|
graphBuiltAt: provider.baseStamp().graphBuiltAt,
|
|
235
172
|
irSchemaVersion: provider.baseStamp().irSchemaVersion,
|
|
236
173
|
commitSpread: provider.baseStamp().commitSpread,
|
|
237
|
-
// Empty only for a pure read
|
|
238
|
-
//
|
|
239
|
-
// to empty the queue is a successful write, not an empty search.
|
|
174
|
+
// Empty only for a pure read finding nothing open (`classifiedRows` is real).
|
|
175
|
+
// An answer that happens to empty the queue is a write, not an empty search.
|
|
240
176
|
...(recorded === null && grouped.questions.length === 0 ? { state: "empty" } : {}),
|
|
241
177
|
notes,
|
|
242
178
|
data: {
|
|
@@ -249,29 +185,21 @@ async function run(args, ctx) {
|
|
|
249
185
|
},
|
|
250
186
|
});
|
|
251
187
|
}
|
|
252
|
-
/**
|
|
253
|
-
*
|
|
254
|
-
* a
|
|
255
|
-
* answerable on the first call, or this tool could not answer the first
|
|
256
|
-
* question ever asked of it. Only a call that would actually write a
|
|
257
|
-
* `ConfirmedFact` describes itself, so `resolveActionDispatch` mints a token
|
|
258
|
-
* for that call alone.
|
|
259
|
-
*/
|
|
188
|
+
/** §7's handshake gate. `undefined` = nothing to confirm (pure read must stay
|
|
189
|
+
* answerable on the first call). Only a write-bound call describes itself, so
|
|
190
|
+
* `resolveActionDispatch` mints a token for that call alone. */
|
|
260
191
|
function describeAction(args, ctx) {
|
|
261
192
|
const answerArg = args["answer"];
|
|
262
|
-
// No `answer`
|
|
263
|
-
//
|
|
264
|
-
//
|
|
265
|
-
// run uses, so a call this tool would refuse is refused here instead of
|
|
266
|
-
// being described and minted.
|
|
193
|
+
// No `answer` = pure read, nothing to confirm — gating it would block the first
|
|
194
|
+
// question ever asked. Other shapes reuse `readAnswer`, so an invalid call is
|
|
195
|
+
// refused here rather than described and minted.
|
|
267
196
|
if (answerArg === undefined)
|
|
268
197
|
return undefined;
|
|
269
198
|
const { blockedBy, value, environment, scope } = readAnswer(answerArg, ctx.session);
|
|
270
199
|
return (`record a ConfirmedFact: "${blockedBy}" = "${value}"` +
|
|
271
200
|
(typeof environment === "string" ? ` (environment: ${environment})` : "") +
|
|
272
|
-
//
|
|
273
|
-
//
|
|
274
|
-
// handshake exists so nothing is performed that was not described.
|
|
201
|
+
// Reach is part of what's approved — a workspace answer affects repos the
|
|
202
|
+
// approver isn't looking at; §7's handshake exists so nothing runs undescribed.
|
|
275
203
|
(scope === "workspace"
|
|
276
204
|
? " — reaching EVERY repository in this workspace, not just this one,"
|
|
277
205
|
: " — in this repository only,") +
|