@productbrain/cli 0.1.0-beta.4849 → 0.1.0-beta.4869
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/__tests__/capture.test.js +373 -20
- package/dist/__tests__/capture.test.js.map +1 -1
- package/dist/commands/capture.d.ts +3 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +88 -116
- package/dist/commands/capture.js.map +1 -1
- package/dist/formatters/capture.d.ts.map +1 -1
- package/dist/formatters/capture.js +3 -1
- package/dist/formatters/capture.js.map +1 -1
- package/dist/generated/relationTypes.generated.d.ts +12 -0
- package/dist/generated/relationTypes.generated.d.ts.map +1 -0
- package/dist/generated/relationTypes.generated.js +11 -0
- package/dist/generated/relationTypes.generated.js.map +1 -0
- package/dist/generated/routeLatencyBudget.generated.d.ts.map +1 -1
- package/dist/generated/routeLatencyBudget.generated.js +0 -1
- package/dist/generated/routeLatencyBudget.generated.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/legalRelationTypes.test.d.ts +2 -0
- package/dist/lib/__tests__/legalRelationTypes.test.d.ts.map +1 -0
- package/dist/lib/__tests__/legalRelationTypes.test.js +98 -0
- package/dist/lib/__tests__/legalRelationTypes.test.js.map +1 -0
- package/dist/lib/captureGrounding.d.ts +53 -0
- package/dist/lib/captureGrounding.d.ts.map +1 -0
- package/dist/lib/captureGrounding.js +108 -0
- package/dist/lib/captureGrounding.js.map +1 -0
- package/dist/lib/legalRelationTypes.d.ts +25 -0
- package/dist/lib/legalRelationTypes.d.ts.map +1 -0
- package/dist/lib/legalRelationTypes.js +94 -0
- package/dist/lib/legalRelationTypes.js.map +1 -0
- package/dist/registerEntryCommands.js +2 -2
- package/dist/registerEntryCommands.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WP-688 S4 review round 5 (bdB5K, cQFZ_): `pb capture`'s --link-type refusal door
|
|
3
|
+
* (commands/capture.ts) lists an entry's declared legal relation verbs as a `pb relate`
|
|
4
|
+
* recovery hint. "Declared" (the workspace's own semantic-type row, `valid_relation_types`)
|
|
5
|
+
* is NOT the same set as "creatable via pb relate's generic door" — guardRelation
|
|
6
|
+
* (convex/lib/guards.ts) hard-refuses some declared verbs outright:
|
|
7
|
+
* - replaces / do_not_confuse_with: always refused, routed to a different command
|
|
8
|
+
* (guards.ts:309-322).
|
|
9
|
+
* - Any verb outside the kernel ALLOWED_RELATION_TYPES set: refused regardless of what a
|
|
10
|
+
* workspace's own type row declares (guards.ts:302-307) — registry reconciliation
|
|
11
|
+
* deliberately preserves a customized `valid_relation_types` value even when it contains
|
|
12
|
+
* a verb the kernel allowlist doesn't recognize (registryReconcile.test.ts:131-147), so
|
|
13
|
+
* this is a supported persisted state, not malformed data.
|
|
14
|
+
* - belongs_to / authority_domain TOWARD a domain-tagged target (target canonicalKey ===
|
|
15
|
+
* 'domain'): requires ratification metadata (stagingEntryId + source) `pb relate` cannot
|
|
16
|
+
* supply (guards.ts:349-363).
|
|
17
|
+
* - anchored_to FROM a non-strategy source: its entire meaning is strategy-scope-anchor
|
|
18
|
+
* (WP-641 S2a) — predictStrategyAnchorViolation unconditionally rejects it whenever the
|
|
19
|
+
* source canonicalKey isn't 'strategy' (singletonCardinality.ts:339-341), regardless of
|
|
20
|
+
* target (round-5 finding bcRgRI).
|
|
21
|
+
* Centralized here so the filter isn't duplicated (or drifts) if another connector ever needs
|
|
22
|
+
* the same "legal AND creatable" list.
|
|
23
|
+
*
|
|
24
|
+
* WP-688 S4 review round 5 (bcQWqA): ALLOWED_RELATION_TYPES is read at RUNTIME (a filter, not a
|
|
25
|
+
* type check), so it cannot come from a bare `kernel/entries/relationTypes` value import —
|
|
26
|
+
* `kernel` is a devDependency-only, unpublished workspace package (present locally via monorepo
|
|
27
|
+
* linking, absent from the published `@productbrain/cli` npm package), so that import resolves
|
|
28
|
+
* here in dev/test but throws ERR_MODULE_NOT_FOUND for every real npm-installed `pb` command
|
|
29
|
+
* (index.ts statically imports capture.ts, which statically imports this file). Import the
|
|
30
|
+
* generated, CLI-owned copy instead — same pattern as sourceSurfaces.generated.ts (see
|
|
31
|
+
* scripts/generate-kernel-value-sets.mjs's header for the full rationale + retirement rule).
|
|
32
|
+
*/
|
|
33
|
+
import { ALLOWED_RELATION_TYPES as ALLOWED_RELATION_TYPES_LIST } from '../generated/relationTypes.generated.js';
|
|
34
|
+
const ALLOWED_RELATION_TYPES = new Set(ALLOWED_RELATION_TYPES_LIST);
|
|
35
|
+
/** Verbs guardRelation refuses outright regardless of ALLOWED_RELATION_TYPES membership — each
|
|
36
|
+
* routes to a different, specialized command instead of the generic relation door. */
|
|
37
|
+
const DIRECT_DOOR_BLOCKED = new Set(['replaces', 'do_not_confuse_with']);
|
|
38
|
+
/** Domain-tag verbs guardRelation only accepts via ratification metadata (guards.ts:349-363) —
|
|
39
|
+
* `pb relate` cannot supply it, so never recommend these toward a domain-tagged target. */
|
|
40
|
+
const DOMAIN_TAG_VERBS = new Set(['belongs_to', 'authority_domain']);
|
|
41
|
+
/** anchored_to only exists as a strategy-scope-anchor verb (WP-641 S2a) — never legal from a
|
|
42
|
+
* non-strategy source, regardless of target (bcRgRI). */
|
|
43
|
+
const STRATEGY_ONLY_VERBS = new Set(['anchored_to']);
|
|
44
|
+
/** Filters a workspace-declared `valid_relation_types` array down to verbs `pb relate`'s
|
|
45
|
+
* generic door can actually create toward the given target. `targetIsDomain` should be
|
|
46
|
+
* `true` when the link target entry's canonicalKey is 'domain'; `sourceIsStrategy` should be
|
|
47
|
+
* `true` when the entry being captured has canonicalKey 'strategy'. */
|
|
48
|
+
export function filterCreatableRelationTypes(declared, targetIsDomain, sourceIsStrategy) {
|
|
49
|
+
if (!Array.isArray(declared))
|
|
50
|
+
return [];
|
|
51
|
+
return declared.filter((t) => typeof t === 'string'
|
|
52
|
+
&& !DIRECT_DOOR_BLOCKED.has(t)
|
|
53
|
+
&& ALLOWED_RELATION_TYPES.has(t)
|
|
54
|
+
&& !(targetIsDomain && DOMAIN_TAG_VERBS.has(t))
|
|
55
|
+
&& !(!sourceIsStrategy && STRATEGY_ONLY_VERBS.has(t)));
|
|
56
|
+
}
|
|
57
|
+
/** Trust-accepted statuses (statusStateMachine.ts:67-69's isTrustAccepted, inlined rather than
|
|
58
|
+
* imported — same devDependency-only/unpublished-kernel constraint as ALLOWED_RELATION_TYPES). */
|
|
59
|
+
function isTrustAcceptedStatus(status) {
|
|
60
|
+
return status === 'accepted' || status === 'active';
|
|
61
|
+
}
|
|
62
|
+
/** Mirrors parseSemanticTypeDefData's validity rule (kernel/entries/semanticTypes.ts:65-77) —
|
|
63
|
+
* loadTypeMap skips a malformed row (missing/non-string description, or a cardinality_rule
|
|
64
|
+
* outside the 3-value enum) rather than letting it win, even when it's the LAST trust-accepted
|
|
65
|
+
* duplicate (round-5 finding bcRICo). Inlined rather than imported: same devDependency-only/
|
|
66
|
+
* unpublished-kernel constraint as ALLOWED_RELATION_TYPES above. */
|
|
67
|
+
function isParsableSemanticTypeRow(data) {
|
|
68
|
+
return typeof data?.description === 'string'
|
|
69
|
+
&& (data.cardinality_rule === 'singleton_per_workspace'
|
|
70
|
+
|| data.cardinality_rule === 'singleton_per_scope'
|
|
71
|
+
|| data.cardinality_rule === 'multiple');
|
|
72
|
+
}
|
|
73
|
+
/** Resolves the declared `valid_relation_types` for `canonicalKey` out of a semantic-types
|
|
74
|
+
* listEntries result the SAME way loadTypeMap does (convex/chain/semanticTypes.ts:81-99):
|
|
75
|
+
* trust-accepted AND parsable rows only, and when duplicate canonical_key rows exist (a
|
|
76
|
+
* supported state — backfillTypeRegistryReconcile.test.ts:175-199 exercises an active
|
|
77
|
+
* duplicate) the LAST such match in listEntries' query order wins, mirroring loadTypeMap's
|
|
78
|
+
* Map.set()-overwrite-per-match loop over the same by_collection-indexed query — a malformed
|
|
79
|
+
* duplicate is skipped entirely rather than overwriting an earlier valid row (bcRICo). Then
|
|
80
|
+
* filters to what `pb relate` can create. */
|
|
81
|
+
export function resolveCreatableRelationTypes(typeRows, canonicalKey, targetIsDomain) {
|
|
82
|
+
let declared;
|
|
83
|
+
for (const row of typeRows ?? []) {
|
|
84
|
+
if (row.data?.canonical_key !== canonicalKey)
|
|
85
|
+
continue;
|
|
86
|
+
if (!isTrustAcceptedStatus(row.status))
|
|
87
|
+
continue;
|
|
88
|
+
if (!isParsableSemanticTypeRow(row.data))
|
|
89
|
+
continue;
|
|
90
|
+
declared = row.data?.valid_relation_types;
|
|
91
|
+
}
|
|
92
|
+
return filterCreatableRelationTypes(declared, targetIsDomain, canonicalKey === 'strategy');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=legalRelationTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legalRelationTypes.js","sourceRoot":"","sources":["../../src/lib/legalRelationTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,sBAAsB,IAAI,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAEhH,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAEzF;uFACuF;AACvF,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAE9F;4FAC4F;AAC5F,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAE1F;0DAC0D;AAC1D,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAE1E;;;wEAGwE;AACxE,MAAM,UAAU,4BAA4B,CAAC,QAAiB,EAAE,cAAuB,EAAE,gBAAyB;IAChH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CACxC,OAAO,CAAC,KAAK,QAAQ;WAClB,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;WAC3B,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;WAC7B,CAAC,CAAC,cAAc,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;WAC5C,CAAC,CAAC,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAED;mGACmG;AACnG,SAAS,qBAAqB,CAAC,MAA0B;IACvD,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,QAAQ,CAAC;AACtD,CAAC;AAOD;;;;qEAIqE;AACrE,SAAS,yBAAyB,CAAC,IAAqB;IACtD,OAAO,OAAO,IAAI,EAAE,WAAW,KAAK,QAAQ;WACvC,CAAC,IAAI,CAAC,gBAAgB,KAAK,yBAAyB;eAClD,IAAI,CAAC,gBAAgB,KAAK,qBAAqB;eAC/C,IAAI,CAAC,gBAAgB,KAAK,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;8CAO8C;AAC9C,MAAM,UAAU,6BAA6B,CAC3C,QAA+C,EAC/C,YAAoB,EACpB,cAAuB;IAEvB,IAAI,QAAiB,CAAC;IACtB,KAAK,MAAM,GAAG,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY;YAAE,SAAS;QACvD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QACjD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACnD,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC;IAC5C,CAAC;IACD,OAAO,4BAA4B,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,KAAK,UAAU,CAAC,CAAC;AAC7F,CAAC"}
|
|
@@ -14,7 +14,7 @@ export function registerEntryCommands(program) {
|
|
|
14
14
|
.option('-c, --collection <slug>', 'Explicit collection (skip auto-classification)')
|
|
15
15
|
.option('-f, --field <key=value>', 'Set a data field (repeatable; e.g. rationale="...")', (val, prev) => [...prev, val], [])
|
|
16
16
|
.option('-l, --link <entry-id>', 'Link new entry to an existing entry (TEN-705)')
|
|
17
|
-
.option('-t, --type <relation-type>', 'Relation type for --link (
|
|
17
|
+
.option('-t, --link-type <relation-type>', 'Relation type for --link — REQUIRED when --link is used (WP-688 S4): no default, the door refuses and lists the source entry\'s legal verbs if omitted')
|
|
18
18
|
.option('--source-ref <ref>', 'Source reference URI (BET-240 E2)')
|
|
19
19
|
.option('--source-excerpt <text>', 'Verbatim source excerpt (BET-240 E2)')
|
|
20
20
|
.option('--draft', 'Force the entry to draft regardless of workspace governance mode (TEN-2226)')
|
|
@@ -35,7 +35,7 @@ export function registerEntryCommands(program) {
|
|
|
35
35
|
}
|
|
36
36
|
await runCapture({
|
|
37
37
|
text: text || opts.name || '', name: opts.name, description: opts.description, collection: opts.collection,
|
|
38
|
-
field: opts.field, link: opts.link,
|
|
38
|
+
field: opts.field, link: opts.link, linkType: opts.linkType, sourceRef: opts.sourceRef, sourceExcerpt: opts.sourceExcerpt,
|
|
39
39
|
draft: opts.draft, json: opts.json, suggestOnly: opts.suggestOnly, strict: opts.strict,
|
|
40
40
|
ownerTeam: opts.ownerTeam, ownerRole: opts.ownerRole,
|
|
41
41
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerEntryCommands.js","sourceRoot":"","sources":["../src/registerEntryCommands.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kFAAkF,CAAC,CAAC;IAEnG,QAAQ;SACL,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;SACpE,MAAM,CAAC,0BAA0B,EAAE,8CAA8C,CAAC;SAClF,MAAM,CAAC,yBAAyB,EAAE,gDAAgD,CAAC;SACnF,MAAM,CAAC,yBAAyB,EAAE,qDAAqD,EAAE,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,EAAc,CAAC;SACzJ,MAAM,CAAC,uBAAuB,EAAE,+CAA+C,CAAC;SAChF,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"registerEntryCommands.js","sourceRoot":"","sources":["../src/registerEntryCommands.ts"],"names":[],"mappings":"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"}
|