@productbrain/mcp 0.0.1-beta.984 → 0.0.1-beta.997

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.
@@ -1802,7 +1802,7 @@ var captureSchema = z2.object({
1802
1802
  canonicalKey: z2.string().optional().describe("Semantic type (e.g. 'decision', 'tension', 'vision'). Auto-assigned from collection if omitted."),
1803
1803
  data: z2.record(z2.unknown()).optional().describe("Explicit field values when you know the schema (e.g. canonical_key, cardinality_rule, required_fields). Merged with inferred values; user-provided wins."),
1804
1804
  links: z2.array(z2.object({
1805
- to: z2.string().describe("Target entry ID (e.g. 'BR-64', 'ARCH-8')"),
1805
+ to: z2.string().describe("Target entry ID (e.g. '<PREFIX>-<n>')"),
1806
1806
  type: z2.string().describe("Relation type (e.g. 'governs', 'related_to', 'informs')")
1807
1807
  })).optional().describe("Relations to create after capture. Skips auto-link discovery when provided."),
1808
1808
  autoCommit: z2.boolean().optional().describe(
@@ -1823,7 +1823,8 @@ var captureSchema = z2.object({
1823
1823
  });
1824
1824
  var batchCaptureSchema = z2.object({
1825
1825
  entries: z2.array(z2.object({
1826
- collection: z2.string().optional().describe("Collection slug. Optional \u2014 auto-classified via LLM when omitted (FEAT-160)."),
1826
+ // FEAT-160
1827
+ collection: z2.string().optional().describe("Collection slug. Optional \u2014 auto-classified via LLM when omitted."),
1827
1828
  name: z2.string().describe("Display name"),
1828
1829
  description: z2.string().describe("Full context / definition"),
1829
1830
  entryId: entryIdSchema,
@@ -2259,7 +2260,8 @@ function registerSmartCaptureTools(server) {
2259
2260
  return {
2260
2261
  content: [{
2261
2262
  type: "text",
2262
- text: `# BR-111: entryId Not Allowed
2263
+ // BR-111
2264
+ text: `# entryId Not Allowed
2263
2265
 
2264
2266
  \`entryId\` is only valid for \`business-rules\` and \`standards\` collections. For \`${resolvedCollection}\`, omit \`entryId\` \u2014 IDs are auto-generated.`
2265
2267
  }],
@@ -3041,7 +3043,7 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
3041
3043
  "batch-capture",
3042
3044
  {
3043
3045
  title: "Batch Capture",
3044
- description: "Create multiple knowledge entries in one call. Ideal for workspace setup, document ingestion, or any scenario where you need to capture many entries at once.\n\nCollection is optional per entry \u2014 omit it and the LLM classifier auto-routes (FEAT-160). High/medium confidence entries are created; low confidence entries are skipped and returned with suggested collections for manual review.\n\nEach entry is created independently \u2014 if one fails, the others still succeed. Returns a compact summary instead of per-entry quality scorecards.\n\nAuto-linking runs per entry but contradiction checks and readiness hints are skipped for speed. Use `quality action=check` on individual entries afterward if needed.\n\nPass `autoCommit: false` to keep the whole batch draft-first. If omitted, Open mode workspaces commit by default and consensus/role modes keep drafts.",
3046
+ description: "Create multiple knowledge entries in one call. Ideal for workspace setup, document ingestion, or any scenario where you need to capture many entries at once.\n\nCollection is optional per entry \u2014 omit it and the LLM classifier auto-routes. High/medium confidence entries are created; low confidence entries are skipped and returned with suggested collections for manual review.\n\nEach entry is created independently \u2014 if one fails, the others still succeed. Returns a compact summary instead of per-entry quality scorecards.\n\nAuto-linking runs per entry but contradiction checks and readiness hints are skipped for speed. Use `quality action=check` on individual entries afterward if needed.\n\nPass `autoCommit: false` to keep the whole batch draft-first. If omitted, Open mode workspaces commit by default and consensus/role modes keep drafts.",
3045
3047
  inputSchema: batchCaptureSchema.shape,
3046
3048
  annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false }
3047
3049
  },
@@ -3149,7 +3151,8 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
3149
3151
  classifiedBy,
3150
3152
  confidence,
3151
3153
  confidenceTier,
3152
- error: `BR-111: entryId only allowed for business-rules and standards. Omit for ${resolvedSlug}.`
3154
+ // BR-111
3155
+ error: `entryId only allowed for business-rules and standards. Omit for ${resolvedSlug}.`
3153
3156
  });
3154
3157
  continue;
3155
3158
  }
@@ -3843,7 +3846,7 @@ var WORKFLOW_STATUS_VALUES = [
3843
3846
  ];
3844
3847
  var LEGACY_WORKFLOW_STATUSES = new Set(WORKFLOW_STATUS_VALUES);
3845
3848
  var updateEntrySchema = z3.object({
3846
- entryId: z3.string().describe("Entry ID to update, e.g. 'T-SUPPLIER', 'BR-001'"),
3849
+ entryId: z3.string().describe("Entry ID to update, e.g. 'T-SUPPLIER', '<PREFIX>-<n>'"),
3847
3850
  name: z3.string().optional().describe("New display name"),
3848
3851
  status: z3.union([
3849
3852
  z3.enum(["draft", "active", "deprecated", "archived"]),
@@ -3854,15 +3857,15 @@ var updateEntrySchema = z3.object({
3854
3857
  order: z3.number().optional().describe("New sort order"),
3855
3858
  canonicalKey: z3.string().optional().describe("Semantic type (e.g. 'decision', 'tension'). Only changeable on draft/uncommitted entries."),
3856
3859
  autoPublish: z3.boolean().optional().default(false).describe("Only true when user explicitly asks to publish. Default false = draft. Never auto-publish without user confirmation."),
3857
- changeNote: z3.string().optional().describe("Strongly recommended: short human-readable rationale for WHY this change was made (e.g. 'Aligned description with F1-themed copy per BET-238'). Surfaces in activity feed and pb get. If omitted, falls back to session purpose or auto-generated field summary."),
3860
+ changeNote: z3.string().optional().describe("Strongly recommended: short human-readable rationale for WHY this change was made (e.g. 'Aligned description with F1-themed copy'). Surfaces in activity feed and pb get. If omitted, falls back to session purpose or auto-generated field summary."),
3858
3861
  sourceRef: z3.string().optional().describe("URI or path of the source document backing this entry. Write-once: can only be set if currently empty."),
3859
3862
  sourceExcerpt: z3.string().optional().describe("Verbatim excerpt from the source that backs this entry's claims. Write-once: can only be set if currently empty.")
3860
3863
  });
3861
3864
  var getHistorySchema = z3.object({
3862
- entryId: z3.string().describe("Entry ID, e.g. 'T-SUPPLIER', 'BR-001'")
3865
+ entryId: z3.string().describe("Entry ID, e.g. 'T-SUPPLIER', '<PREFIX>-<n>'")
3863
3866
  });
3864
3867
  var commitEntrySchema = z3.object({
3865
- entryId: z3.string().describe("Entry ID to commit, e.g. 'TEN-abc123', 'GT-019'"),
3868
+ entryId: z3.string().describe("Entry ID to commit, e.g. 'TEN-abc123', '<PREFIX>-<n>'"),
3866
3869
  // WP-316 S3: Preview gate — dry-run mode. Returns would-succeed result, no DB writes.
3867
3870
  preview: z3.boolean().optional().describe("If true, validates the commit without writing. Returns what would happen. Default false.")
3868
3871
  });
@@ -4287,7 +4290,7 @@ var entriesSchema = z4.object({
4287
4290
  action: z4.enum(ENTRIES_ACTIONS).describe(
4288
4291
  "'list': browse entries with filters. 'get': fetch one entry by ID. 'batch': fetch multiple entries. 'search': full-text search."
4289
4292
  ),
4290
- entryId: z4.string().optional().describe("Entry ID for get action, e.g. 'DEC-42', 'BR-001'"),
4293
+ entryId: z4.string().optional().describe("Entry ID for get action, e.g. '<PREFIX>-<n>'"),
4291
4294
  entryIds: z4.array(z4.string()).min(1).max(20).optional().describe("Entry IDs for batch action, e.g. ['TYPE-strategy', 'STR-jljeg7']"),
4292
4295
  collection: z4.string().optional().describe("Collection slug for list/search, e.g. 'glossary', 'tracking-events', 'business-rules'"),
4293
4296
  status: z4.string().optional().describe("Filter: draft | active | deprecated | archived"),
@@ -4296,7 +4299,7 @@ var entriesSchema = z4.object({
4296
4299
  query: z4.string().optional().describe("Search text for search action (min 2 characters)")
4297
4300
  });
4298
4301
  var moveEntrySchema = z4.object({
4299
- entryId: z4.string().describe("Entry ID to move, e.g. 'DEC-42', 'BR-001'"),
4302
+ entryId: z4.string().describe("Entry ID to move, e.g. '<PREFIX>-<n>'"),
4300
4303
  toCollection: z4.string().describe("Target collection slug, e.g. 'decisions', 'architecture'")
4301
4304
  });
4302
4305
  var entriesGetOutputSchema = z4.object({
@@ -4404,7 +4407,7 @@ function registerEntriesTools(server) {
4404
4407
  "move-entry",
4405
4408
  {
4406
4409
  title: "Move Entry",
4407
- description: 'Move an entry to a different collection. Use when the classifier misrouted or the user wants to reclassify.\n\nExample: `move-entry entryId="DEC-42" toCollection="tensions"` reclassifies DEC-42 into the tensions collection.',
4410
+ description: 'Move an entry to a different collection. Use when the classifier misrouted or the user wants to reclassify.\n\nExample: `move-entry entryId="<PREFIX>-<n>" toCollection="tensions"` reclassifies the entry into the tensions collection.',
4408
4411
  inputSchema: moveEntrySchema,
4409
4412
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false }
4410
4413
  },
@@ -4804,7 +4807,7 @@ var graphSchema = z5.object({
4804
4807
  action: z5.enum(GRAPH_ACTIONS).describe(
4805
4808
  "'find': traverse relations from an entry (graph walk). 'suggest': discover potential connections for an entry."
4806
4809
  ),
4807
- entryId: z5.string().describe("Entry ID, e.g. 'GT-019', 'FEAT-001'"),
4810
+ entryId: z5.string().describe("Entry ID, e.g. '<PREFIX>-<n>'"),
4808
4811
  direction: z5.enum(["incoming", "outgoing", "both"]).default("both").optional().describe("For find: 'incoming' = what references this, 'outgoing' = what this references"),
4809
4812
  limit: z5.number().min(1).max(20).default(10).optional().describe("For suggest: max suggestions to return"),
4810
4813
  depth: z5.number().min(1).max(3).default(2).optional().describe("For suggest: graph traversal depth")
@@ -5351,12 +5354,13 @@ function epistemicCollectionHint(collectionName) {
5351
5354
  }
5352
5355
  var CONTEXT_ACTIONS = ["gather", "build", "neighborhood", "changes", "chain", "cross-cut", "incremental", "brief"];
5353
5356
  var contextSchema = z7.object({
5357
+ // provenance: neighborhood BET-142; changes/chain/cross-cut/incremental/brief BET-239 (E4, E6)
5354
5358
  action: z7.enum(CONTEXT_ACTIONS).describe(
5355
- "'gather': assemble knowledge context (entry graph, task auto-load, journey mode, or graph mode). 'build': structured build spec for an entry. 'neighborhood': typed graph neighborhood for an entry \u2014 blocking chain, dependencies, parent context, tensions, staleness (BET-142). 'changes': entries modified and relations created since a timestamp (BET-239). Requires 'since' parameter. 'chain': directed traversal along one relation type to depth 4 (BET-239). Requires entryId. Optional: direction, relationType, maxHops (1-4). 'cross-cut': structural aggregation \u2014 all relations of a given type grouped by source collection (BET-239). Requires 'relationType' parameter. 'incremental': delta since last brief run for a skill (BET-239 E4). Requires 'skill' parameter. Returns only entries changed since the skill's last brief. 'brief': compound intelligence query (BET-239 E6). Requires 'briefType' parameter: 'steering' (changes + structure + delta + readiness), 'confidence' (changes + active bets + tensions), or 'delta' (changes + relations since timestamp). Optional 'since' for delta type."
5359
+ "'gather': assemble knowledge context (entry graph, task auto-load, journey mode, or graph mode). 'build': structured build spec for an entry. 'neighborhood': typed graph neighborhood for an entry \u2014 blocking chain, dependencies, parent context, tensions, staleness. 'changes': entries modified and relations created since a timestamp. Requires 'since' parameter. 'chain': directed traversal along one relation type to depth 4. Requires entryId. Optional: direction, relationType, maxHops (1-4). 'cross-cut': structural aggregation \u2014 all relations of a given type grouped by source collection. Requires 'relationType' parameter. 'incremental': delta since last brief run for a skill. Requires 'skill' parameter. Returns only entries changed since the skill's last brief. 'brief': compound intelligence query. Requires 'briefType' parameter: 'steering' (changes + structure + delta + readiness), 'confidence' (changes + active bets + tensions), or 'delta' (changes + relations since timestamp). Optional 'since' for delta type."
5356
5360
  ),
5357
- entryId: z7.string().optional().describe("Entry ID for graph traversal or build, e.g. 'FEAT-001', 'GT-019'"),
5361
+ entryId: z7.string().optional().describe("Entry ID for graph traversal or build, e.g. '<PREFIX>-<n>'"),
5358
5362
  mapEntryId: z7.string().optional().describe(
5359
- "Journey map entry ID for journey-aware context (gather only). Returns context organised by journey stage. Takes precedence over entryId when both are supplied. Example: 'MAP-1'."
5363
+ "Journey map entry ID for journey-aware context (gather only). Returns context organised by journey stage. Takes precedence over entryId when both are supplied. Example: '<PREFIX>-<n>'."
5360
5364
  ),
5361
5365
  task: z7.string().optional().describe("Natural-language task description for loading task-relevant governance, binding constraints, and supporting context (gather only)"),
5362
5366
  since: z7.string().optional().describe(
@@ -5382,7 +5386,7 @@ function registerContextTools(server) {
5382
5386
  "context",
5383
5387
  {
5384
5388
  title: "Context",
5385
- description: "Assemble knowledge context in one call. Six actions:\n\n- **gather**: Three modes \u2014 (1) By entry: traverse the graph around a specific entry. (2) By task: load task-relevant governance, binding constraints, and supporting domain knowledge for a natural-language task. (3) Graph mode (entryId + mode='graph'): enhanced traversal with provenance paths.\n- **build**: Structured build spec for any entry \u2014 data, related entries, business rules, glossary terms, chain refs. Use when starting a build. Requires active session.\n- **neighborhood**: Typed graph neighborhood \u2014 blocking chain (what this blocks, 3 hops), dependency chain (what blocks this), parent context (sibling count), related tensions, staleness signal, isolation signal. Fast indexed lookups. Requires entryId.\n- **changes**: Detect entries modified and relations created since a timestamp. Use for incremental updates instead of full traversal. Requires 'since' (ISO 8601). Returns grouped counts by collection. Cap: 200 entries. (BET-239)\n- **chain**: Directed deep traversal along one relation type to depth 4 (BET-239). Use for dependency analysis, governance chains, strategic alignment. Requires entryId. Optional: direction (outgoing/incoming), relationType, maxHops (1-4). Cycle detection, fan-out cap 10/hop, total cap 100 nodes. Returns tree + edges.\n- **cross-cut**: Structural aggregation \u2014 all relations of a given type across the workspace, grouped by source collection. Use to answer 'show me everything connected by part_of'. Requires 'relationType'. Cap: 500 entries. (BET-239)\n- **incremental**: Delta since last brief run for a skill. Returns only entries changed since the skill's last brief, filtering out previously surfaced entries. Requires 'skill' parameter. Use for steering briefs that need incremental awareness. (BET-239 E4)\n- **brief**: Compound intelligence query composing multiple primitives. Requires 'briefType': 'steering' (7d changes + structure + delta + readiness), 'confidence' (7d changes + active bets + tensions), or 'delta' (changes since custom timestamp). Auto-records brief run for steering. (BET-239 E6)",
5389
+ description: "Assemble knowledge context in one call. Six actions:\n\n- **gather**: Three modes \u2014 (1) By entry: traverse the graph around a specific entry. (2) By task: load task-relevant governance, binding constraints, and supporting domain knowledge for a natural-language task. (3) Graph mode (entryId + mode='graph'): enhanced traversal with provenance paths.\n- **build**: Structured build spec for any entry \u2014 data, related entries, business rules, glossary terms, chain refs. Use when starting a build. Requires active session.\n- **neighborhood**: Typed graph neighborhood \u2014 blocking chain (what this blocks, 3 hops), dependency chain (what blocks this), parent context (sibling count), related tensions, staleness signal, isolation signal. Fast indexed lookups. Requires entryId.\n- **changes**: Detect entries modified and relations created since a timestamp. Use for incremental updates instead of full traversal. Requires 'since' (ISO 8601). Returns grouped counts by collection. Cap: 200 entries.\n- **chain**: Directed deep traversal along one relation type to depth 4. Use for dependency analysis, governance chains, strategic alignment. Requires entryId. Optional: direction (outgoing/incoming), relationType, maxHops (1-4). Cycle detection, fan-out cap 10/hop, total cap 100 nodes. Returns tree + edges.\n- **cross-cut**: Structural aggregation \u2014 all relations of a given type across the workspace, grouped by source collection. Use to answer 'show me everything connected by part_of'. Requires 'relationType'. Cap: 500 entries.\n- **incremental**: Delta since last brief run for a skill. Returns only entries changed since the skill's last brief, filtering out previously surfaced entries. Requires 'skill' parameter. Use for steering briefs that need incremental awareness.\n- **brief**: Compound intelligence query composing multiple primitives. Requires 'briefType': 'steering' (7d changes + structure + delta + readiness), 'confidence' (7d changes + active bets + tensions), or 'delta' (changes since custom timestamp). Auto-records brief run for steering.",
5386
5390
  inputSchema: contextSchema,
5387
5391
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false }
5388
5392
  },
@@ -6427,13 +6431,18 @@ var fieldSchema = z8.object({
6427
6431
  displayHint: z8.enum(["hero", "badge", "meta", "section", "hidden", "inline-meta"]).optional().describe("V2 rendering hint: how the field should be displayed in Cortex"),
6428
6432
  zone: z8.enum(["header", "body", "meta"]).optional().describe("V2 layout zone: where the field appears in the entry view"),
6429
6433
  colorMap: z8.record(z8.string()).optional().describe("V2 value-to-semantic-color mapping, e.g. { critical: 'danger', low: 'success' }"),
6430
- accentSource: z8.boolean().optional().describe("ENT-61: when true, this field's colorMap value drives the card-level accent styling"),
6431
- iconMap: z8.record(z8.string(), z8.string()).optional().describe("ENT-61: maps field values to icons (emoji/symbol), prepended to badge text"),
6434
+ // ENT-61
6435
+ accentSource: z8.boolean().optional().describe("When true, this field's colorMap value drives the card-level accent styling"),
6436
+ // ENT-61
6437
+ iconMap: z8.record(z8.string(), z8.string()).optional().describe("Maps field values to icons (emoji/symbol), prepended to badge text"),
6432
6438
  helpText: z8.string().optional().describe("Help text shown in editors and describe output"),
6433
6439
  optionDescriptions: z8.record(z8.string()).optional().describe("Per-option guidance for select fields"),
6434
- semanticRole: z8.enum(["problem", "appetite", "elements", "architecture", "done_when", "risks", "exclusions"]).optional().describe("BET-136: Semantic role for schema-driven consumers \u2014 enables field-key-independent validation and rendering"),
6435
- maxLength: z8.number().optional().describe("BET-196: Maximum character length for field values. Three-tier resolution: explicit > displayHint > type fallback."),
6436
- minLength: z8.number().optional().describe("BET-196: Minimum character length for field values. Only explicit \u2014 no defaults.")
6440
+ // BET-136
6441
+ semanticRole: z8.enum(["problem", "appetite", "elements", "architecture", "done_when", "risks", "exclusions"]).optional().describe("Semantic role for schema-driven consumers \u2014 enables field-key-independent validation and rendering"),
6442
+ // BET-196
6443
+ maxLength: z8.number().optional().describe("Maximum character length for field values. Three-tier resolution: explicit > displayHint > type fallback."),
6444
+ // BET-196
6445
+ minLength: z8.number().optional().describe("Minimum character length for field values. Only explicit \u2014 no defaults.")
6437
6446
  });
6438
6447
  var collectionsSchema = z8.object({
6439
6448
  action: z8.enum(COLLECTIONS_ACTIONS).describe(
@@ -6446,13 +6455,19 @@ var collectionsSchema = z8.object({
6446
6455
  icon: z8.string().optional().describe("Emoji icon for the collection"),
6447
6456
  navGroup: z8.enum(["daily", "strategic", "governance", "reference", "collections"]).optional().describe("Sidebar placement: 'daily', 'strategic', 'governance', 'reference', 'collections'"),
6448
6457
  fields: z8.array(fieldSchema).optional().describe("Field definitions for create, or replacement schema for update (replaces all fields)"),
6449
- defaultCanonicalKey: z8.string().optional().describe("ENT-62: The canonical_key entries in this collection default to (e.g. 'decision', 'insight'). Consumers read from collection doc; code map is fallback."),
6450
- defaultWorkflowStatus: z8.string().optional().describe("ENT-67: Default workflowStatus for new entries. Must be in validWorkflowStatuses when set (e.g. 'hypothesis' for insights)."),
6451
- validWorkflowStatuses: z8.array(z8.string()).optional().describe("ENT-65: The allowed workflowStatus values for entries in this collection. New entries are validated against this list. Empty array means no constraint."),
6452
- classificationCheck: z8.string().optional().describe("ENT-65 FEAT-200: LLM decision-tree check for this collection (3\u2013500 chars). Guides the classifier in routing entries here."),
6453
- classificationPriority: z8.number().optional().describe("ENT-65 FEAT-200: Classifier priority (1\u20139, lower = higher priority). Used with classificationCheck to order the decision tree."),
6458
+ // ENT-62
6459
+ defaultCanonicalKey: z8.string().optional().describe("The canonical_key entries in this collection default to (e.g. 'decision', 'insight'). Consumers read from collection doc; code map is fallback."),
6460
+ // ENT-67
6461
+ defaultWorkflowStatus: z8.string().optional().describe("Default workflowStatus for new entries. Must be in validWorkflowStatuses when set (e.g. 'hypothesis' for insights)."),
6462
+ // ENT-65
6463
+ validWorkflowStatuses: z8.array(z8.string()).optional().describe("The allowed workflowStatus values for entries in this collection. New entries are validated against this list. Empty array means no constraint."),
6464
+ // ENT-65, FEAT-200
6465
+ classificationCheck: z8.string().optional().describe("LLM decision-tree check for this collection (3\u2013500 chars). Guides the classifier in routing entries here."),
6466
+ // ENT-65, FEAT-200
6467
+ classificationPriority: z8.number().optional().describe("Classifier priority (1\u20139, lower = higher priority). Used with classificationCheck to order the decision tree."),
6454
6468
  // FEAT-301 Slice 2: quality gate criteria and usage guidance.
6455
- qualityCriteria: z8.array(qualityCriterionSchema).optional().describe("FEAT-257: Per-collection commit gate rules. 'required' rule hard-blocks commits on empty fields; 'min_length'/'pattern' rules warn. Pass an empty array to clear all criteria."),
6469
+ // FEAT-257
6470
+ qualityCriteria: z8.array(qualityCriterionSchema).optional().describe("Per-collection commit gate rules. 'required' rule hard-blocks commits on empty fields; 'min_length'/'pattern' rules warn. Pass an empty array to clear all criteria."),
6456
6471
  usageGuidance: z8.string().optional().describe("Plain-text guidance shown to agents and users: when to use this collection, when not to, and what makes a good entry.")
6457
6472
  });
6458
6473
  function registerCollectionsTools(server) {
@@ -6960,7 +6975,8 @@ var REGISTRY_MANIFEST = [
6960
6975
  id: "classification-map",
6961
6976
  path: "convex/lib/seedClassificationRegistry.ts",
6962
6977
  exportName: "SEED_CLASSIFICATION_REGISTRY",
6963
- description: "Seed-only (ENT-65): governance, nav group, ID prefix. Runtime reads from DB collection doc.",
6978
+ // ENT-65
6979
+ description: "Seed-only: governance, nav group, ID prefix. Runtime reads from DB collection doc.",
6964
6980
  expectedCoverage: "curated",
6965
6981
  keyExtraction: "array-slug"
6966
6982
  }
@@ -8159,7 +8175,7 @@ var qualitySchema = z12.object({
8159
8175
  action: z12.enum(QUALITY_ACTIONS).describe(
8160
8176
  "'check': score an entry against quality criteria. 're-evaluate': trigger fresh evaluation."
8161
8177
  ),
8162
- entryId: z12.string().describe("Entry ID, e.g. 'TEN-graph-db', 'GT-019', 'SOS-006'"),
8178
+ entryId: z12.string().describe("Entry ID, e.g. 'TEN-graph-db', '<PREFIX>-<n>'"),
8163
8179
  context: z12.enum(["capture", "commit", "review"]).default("review").optional().describe("For re-evaluate: evaluation context")
8164
8180
  });
8165
8181
  var qualityCheckOutputSchema = z12.object({
@@ -10348,7 +10364,7 @@ var verifySchema = z15.object({
10348
10364
  mode: z15.enum(["report", "fix"]).default("report").describe("'report' = read-only trust report. 'fix' = also update drifted codeMapping statuses.")
10349
10365
  });
10350
10366
  var verifyEntrySchema = z15.object({
10351
- entryId: z15.string().describe("Human entry ID (e.g. 'INS-33') to mark as verified")
10367
+ entryId: z15.string().describe("Human entry ID (e.g. '<PREFIX>-<n>') to mark as verified")
10352
10368
  });
10353
10369
  function registerVerifyTools(server) {
10354
10370
  const verifyTool = server.registerTool(
@@ -11391,7 +11407,10 @@ function registerStartPbTools(server) {
11391
11407
  "start_pb",
11392
11408
  {
11393
11409
  title: "Start Product Brain",
11394
- description: "Universal session opener \u2014 say 'Start PB' to begin every session (PAT-227).\n\nStage-aware delivery:\n- **Fresh workspace (blank/seeded)**: returns the canonical SKILL-pb-setup body verbatim. The skill drives the install-to-activation flow.\n- **Active workspace (grounded/connected)**: standup briefing with active bets, governance, and recent activity.\n\nAlways call this first. It starts a session, stamps the surface, and loads the right guidance for your stage. Replaces both the former `start` tool and the former chat-only `start_pb` bootstrap.",
11410
+ description: (
11411
+ // PAT-227
11412
+ "Universal session opener \u2014 say 'Start PB' to begin every session.\n\nStage-aware delivery:\n- **Fresh workspace (blank/seeded)**: returns the canonical SKILL-pb-setup body verbatim. The skill drives the install-to-activation flow.\n- **Active workspace (grounded/connected)**: standup briefing with active bets, governance, and recent activity.\n\nAlways call this first. It starts a session, stamps the surface, and loads the right guidance for your stage. Replaces both the former `start` tool and the former chat-only `start_pb` bootstrap."
11413
+ ),
11395
11414
  inputSchema: startPbSchema,
11396
11415
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false }
11397
11416
  },
@@ -13890,13 +13909,13 @@ function registerHealthTools(server) {
13890
13909
  import { z as z23 } from "zod";
13891
13910
  var recordActivationSchema = z23.object({
13892
13911
  confirmedEntryCount: z23.number().int().min(0).describe(
13893
- "Confirmed-entry count from the Phase 4 capture loop. The mutation enforces >=10 (DEC-994)."
13912
+ "Confirmed-entry count from the Phase 4 capture loop. The mutation enforces >=10."
13894
13913
  ),
13895
13914
  entriesAcrossCollections: z23.number().int().min(0).describe(
13896
- "Number of distinct collections those entries span. The mutation enforces >=2 (DEC-994 diversity soft-gate)."
13915
+ "Number of distinct collections those entries span. The mutation enforces >=2 (diversity soft-gate)."
13897
13916
  ),
13898
13917
  retrievalDemoConfirmed: z23.boolean().describe(
13899
- "True if the BR-141 retrieval round-trip ran successfully in Phase 4. The mutation rejects false."
13918
+ "True if the retrieval round-trip ran successfully in Phase 4. The mutation rejects false."
13900
13919
  )
13901
13920
  });
13902
13921
  function registerRecordActivationTools(server) {
@@ -13904,7 +13923,10 @@ function registerRecordActivationTools(server) {
13904
13923
  "record_activation",
13905
13924
  {
13906
13925
  title: "Record activation receipt \u2014 chat-only",
13907
- description: "Writes the per-user activation receipt that closes the WP-431 install-to-activation arc for chat-only surfaces (Cursor Desktop, Claude Desktop, ChatGPT). The skill body's Phase 5 calls this AFTER Phase 4 gates pass: confirmedEntryCount>=10, entriesAcrossCollections>=2, retrievalDemoConfirmed=true. surfaceCapability is hardcoded to 'chat-only' \u2014 this tool is NOT for CLI agents (CLI uses the gateway directly). Idempotent: a re-run after activation returns alreadyActivated=true.",
13926
+ description: (
13927
+ // WP-431
13928
+ "Writes the per-user activation receipt that closes the install-to-activation arc for chat-only surfaces (Cursor Desktop, Claude Desktop, ChatGPT). The skill body's Phase 5 calls this AFTER Phase 4 gates pass: confirmedEntryCount>=10, entriesAcrossCollections>=2, retrievalDemoConfirmed=true. surfaceCapability is hardcoded to 'chat-only' \u2014 this tool is NOT for CLI agents (CLI uses the gateway directly). Idempotent: a re-run after activation returns alreadyActivated=true."
13929
+ ),
13908
13930
  inputSchema: recordActivationSchema,
13909
13931
  annotations: { readOnlyHint: false, idempotentHint: true, openWorldHint: false, destructiveHint: false }
13910
13932
  },
@@ -13967,7 +13989,7 @@ var auditSchema = z24.object({
13967
13989
  action: z24.enum(AUDIT_ACTIONS).describe(
13968
13990
  "'run': run the hygiene audit for a bet entry."
13969
13991
  ),
13970
- entryId: z24.string().describe("Bet entry ID to audit, e.g. 'BET-182'"),
13992
+ entryId: z24.string().describe("Bet entry ID to audit, e.g. '<PREFIX>-<n>'"),
13971
13993
  phase: z24.enum(["shaping", "handoff"]).default("shaping").optional().describe(
13972
13994
  "'shaping': check shaping-phase fields only. 'handoff': check all required fields including buildContract/buildSequence/exclusions/risks. Default: shaping."
13973
13995
  )
@@ -14995,7 +15017,7 @@ Domain: ${domain}
14995
15017
  Existing rules in this domain:
14996
15018
  ${existingContext}
14997
15019
 
14998
- Draft the rule with these fields (do not specify entryId \u2014 Convex assigns sequential IDs automatically, e.g. SOS-7):
15020
+ Draft the rule with these fields (do not specify entryId \u2014 Convex assigns sequential IDs automatically, e.g. <PREFIX>-<n>):
14999
15021
  1. **name**: Concise rule title
15000
15022
  2. **data.description**: What the rule states
15001
15023
  3. **data.rationale**: Why this rule matters
@@ -15268,4 +15290,4 @@ export {
15268
15290
  createProductBrainServer,
15269
15291
  initFeatureFlags
15270
15292
  };
15271
- //# sourceMappingURL=chunk-JJJO3SDX.js.map
15293
+ //# sourceMappingURL=chunk-CIHITLKC.js.map