instar 1.3.763 → 1.3.765

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.
Files changed (30) hide show
  1. package/dist/core/ClaudeCliIntelligenceProvider.d.ts +15 -0
  2. package/dist/core/ClaudeCliIntelligenceProvider.d.ts.map +1 -1
  3. package/dist/core/ClaudeCliIntelligenceProvider.js +111 -23
  4. package/dist/core/ClaudeCliIntelligenceProvider.js.map +1 -1
  5. package/dist/core/PostUpdateMigrator.d.ts +1 -0
  6. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  7. package/dist/core/PostUpdateMigrator.js +56 -2
  8. package/dist/core/PostUpdateMigrator.js.map +1 -1
  9. package/dist/core/crossModelReviewer.d.ts +188 -9
  10. package/dist/core/crossModelReviewer.d.ts.map +1 -1
  11. package/dist/core/crossModelReviewer.js +360 -18
  12. package/dist/core/crossModelReviewer.js.map +1 -1
  13. package/dist/core/types.d.ts +14 -0
  14. package/dist/core/types.d.ts.map +1 -1
  15. package/dist/core/types.js.map +1 -1
  16. package/dist/scaffold/templates.js +1 -1
  17. package/dist/server/routes.d.ts.map +1 -1
  18. package/dist/server/routes.js +15 -5
  19. package/dist/server/routes.js.map +1 -1
  20. package/package.json +1 -1
  21. package/scripts/model-registry-freshness.manifest.json +8 -0
  22. package/skills/spec-converge/SKILL.md +4 -2
  23. package/skills/spec-converge/scripts/cross-model-review.mjs +36 -6
  24. package/src/data/builtin-manifest.json +63 -63
  25. package/src/scaffold/templates.ts +1 -1
  26. package/upgrades/1.3.764.md +45 -0
  27. package/upgrades/1.3.765.md +63 -0
  28. package/upgrades/side-effects/actionclaim-config-shape-fix.eli16.md +50 -0
  29. package/upgrades/side-effects/actionclaim-config-shape-fix.md +149 -0
  30. package/upgrades/side-effects/reviewer-door-rewiring-inc1.md +198 -0
@@ -20652,7 +20652,17 @@ document.getElementById('mcpForm').addEventListener('submit', async function (e)
20652
20652
  res.json({ leases: ctx.prHandLease.list().map((l) => ({ ...l, holderSessionId: undefined })) });
20653
20653
  });
20654
20654
  router.post('/action-claim/observe', (req, res) => {
20655
- const enabled = ctx.liveConfig?.get('messaging.actionClaim.enabled', false) ?? false;
20655
+ // ── Config location (actionclaim-config-shape-fix): on a real install
20656
+ // `messaging` is an ARRAY of adapter configs, so `messaging.actionClaim.*` is
20657
+ // UNREACHABLE (getNestedValue walks the array → `array['actionClaim']` is
20658
+ // undefined → the default) — which made this default-OFF sentinel structurally
20659
+ // un-enablable in production (CI never caught it: every test used an
20660
+ // object-shaped `messaging`). The reachable, canonical home is a TOP-LEVEL
20661
+ // `actionClaim` block; the legacy object-shaped `messaging.actionClaim` is
20662
+ // honored as a back-compat fallback. Both are read LIVE (no restart).
20663
+ const acGet = (leaf, dflt) => (ctx.liveConfig?.get(`actionClaim.${leaf}`, undefined) ??
20664
+ ctx.liveConfig?.get(`messaging.actionClaim.${leaf}`, dflt));
20665
+ const enabled = acGet('enabled', false) ?? false;
20656
20666
  if (!enabled) {
20657
20667
  res.json({ observed: false, registered: false, reason: 'feature-disabled' });
20658
20668
  return;
@@ -20678,12 +20688,12 @@ document.getElementById('mcpForm').addEventListener('submit', async function (e)
20678
20688
  const isMinted = numericTopicId !== undefined && numericTopicId < 0;
20679
20689
  let slackDryRun = false;
20680
20690
  if (isMinted) {
20681
- const slackLaneLive = resolveDevAgentGate(ctx.liveConfig?.get('messaging.actionClaim.slack.enabled', undefined), ctx.config);
20691
+ const slackLaneLive = resolveDevAgentGate(acGet('slack.enabled', undefined), ctx.config);
20682
20692
  if (!slackLaneLive) {
20683
20693
  res.json({ observed: true, registered: false, reason: 'slack-lane-dark' });
20684
20694
  return;
20685
20695
  }
20686
- slackDryRun = ctx.liveConfig?.get('messaging.actionClaim.slack.dryRun', true) ?? true;
20696
+ slackDryRun = acGet('slack.dryRun', true) ?? true;
20687
20697
  }
20688
20698
  // ── §4.2a Lane-A precedence: classify Lane A first; ONLY on a Lane-A miss run
20689
20699
  // Lane B — so a dual-signal turn ("I'll deploy in 10 min") registers ONCE
@@ -20733,7 +20743,7 @@ document.getElementById('mcpForm').addEventListener('submit', async function (e)
20733
20743
  }
20734
20744
  // ── §5 per-topic cap — ONE shared budget across BOTH lanes (R1-C3): count
20735
20745
  // open commitments whose externalKey starts with actionclaim: OR timepromise:.
20736
- const cap = ctx.liveConfig?.get('messaging.actionClaim.perTopicCap', 5) ?? 5;
20746
+ const cap = acGet('perTopicCap', 5) ?? 5;
20737
20747
  const openForTopic = ctx.commitmentTracker
20738
20748
  .getActive()
20739
20749
  .filter((c) => c.topicId === topicId &&
@@ -20744,7 +20754,7 @@ document.getElementById('mcpForm').addEventListener('submit', async function (e)
20744
20754
  res.json({ observed: true, registered: false, reason: 'per-topic-cap', lane, ...(verb ? { verb } : {}), cap });
20745
20755
  return;
20746
20756
  }
20747
- const expiresHrs = ctx.liveConfig?.get('messaging.actionClaim.expiresHours', 6) ?? 6;
20757
+ const expiresHrs = acGet('expiresHours', 6) ?? 6;
20748
20758
  const expiresAt = new Date(Date.now() + expiresHrs * 3600_000).toISOString();
20749
20759
  // ── §8.1 dryRun (minted lane): would-register audit line + typed non-register,
20750
20760
  // NO record(). Best-effort append ("audit is observability") so a log-write