@burdenoff/mcp-libs 2026.719.2 → 2026.720.2

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.
@@ -568,7 +568,13 @@ function registerProgramTools(server, ctx, track) {
568
568
  {
569
569
  title: "Archive Training Program",
570
570
  description: "Archive a training program by ID. Returns true on success.",
571
- inputSchema: { id: zod.z.string().describe("Program ID") }
571
+ inputSchema: { id: zod.z.string().describe("Program ID") },
572
+ // BOFF-3859: ARCHIVED is a terminal lifecycle state (no transition back
573
+ // out per training.service.ts's PROGRAM_TRANSITIONS) and the resolver
574
+ // sets `deletedAt` — this is an irreversible soft-delete, not a naming
575
+ // pattern (`inferDestructiveHint` only matches `delete`), so it must be
576
+ // declared explicitly to be caught by the confirmation gate.
577
+ annotations: { destructiveHint: true }
572
578
  },
573
579
  async ({ id }) => {
574
580
  try {
@@ -1474,7 +1480,13 @@ function registerCoachingTools(server, ctx, track) {
1474
1480
  shareWorkouts: zod.z.boolean().optional().describe("Share workout data with the coach"),
1475
1481
  shareNutrition: zod.z.boolean().optional().describe("Share nutrition data with the coach"),
1476
1482
  shareMetrics: zod.z.boolean().optional().describe("Share body-metric data with the coach")
1477
- }
1483
+ },
1484
+ // BOFF-3859: grants a third party (the coach) read access to a
1485
+ // member's health data via the share* flags. Not a naming-pattern
1486
+ // match for `inferDestructiveHint` (no "delete"), but it is exactly
1487
+ // the class of health-data-governance mutation the confirmation gate
1488
+ // exists for — declared explicitly rather than left ungated.
1489
+ annotations: { destructiveHint: true }
1478
1490
  },
1479
1491
  async ({ coachId, memberId, specialty, shareWorkouts, shareNutrition, shareMetrics }) => {
1480
1492
  try {
@@ -1501,7 +1513,11 @@ function registerCoachingTools(server, ctx, track) {
1501
1513
  inputSchema: {
1502
1514
  id: zod.z.string().describe("Coaching relationship ID"),
1503
1515
  status: CoachingStatusEnum.describe("Target coaching status")
1504
- }
1516
+ },
1517
+ // BOFF-3859: activates or revokes a coach's access to shared health
1518
+ // data (ENDED is a terminal state per COACHING_TRANSITIONS) — same
1519
+ // health-data-governance rationale as coaching_create above.
1520
+ annotations: { destructiveHint: true }
1505
1521
  },
1506
1522
  async ({ id, status }) => {
1507
1523
  try {