@productbrain/mcp 0.0.1-beta.1049 → 0.0.1-beta.1058

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.
@@ -1814,7 +1814,7 @@ var captureSchema = z2.object({
1814
1814
  preview: z2.boolean().optional().describe("If true, validates the capture without writing. Returns what would happen. Default false."),
1815
1815
  // WP-318 S2: Pre-write grounding — run link suggestion before creating entry.
1816
1816
  suggestOnly: z2.boolean().optional().describe(
1817
- "If true, runs pre-write grounding (suggestLinksForCapture) and returns a groundingReport WITHOUT creating any entry. Use to preview graph participation before committing. Default false."
1817
+ "If true, runs pre-write grounding (suggestLinksForCapture) and returns a groundingReport WITHOUT creating any entry. Use to preview graph participation before accepting. Default false."
1818
1818
  ),
1819
1819
  // WP-318 S2: Format for groundingReport in response.
1820
1820
  format: z2.enum(["agent", "human"]).optional().describe(
@@ -2799,7 +2799,7 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
2799
2799
  if (finalStatus === "committed") {
2800
2800
  const wasAutoCommitted = autoCommit === void 0 && freshGovernanceMode === "open";
2801
2801
  lines.push("");
2802
- lines.push(`## Committed: ${finalEntryId}`);
2802
+ lines.push(`## Accepted: ${finalEntryId}`);
2803
2803
  if (wasAutoCommitted) {
2804
2804
  lines.push(`**${name}** added to your knowledge base.`);
2805
2805
  } else {
@@ -2811,16 +2811,16 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
2811
2811
  } else if (finalStatus === "proposed") {
2812
2812
  lines.push("");
2813
2813
  lines.push(`## Proposal created: ${finalEntryId}`);
2814
- lines.push(`**${name}** requires consent before it can be committed, so a proposal was created instead of publishing directly.`);
2814
+ lines.push(`**${name}** requires consent before it can be accepted, so a proposal was created instead of accepting directly.`);
2815
2815
  } else if (commitError) {
2816
2816
  lines.push("");
2817
- lines.push("## Commit failed");
2817
+ lines.push("## Accept failed");
2818
2818
  lines.push(`Error: ${commitError}. Entry saved as draft \u2014 use \`commit-entry entryId="${finalEntryId}"\` to promote when ready.`);
2819
2819
  }
2820
2820
  if (shouldAutoCommit && conflictCandidates.length > 0) {
2821
2821
  lines.push("");
2822
2822
  lines.push("## Potential Overlaps");
2823
- lines.push(`Auto-committed with advisory: ${conflictCandidates.length} similar ${conflictCandidates.length === 1 ? "entry" : "entries"} found.`);
2823
+ lines.push(`Auto-accepted with advisory: ${conflictCandidates.length} similar ${conflictCandidates.length === 1 ? "entry" : "entries"} found.`);
2824
2824
  for (const c of conflictCandidates) {
2825
2825
  lines.push(`- \`${c.entryId}\`: ${c.name} [${c.collection}]`);
2826
2826
  }
@@ -2903,7 +2903,7 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
2903
2903
  if (isBetOrGoal && !hasStrategyLink) {
2904
2904
  lines.push("");
2905
2905
  lines.push(
2906
- `**Strategy link:** This ${isBetCapture ? "bet" : "goal"} doesn't connect to any strategy entry. Consider linking before commit. Use \`graph action=suggest entryId="${finalEntryId}"\` to find strategy entries to connect to.`
2906
+ `**Strategy link:** This ${isBetCapture ? "bet" : "goal"} doesn't connect to any strategy entry. Consider linking before accepting. Use \`graph action=suggest entryId="${finalEntryId}"\` to find strategy entries to connect to.`
2907
2907
  );
2908
2908
  await recordSessionActivity({ strategyLinkWarnedForEntryId: internalId });
2909
2909
  }
@@ -2917,7 +2917,7 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
2917
2917
  for (const w of contradictionWarnings) {
2918
2918
  lines.push(`- ${w.name} (${w.collection}, ${w.entryId}) \u2014 has 'governs' relation to ${w.governsCount} entries`);
2919
2919
  }
2920
- lines.push("Run `context action=gather` on these entries before committing.");
2920
+ lines.push("Run `context action=gather` on these entries before accepting.");
2921
2921
  }
2922
2922
  if (entryWarnings.length > 0) {
2923
2923
  lines.push("");
@@ -2947,7 +2947,7 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
2947
2947
  if (userLinkResults.length === 0) {
2948
2948
  lines.push(`1. **Connect it:** \`graph action=suggest entryId="${eid}"\` \u2014 discover what this should link to`);
2949
2949
  }
2950
- lines.push(`${userLinkResults.length === 0 ? "2" : "1"}. **Commit it:** \`commit-entry entryId="${eid}"\` \u2014 promote from draft to SSOT on the Chain`);
2950
+ lines.push(`${userLinkResults.length === 0 ? "2" : "1"}. **Accept it:** \`commit-entry entryId="${eid}"\` \u2014 promote from draft to SSOT on the Chain`);
2951
2951
  if (failedChecks.length > 0) {
2952
2952
  lines.push(`${userLinkResults.length === 0 ? "3" : "2"}. **Improve quality:** \`update-entry entryId="${eid}"\` \u2014 fill missing fields`);
2953
2953
  }
@@ -2973,9 +2973,9 @@ Use \`entries action=get\` to inspect the existing entry, or \`update-entry\` to
2973
2973
  if (userLinkResults.length === 0) {
2974
2974
  next.push({ tool: "graph", description: "Discover links", parameters: { action: "suggest", entryId: finalEntryId } });
2975
2975
  }
2976
- next.push({ tool: "commit-entry", description: "Commit to Chain", parameters: { entryId: finalEntryId } });
2976
+ next.push({ tool: "commit-entry", description: "Accept onto Chain", parameters: { entryId: finalEntryId } });
2977
2977
  }
2978
- const summary = finalStatus === "committed" ? `Captured and committed ${finalEntryId} (${name}) to ${resolvedCollection}. Quality ${quality.score}/10.` : finalStatus === "proposed" ? `Captured ${finalEntryId} (${name}) in ${resolvedCollection} and created a proposal for commit. Quality ${quality.score}/10.` : `Captured ${finalEntryId} (${name}) as draft in ${resolvedCollection}. Quality ${quality.score}/10.`;
2978
+ const summary = finalStatus === "committed" ? `Captured and accepted ${finalEntryId} (${name}) onto ${resolvedCollection}. Quality ${quality.score}/10.` : finalStatus === "proposed" ? `Captured ${finalEntryId} (${name}) in ${resolvedCollection} and created a proposal for acceptance. Quality ${quality.score}/10.` : `Captured ${finalEntryId} (${name}) as draft in ${resolvedCollection}. Quality ${quality.score}/10.`;
2979
2979
  const expectedFields = (col.fields ?? []).map((f) => ({
2980
2980
  key: f.key,
2981
2981
  type: f.type,
@@ -3465,7 +3465,7 @@ _Use \`move-entry\` to correct any misclassified entries._`);
3465
3465
  lines.push(`- **Connect:** Run \`graph action=suggest\` on key entries to build the knowledge graph`);
3466
3466
  }
3467
3467
  if (drafts.length > 0) {
3468
- lines.push(`- **Commit:** Use \`commit-entry\` to promote remaining drafts to SSOT`);
3468
+ lines.push(`- **Accept:** Use \`commit-entry\` to promote remaining drafts to SSOT`);
3469
3469
  }
3470
3470
  if (skippedLowConfidence.length > 0) {
3471
3471
  lines.push(`- **Classify:** Re-capture ${skippedLowConfidence.length} skipped entries with explicit collections`);
@@ -3484,7 +3484,7 @@ _Use \`move-entry\` to correct any misclassified entries._`);
3484
3484
  next.push({ tool: "graph", description: "Discover connections", parameters: { action: "suggest", entryId: created[0].entryId } });
3485
3485
  }
3486
3486
  if (firstDraft) {
3487
- next.push({ tool: "commit-entry", description: "Commit first draft", parameters: { entryId: firstDraft.entryId } });
3487
+ next.push({ tool: "commit-entry", description: "Accept first draft", parameters: { entryId: firstDraft.entryId } });
3488
3488
  }
3489
3489
  if (skippedLowConfidence.length > 0) {
3490
3490
  next.push({ tool: "capture", description: `Capture skipped entry with explicit collection`, parameters: { name: skippedLowConfidence[0].name, collection: skippedLowConfidence[0].suggestedCollection ?? "" } });
@@ -3865,9 +3865,9 @@ var getHistorySchema = z3.object({
3865
3865
  entryId: z3.string().describe("Entry ID, e.g. 'T-SUPPLIER', '<PREFIX>-<n>'")
3866
3866
  });
3867
3867
  var commitEntrySchema = z3.object({
3868
- entryId: z3.string().describe("Entry ID to commit, e.g. 'TEN-abc123', '<PREFIX>-<n>'"),
3868
+ entryId: z3.string().describe("Entry ID to accept, e.g. 'TEN-abc123', '<PREFIX>-<n>'"),
3869
3869
  // WP-316 S3: Preview gate — dry-run mode. Returns would-succeed result, no DB writes.
3870
- preview: z3.boolean().optional().describe("If true, validates the commit without writing. Returns what would happen. Default false.")
3870
+ preview: z3.boolean().optional().describe("If true, validates the accept without writing. Returns what would happen. Default false.")
3871
3871
  });
3872
3872
  function registerKnowledgeTools(server) {
3873
3873
  const updateTool = server.registerTool(
@@ -3952,7 +3952,7 @@ function registerKnowledgeTools(server) {
3952
3952
  const summary = `Updated ${entryId} \u2014 ${versionMode}. Fields: ${fieldsProvided.join(", ") || "none"}.`;
3953
3953
  const next = [
3954
3954
  { tool: "entries", description: "View updated entry", parameters: { action: "get", entryId } },
3955
- { tool: "commit-entry", description: "Commit to Chain", parameters: { entryId } }
3955
+ { tool: "commit-entry", description: "Accept onto Chain", parameters: { entryId } }
3956
3956
  ];
3957
3957
  return {
3958
3958
  content: [{ type: "text", text: responseLines.join("\n") }],
@@ -4014,8 +4014,8 @@ ${formatted}` }],
4014
4014
  const commitTool = server.registerTool(
4015
4015
  "commit-entry",
4016
4016
  {
4017
- title: "Commit Entry to Chain",
4018
- description: "Promote a draft entry to committed status (SSOT on the Chain). Runs the staging-grade semantic conflict detector before committing and blocks high-confidence contradictions. Lower-confidence conflicts remain advisory.\n\nUse after capture + graph action=suggest + relations action=create to finalize an entry.",
4017
+ title: "Accept Entry onto Chain",
4018
+ description: "Promote a draft entry to accepted status (SSOT on the Chain). Runs the staging-grade semantic conflict detector before accepting and blocks high-confidence contradictions. Lower-confidence conflicts remain advisory.\n\nUse after capture + graph action=suggest + relations action=create to finalize an entry.",
4019
4019
  inputSchema: commitEntrySchema,
4020
4020
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false }
4021
4021
  },
@@ -4048,15 +4048,15 @@ ${formatted}` }],
4048
4048
  const conflictLines = preflight.blockingContradictions.map((c) => `- ${c.chainEntryName} (${c.chainEntryId}) \u2014 ${c.explanation}`).join("\n");
4049
4049
  return failureResult(
4050
4050
  [
4051
- `# Commit blocked: contradiction detected`,
4051
+ `# Accept blocked: contradiction detected`,
4052
4052
  "",
4053
- `\`${entryId}\` matches ${preflight.blockingContradictions.length} high-confidence contradiction(s). Resolve the conflict before committing.`,
4053
+ `\`${entryId}\` matches ${preflight.blockingContradictions.length} high-confidence contradiction(s). Resolve the conflict before accepting.`,
4054
4054
  "",
4055
4055
  conflictLines
4056
4056
  ].join("\n"),
4057
4057
  "CONTRADICTION_BLOCKED",
4058
4058
  `${preflight.blockingContradictions.length} high-confidence contradiction(s) found.`,
4059
- "Review the conflicting entry or entries before retrying the commit.",
4059
+ "Review the conflicting entry or entries before retrying the accept.",
4060
4060
  void 0,
4061
4061
  {
4062
4062
  entryId,
@@ -4104,7 +4104,7 @@ ${formatted}` }],
4104
4104
  }
4105
4105
  if (result?.preview) {
4106
4106
  const previewEnvelope = success(
4107
- `Preview: would commit ${entryId} \u2014 no DB writes`,
4107
+ `Preview: would accept ${entryId} \u2014 no DB writes`,
4108
4108
  {
4109
4109
  entryId,
4110
4110
  name: entry.name,
@@ -4112,17 +4112,17 @@ ${formatted}` }],
4112
4112
  currentStatus: result.currentStatus,
4113
4113
  wouldSetStatus: result.wouldSetStatus
4114
4114
  },
4115
- [{ tool: "commit-entry", description: "Commit for real", parameters: { entryId } }]
4115
+ [{ tool: "commit-entry", description: "Accept for real", parameters: { entryId } }]
4116
4116
  );
4117
4117
  if (result.contract) {
4118
4118
  previewEnvelope.contract = result.contract;
4119
4119
  }
4120
4120
  return {
4121
- content: [{ type: "text", text: `# Preview: would commit ${entryId}
4121
+ content: [{ type: "text", text: `# Preview: would accept ${entryId}
4122
4122
 
4123
4123
  Current status: \`${result.currentStatus}\` \u2192 would become \`${result.wouldSetStatus}\`.
4124
4124
 
4125
- No DB writes \u2014 call without \`preview:true\` to commit for real.` }],
4125
+ No DB writes \u2014 call without \`preview:true\` to accept for real.` }],
4126
4126
  structuredContent: previewEnvelope
4127
4127
  };
4128
4128
  }
@@ -4143,14 +4143,14 @@ No DB writes \u2014 call without \`preview:true\` to commit for real.` }],
4143
4143
  if (isProposal) {
4144
4144
  lines = [
4145
4145
  `# Proposal created: ${result.entryId ?? entryId}`,
4146
- `**${result.name ?? entry.name}** \u2014 commit requires consent. A proposal was created instead of committing directly.`,
4146
+ `**${result.name ?? entry.name}** \u2014 accepting requires consent. A proposal was created instead of accepting directly.`,
4147
4147
  `**Workspace:** ${wsCtx.workspaceSlug} (${wsCtx.workspaceId})`,
4148
4148
  "",
4149
- result.existing ? "An open proposal for this entry already exists." : "Affected owners will be notified. The entry will be committed when the consent window expires with no objections, or when all owners approve."
4149
+ result.existing ? "An open proposal for this entry already exists." : "Affected owners will be notified. The entry will be accepted when the consent window expires with no objections, or when all owners approve."
4150
4150
  ];
4151
4151
  } else {
4152
4152
  lines = [
4153
- `# Committed: ${entryId}`,
4153
+ `# Accepted: ${entryId}`,
4154
4154
  `**${entry.name}** promoted to SSOT on the Chain.`,
4155
4155
  `**Workspace:** ${wsCtx.workspaceSlug} (${wsCtx.workspaceId})`
4156
4156
  ];
@@ -4161,7 +4161,7 @@ No DB writes \u2014 call without \`preview:true\` to commit for real.` }],
4161
4161
  for (const w of advisoryWarnings) {
4162
4162
  lines.push(w.kind === "semantic" ? `- ${w.name} (${w.entryId}) \u2014 ${w.explanation}` : `- ${w.name} (${w.collection}, ${w.entryId}) \u2014 has 'governs' relation to ${w.governsCount} entries`);
4163
4163
  }
4164
- lines.push(preflight.source === "semantic" ? "Run context action=gather on the conflicting entries before committing." : "Run context action=gather on these entries before committing.");
4164
+ lines.push(preflight.source === "semantic" ? "Run context action=gather on the conflicting entries before accepting." : "Run context action=gather on these entries before accepting.");
4165
4165
  }
4166
4166
  if (coachingResult?.verdict) {
4167
4167
  try {
@@ -4188,7 +4188,7 @@ No DB writes \u2014 call without \`preview:true\` to commit for real.` }],
4188
4188
  lines.push(coaching);
4189
4189
  if (!coachingResult.verdict.passed && coachingResult.verdict.tier === "assertive") {
4190
4190
  lines.push("");
4191
- lines.push("_This entry was committed despite quality concerns. The override has been recorded._");
4191
+ lines.push("_This entry was accepted despite quality concerns. The override has been recorded._");
4192
4192
  }
4193
4193
  }
4194
4194
  }
@@ -4199,7 +4199,7 @@ No DB writes \u2014 call without \`preview:true\` to commit for real.` }],
4199
4199
  for (const w of guidanceWarnings) {
4200
4200
  lines.push(`- **${w.field}:** ${w.message}`);
4201
4201
  }
4202
- lines.push(`_These are advisory \u2014 the entry was committed. Use \`update-entry entryId="${entryId}"\` to address them._`);
4202
+ lines.push(`_These are advisory \u2014 the entry was accepted. Use \`update-entry entryId="${entryId}"\` to address them._`);
4203
4203
  const uniqueTypes = [...new Set(guidanceWarnings.map((w) => w.warningType))];
4204
4204
  trackFieldQualityWarning(wsCtx.workspaceId, {
4205
4205
  warning_count: guidanceWarnings.length,
@@ -4229,9 +4229,9 @@ No DB writes \u2014 call without \`preview:true\` to commit for real.` }],
4229
4229
  { tool: "entries", description: "View entry", parameters: { action: "get", entryId } }
4230
4230
  ] : [
4231
4231
  { tool: "graph", description: "Discover connections", parameters: { action: "suggest", entryId } },
4232
- { tool: "entries", description: "View committed entry", parameters: { action: "get", entryId } }
4232
+ { tool: "entries", description: "View accepted entry", parameters: { action: "get", entryId } }
4233
4233
  ];
4234
- const summary = isProposal ? `Proposal created for ${entryId} (${entry.name}). Awaiting consent.` : `Committed ${entryId} (${entry.name}) to the Chain.`;
4234
+ const summary = isProposal ? `Proposal created for ${entryId} (${entry.name}). Awaiting consent.` : `Accepted ${entryId} (${entry.name}) onto the Chain.`;
4235
4235
  const commitSuccessEnvelope = success(
4236
4236
  summary,
4237
4237
  {
@@ -6418,7 +6418,7 @@ import { z as z8 } from "zod";
6418
6418
  var COLLECTIONS_ACTIONS = ["list", "create", "update", "describe", "audit", "export"];
6419
6419
  var qualityCriterionSchema = z8.object({
6420
6420
  field: z8.string().describe("Entry data field key this criterion applies to, e.g. 'description', 'owner'"),
6421
- rule: z8.enum(["required", "min_length", "pattern"]).describe("'required': field must be non-empty (blocks commit). 'min_length': minimum string length (warns). 'pattern': regex match (warns)."),
6421
+ rule: z8.enum(["required", "min_length", "pattern"]).describe("'required': field must be non-empty (blocks accept). 'min_length': minimum string length (warns). 'pattern': regex match (warns)."),
6422
6422
  value: z8.string().optional().describe("For min_length: the minimum length as a string integer. For pattern: the regex string. Unused for 'required'.")
6423
6423
  });
6424
6424
  var fieldSchema = z8.object({
@@ -6467,7 +6467,7 @@ var collectionsSchema = z8.object({
6467
6467
  classificationPriority: z8.number().optional().describe("Classifier priority (1\u20139, lower = higher priority). Used with classificationCheck to order the decision tree."),
6468
6468
  // FEAT-301 Slice 2: quality gate criteria and usage guidance.
6469
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."),
6470
+ qualityCriteria: z8.array(qualityCriterionSchema).optional().describe("Per-collection accept gate rules. 'required' rule hard-blocks accepts on empty fields; 'min_length'/'pattern' rules warn. Pass an empty array to clear all criteria."),
6471
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.")
6472
6472
  });
6473
6473
  function registerCollectionsTools(server) {
@@ -7474,7 +7474,7 @@ function renderPersistentGapOffers(gaps) {
7474
7474
  }
7475
7475
  lines.push("");
7476
7476
  lines.push(
7477
- '_Say "capture these as tensions" to commit them to the Chain, or skip to continue._'
7477
+ '_Say "capture these as tensions" to accept them onto the Chain, or skip to continue._'
7478
7478
  );
7479
7479
  lines.push("");
7480
7480
  return lines;
@@ -7691,7 +7691,7 @@ async function runWrapupReview() {
7691
7691
  const draftIds = data.drafts.map((d) => `\`${d.entryId}\``).join(", ");
7692
7692
  lines.push("### Actions", "");
7693
7693
  lines.push(`Uncommitted: ${draftIds}`);
7694
- lines.push("- **Commit all:** call `session-wrapup` with action `commit-all`");
7694
+ lines.push("- **Accept all:** call `session-wrapup` with action `commit-all`");
7695
7695
  lines.push("- **Skip:** call `session action=close` \u2014 drafts remain for next session's orient recovery.");
7696
7696
  }
7697
7697
  if (data.captureAudit) {
@@ -7837,14 +7837,14 @@ async function runWrapupCommitAll(data, cachedSuggestions) {
7837
7837
  const lines = [
7838
7838
  "## Wrapup Complete",
7839
7839
  "",
7840
- `**${committed}** drafts committed, **${proposalsCreated}** proposals created, **${linksCreated}** links created.`
7840
+ `**${committed}** drafts accepted, **${proposalsCreated}** proposals created, **${linksCreated}** links created.`
7841
7841
  ];
7842
7842
  if (linksFailed > 0) {
7843
7843
  lines.push(`**${linksFailed}** link${linksFailed === 1 ? "" : "s"} failed to create.`);
7844
7844
  }
7845
7845
  if (failed.length > 0) {
7846
7846
  lines.push("");
7847
- lines.push("### Failed to commit");
7847
+ lines.push("### Failed to accept");
7848
7848
  for (const f of failed) {
7849
7849
  lines.push(`- \`${f.entryId}\`: ${f.error}`);
7850
7850
  }
@@ -7867,10 +7867,10 @@ async function runWrapupCommitAll(data, cachedSuggestions) {
7867
7867
  failed: failed.length
7868
7868
  };
7869
7869
  }
7870
- var WRAPUP_TOOL_DESCRIPTION = "Review your session before closing. Shows uncommitted drafts with quality scores, suggests links for low-connection entries, and offers batch commit. Run this before `session action=close` to ensure nothing is left behind. If you call `session action=close` without running wrapup first, you'll get a review-only nudge.";
7870
+ var WRAPUP_TOOL_DESCRIPTION = "Review your session before closing. Shows uncommitted drafts with quality scores, suggests links for low-connection entries, and offers batch accept. Run this before `session action=close` to ensure nothing is left behind. If you call `session action=close` without running wrapup first, you'll get a review-only nudge.";
7871
7871
  var wrapupSchema = z10.object({
7872
7872
  action: z10.enum(["review", "commit-all"]).optional().describe(
7873
- "Action to perform. 'review' (default) shows the wrapup summary. 'commit-all' commits all uncommitted drafts and creates suggested links."
7873
+ "Action to perform. 'review' (default) shows the wrapup summary. 'commit-all' accepts all uncommitted drafts and creates suggested links."
7874
7874
  )
7875
7875
  });
7876
7876
  function registerWrapupTools(server) {
@@ -7902,7 +7902,7 @@ function registerWrapupTools(server) {
7902
7902
  })).data;
7903
7903
  }
7904
7904
  if (data2.drafts.length === 0) {
7905
- return failureResult("No uncommitted drafts to commit.", "NOT_FOUND", "No uncommitted drafts to commit.", "Nothing to commit.");
7905
+ return failureResult("No uncommitted drafts to accept.", "NOT_FOUND", "No uncommitted drafts to accept.", "Nothing to accept.");
7906
7906
  }
7907
7907
  const result = await runWrapupCommitAll(data2, useCachedReview ? lastReviewSuggestions : []);
7908
7908
  lastReviewData = null;
@@ -7911,7 +7911,7 @@ function registerWrapupTools(server) {
7911
7911
  const linkWarnSuffix = result.linksFailed > 0 ? `, ${result.linksFailed} link(s) failed` : "";
7912
7912
  return successResult(
7913
7913
  result.text,
7914
- `Wrapup processed: ${result.committed} committed, ${result.proposalsCreated} proposals, ${result.linksCreated} links${linkWarnSuffix}.`,
7914
+ `Wrapup processed: ${result.committed} accepted, ${result.proposalsCreated} proposals, ${result.linksCreated} links${linkWarnSuffix}.`,
7915
7915
  {
7916
7916
  committed: result.committed,
7917
7917
  proposalsCreated: result.proposalsCreated,
@@ -7931,7 +7931,7 @@ ${text}` : text;
7931
7931
  if (failureCode) {
7932
7932
  return failureResult(fullText, failureCode, text);
7933
7933
  }
7934
- const localNext = data.drafts.length > 0 ? [{ tool: "session-wrapup", description: "Commit all drafts", parameters: { action: "commit-all" } }] : void 0;
7934
+ const localNext = data.drafts.length > 0 ? [{ tool: "session-wrapup", description: "Accept all drafts", parameters: { action: "commit-all" } }] : void 0;
7935
7935
  const next = kernelNext || localNext;
7936
7936
  const gapsSummary = gapCount ? `, ${gapCount} knowledge gaps detected` : "";
7937
7937
  const coherenceSummary = coherenceVerdict ? `, coherence: ${coherenceVerdict}` : "";
@@ -8479,7 +8479,7 @@ function compileWorkflowDefinition(descriptor) {
8479
8479
  var RETRO_WORKFLOW_DESCRIPTOR = {
8480
8480
  id: "retro",
8481
8481
  name: "Retrospective",
8482
- shortDescription: "Structured team retrospective \u2014 reflect, surface patterns, commit to actions. Commits a decision entry to the Chain.",
8482
+ shortDescription: "Structured team retrospective \u2014 reflect, surface patterns, commit to actions. Accepts a decision entry onto the Chain.",
8483
8483
  template: {
8484
8484
  slug: "retro",
8485
8485
  name: "Retrospective"
@@ -8621,7 +8621,7 @@ Create a Cursor Plan with these rounds as tasks. Mark each in_progress as you en
8621
8621
  label: "Close & Capture",
8622
8622
  type: "close",
8623
8623
  instruction: "One last thing \u2014 in one sentence, what's the single most important thing you're taking away from this retro?",
8624
- facilitatorGuidance: "Keep it brief. One sentence reflection. Then summarize the entire retro: scope, key wins, key pain points, patterns identified, actions committed. Finalize the durable run through `workflows action=checkpoint` with `isFinal=true` so the retro draft record is created via the workflow substrate. Then ask if they want to commit that draft to the Chain. Thank them for the retro.",
8624
+ facilitatorGuidance: "Keep it brief. One sentence reflection. Then summarize the entire retro: scope, key wins, key pain points, patterns identified, actions committed. Finalize the durable run through `workflows action=checkpoint` with `isFinal=true` so the retro draft record is created via the workflow substrate. Then ask if they want to accept that draft onto the Chain. Thank them for the retro.",
8625
8625
  outputSchema: {
8626
8626
  field: "takeaway",
8627
8627
  description: "Single-sentence takeaway",
@@ -8653,7 +8653,7 @@ Create a Cursor Plan with these rounds as tasks. Mark each in_progress as you en
8653
8653
  2. **AskQuestion not available**: Fall back to numbered options in plain text. "Reply with 1, 2, or 3."
8654
8654
  3. **Plan creation fails**: Continue without the Plan. The conversation IS the record.
8655
8655
  4. **Participant goes off-topic**: Gently redirect: "That's valuable \u2014 let's capture it. For now, let's stay with [current round]."
8656
- 5. **Participant wants to stop**: Respect it. Summarize what you have so far. Offer to commit partial results to the Chain.
8656
+ 5. **Participant wants to stop**: Respect it. Summarize what you have so far. Offer to accept partial results onto the Chain.
8657
8657
  6. **Checkpoint failed (e.g. 400, superseded session)**: Say so in one line. **Start or refresh session** (\`session action=start\` / \`pb session start\`), then \`workflows action=get-run\` with the \`runId\` you were given. If the run is **incomplete**, retry \`checkpoint\` with that \`runId\`. If the run is **complete** or **missing**, treat server state as unreliable: run \`workflows action=start workflowId=retro restart=true\` and **paste the Facilitated workflow handoff block** from the prior chat into round 1 so scope and completed rounds are explicit \u2014 do not assume partial server progress exists.
8658
8658
  7. **Cross-agent resume (default expectation)**: Receiving agent reads the handoff block first. Prefer \`get-run\` to verify status; otherwise **restart** and continue from the **next round** named in the handoff. The conversation + handoff block are valid SSOT when ChainWork did not persist checkpoints (TEN-917).
8659
8659
 
@@ -8671,7 +8671,7 @@ var SHAPE_WORKFLOW_DESCRIPTOR = {
8671
8671
  facilitatorPreamble: `You are now in **Shaping Mode**. The shaping skill owns the facilitation loop end-to-end \u2014 read it for scoring rubrics, investigation patterns, and the capture flow.
8672
8672
 
8673
8673
  Use \`capture\` to create constellation entries (elements, risks, decisions, glossary terms) linked to the bet.
8674
- Use \`facilitate action=commit-constellation\` to atomically commit the bet and all linked entries when the shape is complete.
8674
+ Use \`facilitate action=commit-constellation\` to atomically accept the bet and all linked entries when the shape is complete.
8675
8675
  Use \`workflows action=checkpoint\` after each round to persist progress to the durable run.`,
8676
8676
  rounds: [
8677
8677
  {
@@ -8779,13 +8779,13 @@ Use \`workflows action=checkpoint\` after each round to persist progress to the
8779
8779
  {
8780
8780
  id: "capture",
8781
8781
  num: "06",
8782
- label: "Capture & Commit",
8782
+ label: "Capture & Accept",
8783
8783
  type: "close",
8784
- instruction: "Capture the pitch to the Chain. Commit draft entries. Connect the constellation.",
8785
- facilitatorGuidance: "List all draft entries created during shaping (elements, risks, decisions, glossary terms). Ask the user to confirm: 'Ready to commit these to the Chain?' Call `facilitate action=commit-constellation` to atomically commit the bet and all linked entries. Then `graph action=suggest entryId='<betId>'` to discover connections. Create the top 3 suggested relations via `relations action=batch-create`. Thank the user. State: what was shaped, how many constellation entries captured, what the implementer inherits.",
8784
+ instruction: "Capture the pitch to the Chain. Accept draft entries. Connect the constellation.",
8785
+ facilitatorGuidance: "List all draft entries created during shaping (elements, risks, decisions, glossary terms). Ask the user to confirm: 'Ready to accept these onto the Chain?' Call `facilitate action=commit-constellation` to atomically accept the bet and all linked entries. Then `graph action=suggest entryId='<betId>'` to discover connections. Create the top 3 suggested relations via `relations action=batch-create`. Thank the user. State: what was shaped, how many constellation entries captured, what the implementer inherits.",
8786
8786
  outputSchema: {
8787
8787
  field: "capture",
8788
- description: "Final capture summary \u2014 entries committed, relations created",
8788
+ description: "Final capture summary \u2014 entries accepted, relations created",
8789
8789
  format: "structured"
8790
8790
  },
8791
8791
  kbCollection: "work-packages",
@@ -8837,14 +8837,14 @@ Use \`workflows action=checkpoint\` after each round to persist progress to the
8837
8837
  2. **Chain capture failure (duplicate)**: The tool handles duplicates by linking existing entries. If it still fails, note the entry name and move on \u2014 capture manually after the session.
8838
8838
  3. **Score seems wrong**: Scoring is local to the shaping skill \u2014 re-apply the scoring rubric from the shaping SKILL.md against the conversation context. Scores are heuristic; the agent's judgment matters more than the number.
8839
8839
  4. **User wants to stop mid-session**: Respect it. Everything captured so far is on the Chain as drafts. Use \`facilitate action=resume\` to pick up later.
8840
- 5. **MCP server unreachable**: Run the shaping from conversation knowledge. Skip chain capture. Say: "Product Brain is temporarily unavailable \u2014 I'll shape from our conversation and we can commit afterward."
8840
+ 5. **MCP server unreachable**: Run the shaping from conversation knowledge. Skip chain capture. Say: "Product Brain is temporarily unavailable \u2014 I'll shape from our conversation and we can accept afterward."
8841
8841
 
8842
8842
  The shaping must never fail silently. Always communicate state.`
8843
8843
  };
8844
8844
  var IMPLEMENTATION_REVIEW_WORKFLOW_DESCRIPTOR = {
8845
8845
  id: "implementation-review",
8846
8846
  name: "Implementation Review",
8847
- shortDescription: "Fix-as-you-go implementation review: finds issues, fixes them immediately, verifies, then proceeds. Three expert lenses (Staff+ Engineer, CTO, Chain Coherence). Spawns sub-agents for code and test review. Extracts learnings into standards/rules. Ends with BET/chain IDs. Commits an insight to the Chain.",
8847
+ shortDescription: "Fix-as-you-go implementation review: finds issues, fixes them immediately, verifies, then proceeds. Three expert lenses (Staff+ Engineer, CTO, Chain Coherence). Spawns sub-agents for code and test review. Extracts learnings into standards/rules. Ends with BET/chain IDs. Accepts an insight onto the Chain.",
8848
8848
  template: {
8849
8849
  slug: "implementation-review",
8850
8850
  name: "Implementation Review"
@@ -9099,10 +9099,10 @@ var PROCESS_CHANGE_WORKFLOW_DESCRIPTOR = {
9099
9099
  label: "Capture & Close",
9100
9100
  type: "close",
9101
9101
  instruction: "Capture to the Chain. Link to related entries. Confirm with the user.",
9102
- facilitatorGuidance: "Finalize through workflows action=checkpoint with isFinal=true, passing a summaryName when you have a clean title. The workflow substrate will create the primary record as a draft and attach it to the durable run. After finalization, call graph action=suggest to find connections. Create the top 2-3 relevant relations. Show the user what was captured: entry ID, collection it landed in, relations created. Ask if they want to commit now or leave as draft. If they confirm, commit-entry. If there are stale entries to reconfirm, mention them. Thank the user briefly and exit \u2014 don't linger.",
9102
+ facilitatorGuidance: "Finalize through workflows action=checkpoint with isFinal=true, passing a summaryName when you have a clean title. The workflow substrate will create the primary record as a draft and attach it to the durable run. After finalization, call graph action=suggest to find connections. Create the top 2-3 relevant relations. Show the user what was captured: entry ID, collection it landed in, relations created. Ask if they want to accept now or leave as draft. If they confirm, commit-entry. If there are stale entries to reconfirm, mention them. Thank the user briefly and exit \u2014 don't linger.",
9103
9103
  outputSchema: {
9104
9104
  field: "capture",
9105
- description: "Entry captured, relations created, commit status",
9105
+ description: "Entry captured, relations created, accept status",
9106
9106
  format: "structured"
9107
9107
  },
9108
9108
  maxDurationHint: "1 min"
@@ -9128,7 +9128,7 @@ var PROCESS_CHANGE_WORKFLOW_DESCRIPTOR = {
9128
9128
  },
9129
9129
  errorRecovery: `If anything goes wrong during change processing:
9130
9130
 
9131
- 1. **Tool failure**: Explain briefly. Capture in the conversation. Offer to retry or commit manually later.
9131
+ 1. **Tool failure**: Explain briefly. Capture in the conversation. Offer to retry or accept manually later.
9132
9132
  2. **Classifier misroutes**: Use update-entry to move the entry to the correct collection. Mention this to the user.
9133
9133
  3. **No related entries found**: That's fine \u2014 not every change connects to existing knowledge. Capture it standalone.
9134
9134
  4. **MCP unreachable**: Note the change in conversation. Offer to capture when PB is back.
@@ -9751,7 +9751,7 @@ This checkpoint was NOT saved. The conversation context is preserved \u2014 cont
9751
9751
  } catch (err) {
9752
9752
  const msg = err instanceof Error ? err.message : String(err);
9753
9753
  lines.push(
9754
- `**Chain commit failed**: ${msg}`,
9754
+ `**Chain accept failed**: ${msg}`,
9755
9755
  "",
9756
9756
  `The workflow output is preserved in this conversation. `,
9757
9757
  `You can manually create the entry later using \`capture\` with:`,
@@ -9763,7 +9763,7 @@ This checkpoint was NOT saved. The conversation context is preserved \u2014 cont
9763
9763
  content: [{ type: "text", text: lines.join("\n") }],
9764
9764
  structuredContent: failure(
9765
9765
  "BACKEND_ERROR",
9766
- `Chain commit failed: ${msg}.`,
9766
+ `Chain accept failed: ${msg}.`,
9767
9767
  "Capture manually with the capture tool.",
9768
9768
  [{ tool: "capture", description: "Capture manually", parameters: {} }]
9769
9769
  )
@@ -9824,7 +9824,7 @@ This checkpoint was NOT saved. The conversation context is preserved \u2014 cont
9824
9824
  } else {
9825
9825
  lines.push(
9826
9826
  "",
9827
- `**All rounds complete.** Call this tool again with \`isFinal: true\` to commit to the Chain.`
9827
+ `**All rounds complete.** Call this tool again with \`isFinal: true\` to accept onto the Chain.`
9828
9828
  );
9829
9829
  }
9830
9830
  return {
@@ -9975,7 +9975,7 @@ import { z as z14 } from "zod";
9975
9975
  var FACILITATE_ACTIONS = ["resume", "commit-constellation"];
9976
9976
  var facilitateSchema = z14.object({
9977
9977
  action: z14.enum(FACILITATE_ACTIONS).describe(
9978
- "'resume': load session state from an existing bet entry. 'commit-constellation': atomically commit a bet and all its linked draft entries in one call. Requires betEntryId."
9978
+ "'resume': load session state from an existing bet entry. 'commit-constellation': atomically accept a bet and all its linked draft entries in one call. Requires betEntryId."
9979
9979
  ),
9980
9980
  betEntryId: z14.string().optional().describe("Bet entry ID. Required for both actions."),
9981
9981
  operationId: z14.string().optional().describe("Optional idempotency key for commit-constellation retries.")
@@ -9988,8 +9988,8 @@ function registerFacilitateTools(server) {
9988
9988
  server.registerTool(
9989
9989
  "facilitate",
9990
9990
  {
9991
- title: "Facilitate \u2014 Session Resume & Constellation Commit",
9992
- description: "Session state loading and atomic constellation commit for shaped bets.\n\n- **resume**: Load session state (bet data, constellation, drafts) from an existing bet entry.\n- **commit-constellation**: Atomically commit a bet and all its linked draft entries (features, tensions, decisions) in one call. Validates strategy link and required fields before committing anything. Replaces sequential commit-entry calls.\n\nScoring, coaching, and the facilitation loop are handled by the agent-side shaping skill.",
9991
+ title: "Facilitate \u2014 Session Resume & Constellation Accept",
9992
+ description: "Session state loading and atomic constellation accept for shaped bets.\n\n- **resume**: Load session state (bet data, constellation, drafts) from an existing bet entry.\n- **commit-constellation**: Atomically accept a bet and all its linked draft entries (features, tensions, decisions) in one call. Validates strategy link and required fields before accepting anything. Replaces sequential commit-entry calls.\n\nScoring, coaching, and the facilitation loop are handled by the agent-side shaping skill.",
9993
9993
  inputSchema: facilitateSchema,
9994
9994
  annotations: {
9995
9995
  readOnlyHint: false,
@@ -10095,9 +10095,9 @@ async function handleCommitConstellation(args) {
10095
10095
  content: [{
10096
10096
  type: "text",
10097
10097
  text: [
10098
- `# Commit blocked: contradiction detected`,
10098
+ `# Accept blocked: contradiction detected`,
10099
10099
  "",
10100
- `\`${betId}\` matches ${preflight.blockingContradictions.length} high-confidence contradiction(s). Resolve the conflict before committing the constellation.`,
10100
+ `\`${betId}\` matches ${preflight.blockingContradictions.length} high-confidence contradiction(s). Resolve the conflict before accepting the constellation.`,
10101
10101
  "",
10102
10102
  conflictLines
10103
10103
  ].join("\n")
@@ -10105,7 +10105,7 @@ async function handleCommitConstellation(args) {
10105
10105
  structuredContent: failure(
10106
10106
  "CONTRADICTION_BLOCKED",
10107
10107
  `${preflight.blockingContradictions.length} high-confidence contradiction(s) found.`,
10108
- "Review the conflicting entry or entries before retrying the commit.",
10108
+ "Review the conflicting entry or entries before retrying the accept.",
10109
10109
  void 0,
10110
10110
  {
10111
10111
  betEntryId: betId,
@@ -10135,16 +10135,16 @@ async function handleCommitConstellation(args) {
10135
10135
  return {
10136
10136
  content: [{
10137
10137
  type: "text",
10138
- text: `# Bet commit failed
10138
+ text: `# Bet accept failed
10139
10139
 
10140
- \`${betId}\` could not be committed: ${msg}
10140
+ \`${betId}\` could not be accepted: ${msg}
10141
10141
 
10142
- No constellation entries were committed.`
10142
+ No constellation entries were accepted.`
10143
10143
  }],
10144
10144
  structuredContent: failure(
10145
10145
  "BACKEND_ERROR",
10146
- `Bet commit failed: ${msg}`,
10147
- "Retry or check for commit blockers.",
10146
+ `Bet accept failed: ${msg}`,
10147
+ "Retry or check for accept blockers.",
10148
10148
  [{ tool: "facilitate", description: "Resume session", parameters: { action: "resume", betEntryId: betId } }],
10149
10149
  diagnostics
10150
10150
  )
@@ -10165,15 +10165,15 @@ No constellation entries were committed.`
10165
10165
  lines.push(
10166
10166
  hasIssues ? `# Proposal created with issues` : `# Proposal created`,
10167
10167
  "",
10168
- `Workspace uses consent-based governance. \`${betId}\` was submitted as a proposal \u2014 it will be committed when approved.`,
10169
- `No linked entries were committed because the bet itself is still awaiting approval.`
10168
+ `Workspace uses consent-based governance. \`${betId}\` was submitted as a proposal \u2014 it will be accepted when approved.`,
10169
+ `No linked entries were accepted because the bet itself is still awaiting approval.`
10170
10170
  );
10171
10171
  } else {
10172
10172
  lines.push(
10173
- hasIssues ? `# Published with issues` : `# Published`,
10173
+ hasIssues ? `# Accepted with issues` : `# Accepted`,
10174
10174
  "",
10175
- `**${result.committedIds?.length ?? 0} entries** committed to the Chain, **${result.totalRelations} connections** preserved.`,
10176
- hasIssues ? `\`${betId}\` was partially committed. Review conflicts/failed entries below before considering the constellation complete.` : `\`${betId}\` and its full constellation are now source of truth.`
10175
+ `**${result.committedIds?.length ?? 0} entries** accepted onto the Chain, **${result.totalRelations} connections** preserved.`,
10176
+ hasIssues ? `\`${betId}\` was partially accepted. Review conflicts/failed entries below before considering the constellation complete.` : `\`${betId}\` and its full constellation are now source of truth.`
10177
10177
  );
10178
10178
  }
10179
10179
  if (preflight.source === "semantic" && preflight.conflicts.length > 0) {
@@ -10192,13 +10192,13 @@ No constellation entries were committed.`
10192
10192
  );
10193
10193
  }
10194
10194
  if ((result.committedIds?.length ?? 0) > 0) {
10195
- lines.push("", `**Committed:** ${result.committedIds.join(", ")}`);
10195
+ lines.push("", `**Accepted:** ${result.committedIds.join(", ")}`);
10196
10196
  }
10197
10197
  if ((result.alreadyCommittedIds?.length ?? 0) > 0) {
10198
- lines.push("", `**Already committed:** ${result.alreadyCommittedIds.join(", ")}`);
10198
+ lines.push("", `**Already accepted:** ${result.alreadyCommittedIds.join(", ")}`);
10199
10199
  }
10200
10200
  if ((result.proposedIds?.length ?? 0) > 0) {
10201
- lines.push("", `**Proposed (not yet committed):** ${result.proposedIds.join(", ")}`);
10201
+ lines.push("", `**Proposed (not yet accepted):** ${result.proposedIds.join(", ")}`);
10202
10202
  }
10203
10203
  if ((result.conflictIds?.length ?? 0) > 0) {
10204
10204
  lines.push("", `**${result.conflictIds.length} conflicts:**`);
@@ -10559,7 +10559,7 @@ function registerVerifyTools(server) {
10559
10559
  "verify-entry",
10560
10560
  {
10561
10561
  title: "Verify Entry",
10562
- description: "Mark a single entry as verified. Required for agent-origin entries before they can be committed. Unlike the 'verify' tool (which scans code mappings against the codebase), this tool only sets verificationStatus to 'verified'. Works in any context \u2014 no codebase required.",
10562
+ description: "Mark a single entry as verified. Required for agent-origin entries before they can be accepted. Unlike the 'verify' tool (which scans code mappings against the codebase), this tool only sets verificationStatus to 'verified'. Works in any context \u2014 no codebase required.",
10563
10563
  inputSchema: verifyEntrySchema,
10564
10564
  annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false }
10565
10565
  },
@@ -11203,7 +11203,7 @@ async function buildOrientResponse(wsCtx, agentSessionId, errors, task) {
11203
11203
  const isLowReadiness = readiness !== null && readiness.score < 50;
11204
11204
  const isHighReadiness = readiness !== null && readiness.score >= 50;
11205
11205
  const stage = readiness?.stage ?? null;
11206
- const captureBehaviorNote = wsCtx.governanceMode === "open" ? "_In Open mode, user-authored captures commit immediately unless you ask me to keep them as drafts._" : "_Everything I capture stays pending until you confirm._";
11206
+ const captureBehaviorNote = wsCtx.governanceMode === "open" ? "_In Open mode, user-authored captures are accepted immediately unless you ask me to keep them as drafts._" : "_Everything I capture stays pending until you confirm._";
11207
11207
  const coherence = buildCoherenceSection();
11208
11208
  let allCollections = [];
11209
11209
  try {
@@ -13002,7 +13002,7 @@ async function _handleOrient({ mode = "full", tier, task, scope }) {
13002
13002
  }
13003
13003
  let fullCoherenceSnapshot;
13004
13004
  if (isLowReadiness) {
13005
- const captureBehaviorNote = (readiness?.governanceMode ?? wsCtx?.governanceMode ?? "open") === "open" ? "_In Open mode, captures commit automatically unless you ask me to keep them as drafts._" : "_Everything stays as a draft until you confirm._";
13005
+ const captureBehaviorNote = (readiness?.governanceMode ?? wsCtx?.governanceMode ?? "open") === "open" ? "_In Open mode, captures are accepted automatically unless you ask me to keep them as drafts._" : "_Everything stays as a draft until you confirm._";
13006
13006
  const gaps = readiness.gaps ?? [];
13007
13007
  if (gaps.length > 0) {
13008
13008
  const gapCtx = {
@@ -13651,7 +13651,7 @@ async function handleWorkspaceStatus() {
13651
13651
  `_${stageDescription}_`,
13652
13652
  "",
13653
13653
  `${scoreBar} ${stageLabel} \xB7 ${score}%`,
13654
- `**Governance:** ${governanceMode ?? "open"}${(governanceMode ?? "open") !== "open" ? " (commits require proposal)" : ""}`,
13654
+ `**Governance:** ${governanceMode ?? "open"}${(governanceMode ?? "open") !== "open" ? " (accepts require proposal)" : ""}`,
13655
13655
  "",
13656
13656
  "## Stats",
13657
13657
  `- **Entries:** ${stats.totalEntries} (${stats.activeCount} active, ${stats.draftCount} draft)`,
@@ -14385,7 +14385,7 @@ function formatEntryMarkdown(entry) {
14385
14385
  function buildOrientationMarkdown(collections, trackingEvents, standards, businessRules, principles) {
14386
14386
  const sections = ["# Product Brain \u2014 Orientation"];
14387
14387
  sections.push(
14388
- "## About Product Brain (PB)\nPB is a knowledge management system used by many product teams. This section describes how PB works \u2014 not your product.\n\n### How PB Organizes Its Tools\n- **Tools** = actions with side-effects or dynamic computation (capture, commit, search).\n- **Resources** = stable, read-only data (orientation, terminology, collection schemas).\n- **Prompts** = multi-step choreography (workflows, guided capture, deep dives).\n- Every tool, resource, and prompt works for ANY workspace \u2014 no bespoke logic.\n- Resource templates (URI params) serve workspace-specific data through generic patterns.\n- Compound tools with `action` enums keep the tool count minimal.\n\n### How PB Handles Your Data\n- **Draft-first**: all writes create drafts. SSOT requires explicit user confirmation.\n- **Empty-workspace safe**: every operation handles zero entries and fresh workspaces.\n- **Advisory, not blocking**: quality scores, contradiction checks, and coaching never prevent operations.\n- **Workspace-agnostic**: PB is a product for many teams \u2014 no workspace-specific logic.\n- **Self-documenting**: orient and server instructions teach agents how PB works."
14388
+ "## About Product Brain (PB)\nPB is a knowledge management system used by many product teams. This section describes how PB works \u2014 not your product.\n\n### How PB Organizes Its Tools\n- **Tools** = actions with side-effects or dynamic computation (capture, accept, search).\n- **Resources** = stable, read-only data (orientation, terminology, collection schemas).\n- **Prompts** = multi-step choreography (workflows, guided capture, deep dives).\n- Every tool, resource, and prompt works for ANY workspace \u2014 no bespoke logic.\n- Resource templates (URI params) serve workspace-specific data through generic patterns.\n- Compound tools with `action` enums keep the tool count minimal.\n\n### How PB Handles Your Data\n- **Draft-first**: all writes create drafts. SSOT requires explicit user confirmation.\n- **Empty-workspace safe**: every operation handles zero entries and fresh workspaces.\n- **Advisory, not blocking**: quality scores, contradiction checks, and coaching never prevent operations.\n- **Workspace-agnostic**: PB is a product for many teams \u2014 no workspace-specific logic.\n- **Self-documenting**: orient and server instructions teach agents how PB works."
14389
14389
  );
14390
14390
  const wsRules = [];
14391
14391
  for (const p of (principles ?? []).filter((e) => e.status === "active" || e.status === "verified")) {
@@ -14404,17 +14404,17 @@ function buildOrientationMarkdown(collections, trackingEvents, standards, busine
14404
14404
  }).join("\n");
14405
14405
  sections.push(
14406
14406
  `## Your Workspace Principles & Rules (${wsRules.length} active)
14407
- These are principles, standards, and rules your team has committed to the Chain. Respect them during implementation.
14407
+ These are principles, standards, and rules your team has accepted onto the Chain. Respect them during implementation.
14408
14408
 
14409
14409
  ` + ruleLines + '\n\nUse `entries action=get entryId="<ID>"` to drill into any rule before making changes in that area.'
14410
14410
  );
14411
14411
  } else {
14412
14412
  sections.push(
14413
- "## Your Workspace Principles & Rules\nNo active principles, standards, or business rules on the Chain yet.\nUse `capture` with collection `principles`, `standards`, or `business-rules` to add your team's guardrails.\nOnce committed, they appear here at orient time \u2014 so every agent session starts with your rules visible."
14413
+ "## Your Workspace Principles & Rules\nNo active principles, standards, or business rules on the Chain yet.\nUse `capture` with collection `principles`, `standards`, or `business-rules` to add your team's guardrails.\nOnce accepted, they appear here at orient time \u2014 so every agent session starts with your rules visible."
14414
14414
  );
14415
14415
  }
14416
14416
  sections.push(
14417
- "## Core Product Architecture\nThe Chain is a versioned, connected, compounding knowledge base \u2014 the SSOT for a product team.\nEverything on the Chain is one of **three primitives**:\n\n- **Entry** (atom) \u2014 a discrete knowledge unit: target audience, business rule, glossary term, metric, tension. Lives in a collection.\n- **Process** (authored) \u2014 a narrative chain with named links (Strategy Coherence, IDM Proposal). Content is inline text. Collection: `chains`.\n- **Map** (composed) \u2014 a framework assembled by reference (Lean Canvas, Empathy Map). Slots point to ingredient entries. Collection: `maps`.\n\nEntries are atoms. Processes author narrative from atoms. Maps compose frameworks from atoms.\nAll three share the same versioning, branching, gating, and relation system.\n\nThe Chain compounds: each new relation makes entries discoverable from more starting points \u2192 context gathering returns richer results \u2192 AI processes have more context \u2192 quality scores improve \u2192 next commit is smarter than the last."
14417
+ "## Core Product Architecture\nThe Chain is a versioned, connected, compounding knowledge base \u2014 the SSOT for a product team.\nEverything on the Chain is one of **three primitives**:\n\n- **Entry** (atom) \u2014 a discrete knowledge unit: target audience, business rule, glossary term, metric, tension. Lives in a collection.\n- **Process** (authored) \u2014 a narrative chain with named links (Strategy Coherence, IDM Proposal). Content is inline text. Collection: `chains`.\n- **Map** (composed) \u2014 a framework assembled by reference (Lean Canvas, Empathy Map). Slots point to ingredient entries. Collection: `maps`.\n\nEntries are atoms. Processes author narrative from atoms. Maps compose frameworks from atoms.\nAll three share the same versioning, branching, gating, and relation system.\n\nThe Chain compounds: each new relation makes entries discoverable from more starting points \u2192 context gathering returns richer results \u2192 AI processes have more context \u2192 quality scores improve \u2192 next accept is smarter than the last."
14418
14418
  );
14419
14419
  sections.push(
14420
14420
  "## Architecture\n```\nCursor (stdio) \u2192 MCP Server (mcp-server/src/index.ts)\n \u2192 POST /api/aki with Bearer token\n \u2192 Convex HTTP Action (convex/http.ts)\n \u2192 internalQuery / internalMutation (convex/agentKnowledge/*)\n \u2192 Convex DB (workspace-scoped)\n```\nSecurity: API key auth on every request, workspace-scoped data, internal functions blocked from external clients.\nKey files: `packages/mcp-server/src/client.ts` (HTTP client + audit), `convex/schema.ts` (schema)."
@@ -14483,7 +14483,7 @@ var AGENT_CHEATSHEET = `# Product Brain \u2014 Agent Cheatsheet
14483
14483
  | \`quality\` | Score an entry | \`entryId\` |
14484
14484
  | \`session\` | Start / close agent session | \`action\` |
14485
14485
  | \`health\` | Check / audit / whoami | \`action\` |
14486
- | \`facilitate\` | Session resume & constellation commit | \`action\`: resume, commit-constellation |
14486
+ | \`facilitate\` | Session resume & constellation accept | \`action\`: resume, commit-constellation |
14487
14487
 
14488
14488
  ## Collection Prefixes
14489
14489
  GLO (glossary), BR (business-rules), PRI (principles), STD (standards),
@@ -15047,7 +15047,7 @@ var INSTRUCTIONS = [
15047
15047
  "These describe how PB works \u2014 not your product.",
15048
15048
  "",
15049
15049
  "### How PB Organizes Its Tools",
15050
- "- **Tools** are for actions with side-effects or dynamic computation (capture, commit, search).",
15050
+ "- **Tools** are for actions with side-effects or dynamic computation (capture, accept, search).",
15051
15051
  "- **Resources** are for stable, read-only data (orientation, terminology, collection schemas).",
15052
15052
  "- **Prompts** are for multi-step choreography (workflows, guided capture, deep dives).",
15053
15053
  "- Every tool, resource, and prompt works for ANY workspace \u2014 no bespoke logic.",
@@ -15080,7 +15080,7 @@ var INSTRUCTIONS = [
15080
15080
  ' 4. Drill in: use `entries action=get entryId="..."` for full details \u2014 data, labels, relations, history.',
15081
15081
  " 5. Context: use `context action=gather` with an entryId or a task description.",
15082
15082
  " 6. Capture: use `capture` to create entries \u2014 auto-links and scores in one call.",
15083
- " 7. Commit: use `commit-entry` to promote drafts to SSOT \u2014 only when the user confirms.",
15083
+ " 7. Accept: use `commit-entry` to promote drafts to SSOT \u2014 only when the user confirms.",
15084
15084
  " 8. Connect: use `graph action=suggest` then `relations action=create` to build the graph.",
15085
15085
  " 9. Wrapup: call `session-wrapup` before closing \u2014 reviews drafts, coaches quality, suggests links.",
15086
15086
  " 10. Close: call `session action=close` when done \u2014 records session activity. Auto-nudges if wrapup was skipped.",
@@ -15089,8 +15089,8 @@ var INSTRUCTIONS = [
15089
15089
  " - Call `start_pb` to begin (starts session + loads context). Call `orient` mid-session for a refresh.",
15090
15090
  " - A readwrite API key scope",
15091
15091
  "",
15092
- "Commit-on-confirm: always capture as draft first and show the user what was captured.",
15093
- "Only call `commit-entry` when the user explicitly confirms (e.g. 'commit', 'looks good', 'yes').",
15092
+ "Accept-on-confirm: always capture as draft first and show the user what was captured.",
15093
+ "Only call `commit-entry` when the user explicitly confirms (e.g. 'accept', 'looks good', 'yes').",
15094
15094
  "This builds trust \u2014 the Chain (main) is SSOT; nothing goes there without user consent.",
15095
15095
  "",
15096
15096
  "Alignment-first: before proposing or building anything, check orient's Workspace Governance",
@@ -15290,4 +15290,4 @@ export {
15290
15290
  createProductBrainServer,
15291
15291
  initFeatureFlags
15292
15292
  };
15293
- //# sourceMappingURL=chunk-CIHITLKC.js.map
15293
+ //# sourceMappingURL=chunk-WG7H45D3.js.map