@event4u/agent-config 14.6.0 → 14.7.0

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 (188) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +260 -7
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze/inbox.md +264 -10
  5. package/dist/agent-src/commands/analyze.md +1 -1
  6. package/dist/agent-src/commands/roadmap/process-full.md +116 -30
  7. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +31 -0
  8. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +135 -104
  9. package/dist/agent-src/rules/context-hygiene.md +2 -0
  10. package/dist/agent-src/rules/decision-revisit-gate.md +3 -0
  11. package/dist/agent-src/rules/fix-what-you-see.md +108 -0
  12. package/dist/agent-src/rules/no-roadmap-references.md +0 -5
  13. package/dist/agent-src/rules/recurring-criticism.md +110 -0
  14. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  15. package/dist/agent-src/rules/rule-type-governance.md +0 -2
  16. package/dist/agent-src/rules/self-repair-loop.md +17 -0
  17. package/dist/agent-src/rules/skill-quality.md +0 -2
  18. package/dist/agent-src/rules/source-confidentiality.md +37 -7
  19. package/dist/agent-src/scripts/archival_sweep.ts +117 -0
  20. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +19 -3
  21. package/dist/agent-src/scripts/gate_budget.ts +282 -0
  22. package/dist/agent-src/scripts/gate_execute.ts +72 -31
  23. package/dist/agent-src/scripts/roadmap_gates.ts +74 -3
  24. package/dist/agent-src/scripts/update_roadmap_progress.ts +251 -7
  25. package/dist/agent-src/skills/ai-council/SKILL.md +48 -807
  26. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +320 -0
  27. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +99 -0
  28. package/dist/agent-src/skills/ai-council/references/execution-modes.md +162 -0
  29. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +125 -0
  30. package/dist/agent-src/skills/ai-council/references/procedure.md +143 -0
  31. package/dist/agent-src/skills/quality-tools/SKILL.md +34 -326
  32. package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +113 -0
  33. package/dist/agent-src/skills/quality-tools/references/php-tools.md +222 -0
  34. package/dist/agent-src/skills/roadmap-management/SKILL.md +15 -409
  35. package/dist/agent-src/skills/roadmap-management/references/archival.md +226 -0
  36. package/dist/agent-src/skills/roadmap-management/references/authoring.md +107 -0
  37. package/dist/agent-src/skills/roadmap-management/references/dashboard.md +47 -0
  38. package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +58 -0
  39. package/dist/agent-src/skills/skill-writing/SKILL.md +34 -570
  40. package/dist/agent-src/skills/skill-writing/references/procedure.md +275 -0
  41. package/dist/agent-src/skills/skill-writing/references/read-only-scripts.md +18 -0
  42. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +298 -0
  43. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  44. package/dist/agent-src/templates/roadmaps.md +45 -2
  45. package/dist/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  46. package/dist/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  47. package/dist/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  48. package/dist/cli/registry.js +1 -1
  49. package/dist/cli/registry.js.map +1 -1
  50. package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
  51. package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-4VR4ORQ6.js} +10 -7
  52. package/dist/cli-delegate/chunk-6EOCNQAM.js +402 -0
  53. package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-74E3TKWV.js} +381 -280
  54. package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-7F3VYSM2.js} +4 -4
  55. package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
  56. package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
  57. package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-GJ5BVHXM.js} +72 -165
  58. package/dist/cli-delegate/{chunk-P6LQDIWK.js → chunk-JZ4NR2TW.js} +338 -0
  59. package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
  60. package/dist/cli-delegate/{chunk-GRRPEPRN.js → chunk-T7L2QK3K.js} +24 -5
  61. package/dist/cli-delegate/{chunk-EVTY7ISR.js → chunk-YM4GZDJG.js} +9 -1
  62. package/dist/cli-delegate/cmd_conformance.js +459 -709
  63. package/dist/cli-delegate/cmd_doctor.js +6 -6
  64. package/dist/cli-delegate/cmd_explain.js +1 -1
  65. package/dist/cli-delegate/cmd_export.js +7 -6
  66. package/dist/cli-delegate/cmd_handoff.js +6 -6
  67. package/dist/cli-delegate/cmd_packs_active.js +1 -1
  68. package/dist/cli-delegate/cmd_preflight.js +2 -2
  69. package/dist/cli-delegate/cmd_prune.js +7 -6
  70. package/dist/cli-delegate/cmd_session_recycle.js +840 -30
  71. package/dist/cli-delegate/cmd_settings_migrate.js +7 -6
  72. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  73. package/dist/cli-delegate/cmd_sync.js +7 -6
  74. package/dist/cli-delegate/cmd_uninstall.js +9 -7
  75. package/dist/cli-delegate/cmd_update.js +1 -1
  76. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  77. package/dist/cli-delegate/cmd_validate.js +7 -6
  78. package/dist/discovery/deprecation-report.md +1 -1
  79. package/dist/discovery/discovery-manifest.json +68 -25
  80. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  81. package/dist/discovery/discovery-manifest.summary.md +4 -4
  82. package/dist/discovery/dormancy-report.md +1 -1
  83. package/dist/discovery/orphan-report.md +1 -1
  84. package/dist/discovery/packs.json +10 -8
  85. package/dist/discovery/trust-report.md +3 -3
  86. package/dist/discovery/workspaces.json +8 -6
  87. package/dist/hooks/dispatch.js +2901 -2053
  88. package/dist/install/claudePathsPlan.js +187 -0
  89. package/dist/install/claudePathsPlan.js.map +1 -0
  90. package/dist/install/hostLayerFingerprint.js +136 -0
  91. package/dist/install/hostLayerFingerprint.js.map +1 -0
  92. package/dist/install/install.mjs +553 -425
  93. package/dist/install/partitionEligibility.js +276 -0
  94. package/dist/install/partitionEligibility.js.map +1 -0
  95. package/dist/mcp/registry-manifest.json +3 -3
  96. package/dist/mcp/server.json +2 -2
  97. package/dist/mcp/server.mjs +1744 -1191
  98. package/dist/router.json +1 -1
  99. package/dist/scripts/_lib/agent_src.js +41 -0
  100. package/dist/scripts/_lib/agent_src.js.map +1 -1
  101. package/dist/scripts/_lib/install_layout.js +83 -0
  102. package/dist/scripts/_lib/install_layout.js.map +1 -0
  103. package/dist/scripts/_lib/installed_lock.js +444 -0
  104. package/dist/scripts/_lib/installed_lock.js.map +1 -0
  105. package/dist/scripts/condense.js +13 -164
  106. package/dist/scripts/condense.js.map +1 -1
  107. package/dist/server/schemas/settings.js +4 -0
  108. package/dist/server/schemas/settings.js.map +1 -1
  109. package/docs/contracts/settings-classes.md +12 -6
  110. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +8 -3
  111. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +26 -0
  112. package/docs/guidelines/agent-infra/memory-access.md +17 -0
  113. package/docs/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
  114. package/package.json +1 -1
  115. package/src/agent-src/scripts/archival_sweep.ts +117 -0
  116. package/src/agent-src/scripts/archive_completed_roadmaps.ts +19 -3
  117. package/src/agent-src/scripts/gate_budget.ts +282 -0
  118. package/src/agent-src/scripts/gate_execute.ts +72 -31
  119. package/src/agent-src/scripts/roadmap_gates.ts +74 -3
  120. package/src/agent-src/scripts/update_roadmap_progress.ts +251 -7
  121. package/src/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  122. package/src/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  123. package/src/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  124. package/src/config/agent-settings.template.yml +27 -2
  125. package/src/config/ci-local-parity.yml +18 -0
  126. package/src/config/estate-count-budget.json +339 -3
  127. package/src/config/gate-violation-baselines.json +41 -41
  128. package/src/config/rule-activation-census.json +14 -6
  129. package/src/config/rule-stub-ceilings.json +19 -6
  130. package/src/install/claudePathsPlan.ts +196 -0
  131. package/src/install/hostLayerFingerprint.ts +145 -0
  132. package/src/install/partitionEligibility.ts +325 -0
  133. package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
  134. package/src/scripts/_dispatch.bash +6 -1
  135. package/src/scripts/_lib/ac_heading.ts +30 -0
  136. package/src/scripts/_lib/agent_src.ts +42 -0
  137. package/src/scripts/_lib/bench_ab_pinned_repo.ts +162 -0
  138. package/src/scripts/_lib/bench_ab_workspace.ts +10 -1
  139. package/src/scripts/_lib/envelope_grounding.ts +38 -8
  140. package/src/scripts/_lib/installed_lock.ts +50 -5
  141. package/src/scripts/_lib/md_section.ts +129 -0
  142. package/src/scripts/_lib/scope_guard.sh +26 -3
  143. package/src/scripts/_lib/self_repair.ts +19 -0
  144. package/src/scripts/_lib/self_repair_class_b.ts +171 -0
  145. package/src/scripts/ai_council/cli_help.ts +55 -0
  146. package/src/scripts/before_complete_hook.ts +153 -28
  147. package/src/scripts/bench_ab_v2_complexity.ts +27 -7
  148. package/src/scripts/check_references.ts +60 -0
  149. package/src/scripts/check_release_published.ts +32 -11
  150. package/src/scripts/check_single_delivery.ts +59 -15
  151. package/src/scripts/ci_settle.ts +170 -0
  152. package/src/scripts/condense.ts +20 -170
  153. package/src/scripts/council_cli.ts +3 -3
  154. package/src/scripts/dispatch_r2_reviewer.ts +6 -14
  155. package/src/scripts/hook_manifest.json +1 -1
  156. package/src/scripts/hook_manifest.yaml +77 -14
  157. package/src/scripts/hooks/block_no_verify.ts +61 -10
  158. package/src/scripts/hooks/block_unauthorized_git.ts +1 -1
  159. package/src/scripts/hooks/concern_registry.ts +4 -0
  160. package/src/scripts/hooks/rtk_wrap_hook.ts +8 -3
  161. package/src/scripts/hooks/run_continuation_hook.ts +8 -5
  162. package/src/scripts/hooks/ship_diff_volume_hook.ts +81 -15
  163. package/src/scripts/hooks/source_first_gate_hook.ts +464 -0
  164. package/src/scripts/hooks/state_io.ts +782 -20
  165. package/src/scripts/hooks/subagent_ledger_hook.ts +44 -15
  166. package/src/scripts/hooks/telemetry_flush_hook.ts +139 -0
  167. package/src/scripts/hooks/telemetry_self_repair.ts +128 -0
  168. package/src/scripts/hooks/telemetry_usage_hook.ts +22 -4
  169. package/src/scripts/hooks/turn_end_gate_hook.ts +81 -15
  170. package/src/scripts/install.ts +16 -11
  171. package/src/scripts/language_mirror_hook.ts +561 -25
  172. package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
  173. package/src/scripts/lint_plan_risk_register.ts +4 -3
  174. package/src/scripts/lint_skill_router_head.ts +4 -4
  175. package/src/scripts/mcp_server/tools.ts +2 -2
  176. package/src/scripts/new_roadmap.ts +136 -0
  177. package/src/scripts/pack_mcp_content.ts +20 -5
  178. package/src/scripts/release.ts +37 -38
  179. package/src/scripts/report_layer_overlap.ts +6 -0
  180. package/src/scripts/self_repair_hook.ts +37 -5
  181. package/src/scripts/session_register_hook.ts +11 -0
  182. package/src/scripts/skill_usage_collect.ts +11 -1
  183. package/src/scripts/skill_usage_report.ts +278 -8
  184. package/src/scripts/sync_pr_branch.ts +7 -0
  185. package/src/server/schemas/settings.ts +8 -0
  186. package/dist/cli-delegate/chunk-EJITJBJX.js +0 -172
  187. package/dist/cli-delegate/chunk-PZWRPRWP.js +0 -38
  188. /package/dist/cli-delegate/{chunk-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
@@ -227,7 +227,11 @@ function _stripChars(s, chars) {
227
227
  // module-level CLI self-invoke into its bundle. Re-exported here because four
228
228
  // in-repo consumers import it from `condense.js`.
229
229
  export { rule_in_scope } from '../install/ruleInScope.js';
230
+ // Re-exported for in-repo consumers; definitions moved beside emit_host_rules_cli.ts (Phase 5).
231
+ export { CLAUDE_PATHS_PATTERN_BUDGET, _claude_paths_plan, _escape_claude_bracket, _expanded_pattern_count, _has_non_path_trigger, _is_unresolved_placeholder, derive_trigger_globs, } from '../install/claudePathsPlan.js';
230
232
  import { rule_in_scope } from '../install/ruleInScope.js';
233
+ import { isExclusivelyPackageOnly, partitionActive, setPartitionAnnounce } from '../install/partitionEligibility.js'; // ADR-236
234
+ import { _claude_paths_plan, derive_trigger_globs } from '../install/claudePathsPlan.js';
231
235
  const _HERE = path.dirname(fileURLToPath(import.meta.url)); // <repo>/src/scripts
232
236
  const _DEFAULT_PROJECT_ROOT = path.resolve(_HERE, '..', '..');
233
237
  function _deriveState(root) {
@@ -256,6 +260,7 @@ function _deriveState(root) {
256
260
  };
257
261
  }
258
262
  export const MODULE_STATE = _deriveState(_DEFAULT_PROJECT_ROOT);
263
+ setPartitionAnnounce(success); // ADR-236: the mode line must be visible at the default level
259
264
  /**
260
265
  * Test seam — reassign one or more module-state fields, mirroring the pytest
261
266
  * monkeypatch of `condense.<NAME> = ...`. When `PROJECT_ROOT` is overridden,
@@ -1004,6 +1009,7 @@ function _scoped_rule_basenames() {
1004
1009
  // is its fourth consumer, after the router compiler, the dist writer, and
1005
1010
  // check_sync. Same predicate in all four; that is the point.
1006
1011
  .filter((p) => !skip_compile_disabled_rule(`rules/${path.basename(p)}`))
1012
+ .filter((p) => !partitionActive(MODULE_STATE.PROJECT_ROOT) || isExclusivelyPackageOnly(p))
1007
1013
  .map((p) => path.basename(p))
1008
1014
  .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
1009
1015
  }
@@ -1188,34 +1194,6 @@ export function _parse_frontmatter(content) {
1188
1194
  function _yaml_scalar(value) {
1189
1195
  return JSON.stringify(value);
1190
1196
  }
1191
- /**
1192
- * Derive host-native activation globs from a rule's `triggers:` frontmatter
1193
- * (road-to-request-scoped-rule-load Phase 2). `file_pattern` triggers map
1194
- * verbatim; `path_prefix` triggers map to `<prefix>**`. Keyword / phrase /
1195
- * command triggers produce no glob — those rules stay
1196
- * description-activated (Cursor Agent-Requested / Windsurf model_decision).
1197
- */
1198
- export function derive_trigger_globs(meta) {
1199
- const triggers = meta['triggers'];
1200
- if (!Array.isArray(triggers)) {
1201
- return [];
1202
- }
1203
- const globs = [];
1204
- for (const t of triggers) {
1205
- if (t === null || typeof t !== 'object' || Array.isArray(t))
1206
- continue;
1207
- const obj = t;
1208
- if (typeof obj['file_pattern'] === 'string' && obj['file_pattern']) {
1209
- globs.push(obj['file_pattern']);
1210
- }
1211
- else if (typeof obj['path_prefix'] === 'string' && obj['path_prefix']) {
1212
- const prefix = obj['path_prefix'];
1213
- globs.push(prefix.endsWith('/') ? `${prefix}**` : `${prefix}**`);
1214
- }
1215
- }
1216
- // De-dup, keep declaration order (deterministic output).
1217
- return [...new Set(globs)];
1218
- }
1219
1197
  export function _emit_cursor_mdc(source, target) {
1220
1198
  const [meta, body] = _parse_frontmatter(_readText(source));
1221
1199
  const description = _strip(String(meta['description'] ?? '').replace(/\n/g, ' '));
@@ -1255,141 +1233,6 @@ export function _emit_windsurf_rule(source, target) {
1255
1233
  _mkdirp(path.dirname(target));
1256
1234
  _writeText(target, lines.join('\n'));
1257
1235
  }
1258
- /**
1259
- * A brace group the host expands, versus an agent-config placeholder that only
1260
- * LOOKS like one.
1261
- *
1262
- * `path_prefix: "{module_root}/"` in `roadmap-ci-steps-policy` is resolved by
1263
- * this suite from `modules.root_paths`. Emitted verbatim into a host `paths:`
1264
- * list it is a brace group with no comma, which the host expands to the literal
1265
- * string `{module_root}` — a pattern that matches no file. The rule would then
1266
- * reach the model **never** instead of on-demand, and nothing would say so: the
1267
- * probed contract records this exact degradation as silent
1268
- * (`claude-code-rules-dir-contract.md` § constraints).
1269
- *
1270
- * Dropping the pattern is fail-safe in the one direction that matters. A rule
1271
- * left with no pattern at all carries no `paths:` key and loads
1272
- * unconditionally — the status quo, not a regression. A rule carrying a
1273
- * no-op pattern is invisible.
1274
- *
1275
- * The discriminator is the comma, not a placeholder allowlist: `{ts,tsx}` is a
1276
- * real alternation, `{module_root}` cannot be one.
1277
- */
1278
- export function _is_unresolved_placeholder(pattern) {
1279
- for (const m of pattern.matchAll(/\{([^}]*)\}/g)) {
1280
- if (!m[1].includes(',')) {
1281
- return true;
1282
- }
1283
- }
1284
- return false;
1285
- }
1286
- /**
1287
- * `[` opens a bracket expression for the host. An unparseable one makes that
1288
- * pattern match nothing while the rule's other patterns keep working — so a
1289
- * literal `[` in a trigger is escaped rather than trusted.
1290
- */
1291
- export function _escape_claude_bracket(pattern) {
1292
- return pattern.replace(/\[/g, '\\[');
1293
- }
1294
- /**
1295
- * Expanded-pattern cost of one glob: the product of its brace alternations.
1296
- * The host budgets a rule's whole `paths:` list at 1,000 expanded patterns and
1297
- * 4 MiB, and a list over budget is used UNEXPANDED — braces then match
1298
- * literally, i.e. nothing. Counting keeps the emitter under the cliff instead
1299
- * of discovering it as a silent no-op.
1300
- */
1301
- export function _expanded_pattern_count(pattern) {
1302
- let n = 1;
1303
- for (const m of pattern.matchAll(/\{([^}]*)\}/g)) {
1304
- n *= m[1].split(',').length;
1305
- }
1306
- return n;
1307
- }
1308
- /** Host-documented budget for one rule's whole `paths:` list. */
1309
- export const CLAUDE_PATHS_PATTERN_BUDGET = 1000;
1310
- /**
1311
- * Does this rule declare any trigger that is NOT path-shaped?
1312
- *
1313
- * Load-bearing for `_claude_paths_plan` below, because one `triggers:` list
1314
- * means two different things on two hosts. Cursor and Windsurf treat globs as
1315
- * ADDITIVE — a rule with empty globs still reaches the agent through its
1316
- * description (see `_emit_cursor_mdc`'s own comment). Claude Code treats
1317
- * `paths:` as EXCLUSIVE: with it the rule loads on a path match; without it the
1318
- * rule loads unconditionally. The emitter fed both semantics from one list, so
1319
- * a rule that declared keywords *and* one path glob silently became
1320
- * path-gated-only on Claude.
1321
- */
1322
- export function _has_non_path_trigger(meta) {
1323
- const triggers = meta['triggers'];
1324
- if (!Array.isArray(triggers))
1325
- return false;
1326
- for (const t of triggers) {
1327
- if (t === null || typeof t !== 'object' || Array.isArray(t))
1328
- continue;
1329
- const obj = t;
1330
- if (typeof obj['keyword'] === 'string' && obj['keyword'])
1331
- return true;
1332
- if (typeof obj['phrase'] === 'string' && obj['phrase'])
1333
- return true;
1334
- }
1335
- return false;
1336
- }
1337
- /**
1338
- * Derive the host's `paths:` list for one rule, with every drop recorded.
1339
- *
1340
- * Kernel / always-apply rules get an EMPTY list on purpose: absent `paths:` is
1341
- * how this host says "load unconditionally", which is exactly what an Iron-Law
1342
- * rule needs. Scoping one would be a correctness regression dressed as a byte
1343
- * saving — and the same contract notes path-scoped rules are not re-injected
1344
- * after `/compact`, so an obligation that must survive compaction cannot be
1345
- * path-scoped at all.
1346
- */
1347
- export function _claude_paths_plan(meta) {
1348
- const always_apply = Boolean(meta['alwaysApply'] || meta['type'] === 'always');
1349
- if (always_apply) {
1350
- return { globs: [], dropped: [] };
1351
- }
1352
- const globs = [];
1353
- const dropped = [];
1354
- // A rule that ALSO declares keyword / phrase triggers gets no `paths:` at
1355
- // all, and therefore keeps loading unconditionally on Claude Code.
1356
- //
1357
- // Emitting `paths:` here would narrow the rule to a path match and discard
1358
- // every keyword the author wrote, because this host reads the list as the
1359
- // whole gate rather than as one way in. Measured before this guard: 25 of
1360
- // 110 projected rules carried `paths:` and 19 of them also carried keyword
1361
- // triggers — `design-fidelity` lost 21 of them, in exactly the pasted-
1362
- // screenshot and capability-URL handovers its own routing section names as
1363
- // the classes it exists to catch. Nothing in the tree recorded a decision
1364
- // to make that trade, which is why it is treated as a defect.
1365
- //
1366
- // The drop is REPORTED rather than silent, so a rule whose obligation
1367
- // really is path-bound is visible as a candidate for removing its keyword
1368
- // triggers — the narrowing then becomes an authoring decision instead of an
1369
- // emitter side effect. Cursor and Windsurf are untouched: globs are
1370
- // additive there, so the same rule keeps both routes.
1371
- if (_has_non_path_trigger(meta)) {
1372
- for (const raw of derive_trigger_globs(meta)) {
1373
- dropped.push({ pattern: raw, reason: 'mixed-triggers' });
1374
- }
1375
- return { globs, dropped };
1376
- }
1377
- let spent = 0;
1378
- for (const raw of derive_trigger_globs(meta)) {
1379
- if (_is_unresolved_placeholder(raw)) {
1380
- dropped.push({ pattern: raw, reason: 'unresolved-placeholder' });
1381
- continue;
1382
- }
1383
- const cost = _expanded_pattern_count(raw);
1384
- if (spent + cost > CLAUDE_PATHS_PATTERN_BUDGET) {
1385
- dropped.push({ pattern: raw, reason: 'over-budget' });
1386
- continue;
1387
- }
1388
- spent += cost;
1389
- globs.push(_escape_claude_bracket(raw));
1390
- }
1391
- return { globs, dropped };
1392
- }
1393
1236
  /**
1394
1237
  * Emit a Claude Code rule carrying the host's OWN activation key.
1395
1238
  *
@@ -1652,6 +1495,8 @@ function _render_native_model_md(src_md, tier) {
1652
1495
  return text.replace(_MODEL_TIER_RE, `model: ${model}`);
1653
1496
  }
1654
1497
  export function generate_claude_skills(active_skill_names = null) {
1498
+ if (partitionActive(MODULE_STATE.PROJECT_ROOT))
1499
+ active_skill_names = new Set();
1655
1500
  if (!_exists(MODULE_STATE.SKILLS_SOURCE)) {
1656
1501
  process.stderr.write(' ⚠️ dist/agent-src/skills/ not found — skipping skills\n');
1657
1502
  return 0;
@@ -1664,7 +1509,9 @@ export function generate_claude_skills(active_skill_names = null) {
1664
1509
  skills = skills.filter((s) => active_skill_names.has(s));
1665
1510
  }
1666
1511
  const skill_set = new Set(skills);
1667
- const command_slugs = new Set([...iterCommands()].map(([, slug]) => slug));
1512
+ const command_slugs = partitionActive(MODULE_STATE.PROJECT_ROOT)
1513
+ ? new Set()
1514
+ : new Set([...iterCommands()].map(([, slug]) => slug));
1668
1515
  _mkdirp(MODULE_STATE.CLAUDE_SKILLS_DIR);
1669
1516
  const auto = _read_model_auto_switch() === 'auto';
1670
1517
  for (const item of _iterdirSorted(MODULE_STATE.CLAUDE_SKILLS_DIR)) {
@@ -1812,6 +1659,8 @@ export function generate_claude_project_commands(active_command_slugs = null) {
1812
1659
  return count;
1813
1660
  }
1814
1661
  export function generate_claude_commands(active_command_slugs = null) {
1662
+ if (partitionActive(MODULE_STATE.PROJECT_ROOT))
1663
+ active_command_slugs = new Set();
1815
1664
  if (!_isDir(path.join(MODULE_STATE.PROJECT_ROOT, 'src', 'domains'))) {
1816
1665
  process.stderr.write(' ⚠️ src/domains/ not found — skipping commands\n');
1817
1666
  return 0;