@event4u/agent-config 9.22.0 → 9.24.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 (90) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +84 -238
  3. package/README.md +2 -2
  4. package/dist/agent-src/commands/agent-handoff.md +10 -3
  5. package/dist/agent-src/commands/analyze/inbox.md +190 -0
  6. package/dist/agent-src/commands/analyze.md +4 -3
  7. package/dist/agent-src/commands/optimize/deep.md +13 -0
  8. package/dist/agent-src/commands/pr/create.md +6 -6
  9. package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +12 -2
  10. package/dist/agent-src/contexts/execution/mandated-lines.md +180 -0
  11. package/dist/agent-src/rules/context-hygiene.md +20 -0
  12. package/dist/agent-src/rules/downstream-changes.md +26 -0
  13. package/dist/agent-src/rules/think-before-action.md +25 -0
  14. package/dist/agent-src/rules/token-budget-discipline.md +46 -3
  15. package/dist/agent-src/rules/token-efficiency.md +13 -0
  16. package/dist/agent-src/rules/ui-audit-gate.md +33 -2
  17. package/dist/agent-src/skills/adversarial-review/SKILL.md +18 -4
  18. package/dist/agent-src/skills/decision-review/SKILL.md +49 -0
  19. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +5 -1
  20. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +16 -0
  21. package/dist/agent-src/skills/judge-synthesis/SKILL.md +14 -1
  22. package/dist/agent-src/skills/rule-writing/SKILL.md +33 -0
  23. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +31 -0
  24. package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
  25. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  26. package/dist/cli/registry.js +1 -0
  27. package/dist/cli/registry.js.map +1 -1
  28. package/dist/cli-delegate/chunk-DVRS2KVR.js +4602 -0
  29. package/dist/cli-delegate/{chunk-ELMFOQPW.js → chunk-SJQMJI7M.js} +8 -4597
  30. package/dist/cli-delegate/cmd_export.js +2 -1
  31. package/dist/cli-delegate/cmd_prune.js +2 -1
  32. package/dist/cli-delegate/cmd_settings_migrate.js +2 -1
  33. package/dist/cli-delegate/cmd_settings_set.js +3370 -0
  34. package/dist/cli-delegate/cmd_sync.js +2 -1
  35. package/dist/cli-delegate/cmd_uninstall.js +2 -1
  36. package/dist/cli-delegate/cmd_validate.js +2 -1
  37. package/dist/discovery/deprecation-report.md +1 -1
  38. package/dist/discovery/discovery-manifest.json +54 -27
  39. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  40. package/dist/discovery/discovery-manifest.summary.md +3 -3
  41. package/dist/discovery/orphan-report.md +1 -1
  42. package/dist/discovery/packs.json +6 -5
  43. package/dist/discovery/trust-report.md +2 -2
  44. package/dist/discovery/workspaces.json +5 -4
  45. package/dist/hooks/dispatch.js +79 -1
  46. package/dist/mcp/registry-manifest.json +3 -3
  47. package/dist/mcp/server.json +2 -2
  48. package/dist/scripts/condense.js +47 -2
  49. package/dist/scripts/condense.js.map +1 -1
  50. package/dist/server/routes/settings.js +82 -0
  51. package/dist/server/routes/settings.js.map +1 -1
  52. package/dist/shared/settingsClasses.js +191 -0
  53. package/dist/shared/settingsClasses.js.map +1 -0
  54. package/docs/contracts/settings-classes.md +342 -0
  55. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +23 -2
  56. package/docs/guidelines/agent-infra/false-green.md +187 -0
  57. package/docs/guidelines/agent-infra/gate-authoring.md +177 -0
  58. package/package.json +3 -1
  59. package/src/config/ci-local-parity.yml +12 -0
  60. package/src/config/evaluator-budgets.json +4 -4
  61. package/src/config/gate-coverage.yml +54 -12
  62. package/src/config/gate-violation-baselines.json +6 -0
  63. package/src/config/pack-size-budget.json +4 -3
  64. package/src/scripts/_cli/cmd_settings_set.ts +509 -0
  65. package/src/scripts/_dispatch.bash +16 -0
  66. package/src/scripts/_lib/gate_ledger.ts +295 -0
  67. package/src/scripts/_lib/gate_result.ts +101 -0
  68. package/src/scripts/_lib/gate_self_test.ts +129 -0
  69. package/src/scripts/_lib/measured_render.ts +97 -0
  70. package/src/scripts/_lib/ratchet_base_ref.ts +373 -0
  71. package/src/scripts/check_gate_completeness.ts +244 -0
  72. package/src/scripts/check_gate_coverage.ts +35 -6
  73. package/src/scripts/check_references.ts +125 -15
  74. package/src/scripts/check_review_dispositions.ts +14 -1
  75. package/src/scripts/check_suppression_hygiene.ts +503 -0
  76. package/src/scripts/condense.ts +47 -2
  77. package/src/scripts/hook_manifest.yaml +23 -0
  78. package/src/scripts/hooks/dispatch_hook.ts +65 -1
  79. package/src/scripts/hooks/host_semantics.ts +140 -0
  80. package/src/scripts/lint_framework_leakage.ts +147 -15
  81. package/src/scripts/lint_mandated_lines.ts +339 -0
  82. package/src/scripts/lint_roadmap_complexity.ts +102 -11
  83. package/src/scripts/lint_roadmap_family_cap.ts +191 -0
  84. package/src/scripts/lint_settings_classes.ts +397 -0
  85. package/src/scripts/lint_token_budget_discipline.ts +109 -1
  86. package/src/scripts/measure_rule_absoluta.ts +231 -0
  87. package/src/scripts/report_imperative_density.ts +229 -0
  88. package/src/scripts/verify_physical_move.ts +10 -1
  89. package/src/server/io/yamlIO.ts +173 -0
  90. package/src/shared/settingsClasses.ts +235 -0
@@ -1,7 +1,8 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
2
  import {
3
3
  main
4
- } from "./chunk-ELMFOQPW.js";
4
+ } from "./chunk-SJQMJI7M.js";
5
+ import "./chunk-DVRS2KVR.js";
5
6
  import "./chunk-WR6GTRHJ.js";
6
7
  import "./chunk-BKO2AZ7Z.js";
7
8
  import {
@@ -3,7 +3,8 @@ import {
3
3
  PROJECT_BRIDGE_MARKERS,
4
4
  USER_SCOPE_PATHS,
5
5
  subtract_pointers
6
- } from "./chunk-ELMFOQPW.js";
6
+ } from "./chunk-SJQMJI7M.js";
7
+ import "./chunk-DVRS2KVR.js";
7
8
  import "./chunk-WR6GTRHJ.js";
8
9
  import "./chunk-BKO2AZ7Z.js";
9
10
  import {
@@ -3,7 +3,8 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
3
3
  import {
4
4
  PROJECT_BRIDGE_MARKERS,
5
5
  USER_SCOPE_PATHS
6
- } from "./chunk-ELMFOQPW.js";
6
+ } from "./chunk-SJQMJI7M.js";
7
+ import "./chunk-DVRS2KVR.js";
7
8
  import "./chunk-WR6GTRHJ.js";
8
9
  import "./chunk-BKO2AZ7Z.js";
9
10
  import {
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-08-05T05:32:20Z`
3
+ - Generated: `2026-08-06T06:45:33Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._
@@ -283,7 +283,7 @@
283
283
  },
284
284
  {
285
285
  "category": "command",
286
- "checksum": "sha256:43f9c059a7126d30ab61ce4fc2f004763a89d8f54f7f091f8cf6e5c7f0673633",
286
+ "checksum": "sha256:2ffba4311aab15137416d4db749e610a39b5268856f176e9a4fcea49743688f9",
287
287
  "install": {
288
288
  "default": true,
289
289
  "removable": false
@@ -303,7 +303,8 @@
303
303
  "analyze-decision",
304
304
  "analyze-near-miss",
305
305
  "analyze-incident",
306
- "analyze-reference-repo"
306
+ "analyze-reference-repo",
307
+ "analyze-inbox"
307
308
  ],
308
309
  "slug": "analyze",
309
310
  "tier": 1,
@@ -343,6 +344,32 @@
343
344
  "engineering"
344
345
  ]
345
346
  },
347
+ {
348
+ "category": "command",
349
+ "checksum": "sha256:01aca921b9d33fb28a18b9b34095c23cd0b1b2768af6c654e3bddf0d18606412",
350
+ "install": {
351
+ "default": true,
352
+ "removable": false
353
+ },
354
+ "lifecycle": "active",
355
+ "name": "analyze-inbox",
356
+ "pack": "analysis-workbench",
357
+ "packs": [
358
+ "meta"
359
+ ],
360
+ "path": "src/domains/analysis-workbench/analyze/inbox/command.md",
361
+ "slug": "analyze-inbox",
362
+ "tier": 2,
363
+ "trust": {
364
+ "confidence": "high",
365
+ "human_review_required": false,
366
+ "level": "core"
367
+ },
368
+ "visibility": "internal",
369
+ "workspaces": [
370
+ "agent-config-maintainer"
371
+ ]
372
+ },
346
373
  {
347
374
  "category": "command",
348
375
  "checksum": "sha256:f683932f0800d67218f4b6755754c642c771d5810df98673ada7b86b83b0e0cb",
@@ -2197,7 +2224,7 @@
2197
2224
  },
2198
2225
  {
2199
2226
  "category": "command",
2200
- "checksum": "sha256:5761308d6ef9e22fcf889050bd2227d8fcc13a27ab0434e9285feca267bbb7fe",
2227
+ "checksum": "sha256:a0f4f127de5049d9f71402376fff6ae28e54d5ff5dfa33fdf0a8a6340159abd9",
2201
2228
  "install": {
2202
2229
  "default": true,
2203
2230
  "removable": false
@@ -2520,7 +2547,7 @@
2520
2547
  },
2521
2548
  {
2522
2549
  "category": "command",
2523
- "checksum": "sha256:b1e06ef4c8daa3d3649d68920dbf2eb61db7057b367331a378a38cdbdf0f8f84",
2550
+ "checksum": "sha256:b718faefe3c50937e0b4851d26086d9aa8a9573c74e3e9fd371d2d0935acaa02",
2524
2551
  "install": {
2525
2552
  "default": true,
2526
2553
  "removable": false
@@ -3895,7 +3922,7 @@
3895
3922
  },
3896
3923
  {
3897
3924
  "category": "command",
3898
- "checksum": "sha256:8d57eccdcbacf29ec8e9496b74c7fea67bccd42f46f87f2583b73b9b1779d184",
3925
+ "checksum": "sha256:3dff6078333dc4e2bd65a31b5bcd4e9b27a47db078512c46089710598f9676af",
3899
3926
  "install": {
3900
3927
  "default": true,
3901
3928
  "removable": false
@@ -5785,7 +5812,7 @@
5785
5812
  },
5786
5813
  {
5787
5814
  "category": "rule",
5788
- "checksum": "sha256:e40b9270844db96ca7a1a9f4cd7d4022422c2b38ddb20c614be3bcd4e67250f5",
5815
+ "checksum": "sha256:d95d6d4c55278fb84146975e05631e9d164b83c07d6ce7a8096f6775231be656",
5789
5816
  "install": {
5790
5817
  "default": true,
5791
5818
  "removable": false
@@ -6139,7 +6166,7 @@
6139
6166
  },
6140
6167
  {
6141
6168
  "category": "rule",
6142
- "checksum": "sha256:7c3edcfe77a3d70428b57a1764a4e2bbfbc78e3d638154f458ddf12aad173550",
6169
+ "checksum": "sha256:069e5a5de50e4bb6cbc5a8bf1b3f6c121ca74f5c92340cb9f92c756e53646eab",
6143
6170
  "install": {
6144
6171
  "default": true,
6145
6172
  "removable": false
@@ -7639,7 +7666,7 @@
7639
7666
  },
7640
7667
  {
7641
7668
  "category": "rule",
7642
- "checksum": "sha256:a443bc5e7fdf06faa3f54e839d21766ce90fe02183a932c6d49ae22247ef0629",
7669
+ "checksum": "sha256:67d557ae3f379a347dea88c6917a6a3ef08a723b34b77df5fb48995974b49634",
7643
7670
  "install": {
7644
7671
  "default": true,
7645
7672
  "removable": false
@@ -7660,7 +7687,7 @@
7660
7687
  },
7661
7688
  {
7662
7689
  "category": "rule",
7663
- "checksum": "sha256:4582c93543e7ca4f0b44bf4456c20d1952b26ab786e88e7de0f640209be02af8",
7690
+ "checksum": "sha256:724249e7b81f90b29f949d90d08f70be0c2885227a10b88db0b525455bca07e5",
7664
7691
  "install": {
7665
7692
  "default": true,
7666
7693
  "removable": false
@@ -7681,7 +7708,7 @@
7681
7708
  },
7682
7709
  {
7683
7710
  "category": "rule",
7684
- "checksum": "sha256:3b170640629262dbab7e68546c55da0a620019e67b8b286f1a54e775bd5ff21f",
7711
+ "checksum": "sha256:a10e1753c1aa893a1149361e18d3511f34273ef424f7ee7bbbf795b0cbd75d6a",
7685
7712
  "install": {
7686
7713
  "default": true,
7687
7714
  "removable": false
@@ -7754,7 +7781,7 @@
7754
7781
  },
7755
7782
  {
7756
7783
  "category": "rule",
7757
- "checksum": "sha256:850560f747198febdb3840c63ca754042efe4f305752678d07d087f9575eaed9",
7784
+ "checksum": "sha256:3091d3577b9f2caaff45c6d96805f932b5833c0713811962a78b7725fb97b7f0",
7758
7785
  "install": {
7759
7786
  "default": true,
7760
7787
  "removable": false
@@ -7966,7 +7993,7 @@
7966
7993
  },
7967
7994
  {
7968
7995
  "category": "skill",
7969
- "checksum": "sha256:cdaa8f128289dbe31843da7ccbefd35bca719cc38d904f0f28505e72380556c8",
7996
+ "checksum": "sha256:e906f289f79df96b79e55c4c664c94c4a860b814c9ec1ddc5535d0655a554278",
7970
7997
  "install": {
7971
7998
  "default": true,
7972
7999
  "removable": false
@@ -9264,7 +9291,7 @@
9264
9291
  },
9265
9292
  {
9266
9293
  "category": "skill",
9267
- "checksum": "sha256:21fe1e1cab3bf7e739a0e3dbfe48ec60c0da59caae1c791b7003e1ccb1f6f42e",
9294
+ "checksum": "sha256:e472a98d0fca4325a390a3825aa93c62718ee3b498ebbb12ae97086d35a50c81",
9268
9295
  "install": {
9269
9296
  "default": false,
9270
9297
  "removable": true
@@ -10474,7 +10501,7 @@
10474
10501
  },
10475
10502
  {
10476
10503
  "category": "skill",
10477
- "checksum": "sha256:347c6d2b24c194b612e81b623a7c82dd2f19177bdc0d374a83576767726819f9",
10504
+ "checksum": "sha256:4cfa4a561b9ac89012273b08b8e2f126a97bacfed1b0ba6cc7db15f08d9e1577",
10478
10505
  "install": {
10479
10506
  "default": true,
10480
10507
  "removable": false
@@ -10496,7 +10523,7 @@
10496
10523
  },
10497
10524
  {
10498
10525
  "category": "skill",
10499
- "checksum": "sha256:ab91a9991075ef6d11c9f7d6fad4d6ad345faf94f51f69b74f461c42ae215756",
10526
+ "checksum": "sha256:bdbc3ecb5c920deed2622704b1a6c0a5f6c6e57a5f90cbbf7befbc6509b30ce1",
10500
10527
  "install": {
10501
10528
  "default": true,
10502
10529
  "removable": false
@@ -10584,7 +10611,7 @@
10584
10611
  },
10585
10612
  {
10586
10613
  "category": "skill",
10587
- "checksum": "sha256:a5e6ac0ab70da7762c4b958cb6c24b75a437c33235a4c39b09b80265de38cbaf",
10614
+ "checksum": "sha256:c125c12dd1d061aaaa36c88a2df187e2bf60376adbb36ef819b1f1752279fb76",
10588
10615
  "install": {
10589
10616
  "default": true,
10590
10617
  "removable": false
@@ -13010,7 +13037,7 @@
13010
13037
  },
13011
13038
  {
13012
13039
  "category": "skill",
13013
- "checksum": "sha256:28728406da80f3d423c8a669ed6ef1e3faccfa19265bd10135297036ae894fcf",
13040
+ "checksum": "sha256:8e31ba9d6efb3beff58d0f5a70b17da12e28dd1521ecc7f87ca3e9e2f7ddb540",
13014
13041
  "install": {
13015
13042
  "default": true,
13016
13043
  "removable": false
@@ -13296,7 +13323,7 @@
13296
13323
  },
13297
13324
  {
13298
13325
  "category": "skill",
13299
- "checksum": "sha256:9cc346f0e7f88185a7639c4cdd08fb35ded3eb1481b80cb8b13fff619fcb14b9",
13326
+ "checksum": "sha256:a2d0b436a6c8d7e5204649c931cfe4061e056042beb4637968d2a61ab6754e1d",
13300
13327
  "install": {
13301
13328
  "default": true,
13302
13329
  "removable": false
@@ -13340,7 +13367,7 @@
13340
13367
  },
13341
13368
  {
13342
13369
  "category": "skill",
13343
- "checksum": "sha256:f97d62367254a4e27aa428ed7940a59e4679a2ac59c8d254b73373033efa1dd6",
13370
+ "checksum": "sha256:1cdc1593d6e137f825e6c07db6356988f00de4a27fc74773f3330c4af3706c79",
13344
13371
  "install": {
13345
13372
  "default": true,
13346
13373
  "removable": false
@@ -14259,7 +14286,7 @@
14259
14286
  "workspaces": []
14260
14287
  }
14261
14288
  ],
14262
- "checksum": "sha256:acdebb0b72b50f8026c14b11df8706155fb82ba5c44cff7fa47b6e019052d156",
14289
+ "checksum": "sha256:25d23ff012559eedfa9cb9d1fa4be4f281eb1e5459190acc0877bfc41bda861b",
14263
14290
  "deprecations": [
14264
14291
  {
14265
14292
  "key": "tier",
@@ -14402,7 +14429,7 @@
14402
14429
  "reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
14403
14430
  }
14404
14431
  ],
14405
- "generated_at": "2026-08-05T05:32:20Z",
14432
+ "generated_at": "2026-08-06T06:45:33Z",
14406
14433
  "packs": [
14407
14434
  {
14408
14435
  "artefact_count": 117,
@@ -15125,7 +15152,7 @@
15125
15152
  },
15126
15153
  {
15127
15154
  "always_on": true,
15128
- "artefact_count": 289,
15155
+ "artefact_count": 290,
15129
15156
  "description": "Artefacts that maintain this package (agent-config itself).",
15130
15157
  "domain": "meta",
15131
15158
  "human_review_required": 0,
@@ -15141,7 +15168,7 @@
15141
15168
  "trust_level_default": "core",
15142
15169
  "trust_summary": {
15143
15170
  "advisory": 0,
15144
- "core": 287,
15171
+ "core": 288,
15145
15172
  "experimental": 2,
15146
15173
  "professional": 0,
15147
15174
  "restricted": 0
@@ -15232,27 +15259,27 @@
15232
15259
  "scanner_version": "c24312e116f8",
15233
15260
  "stats": {
15234
15261
  "by_category": {
15235
- "command": 193,
15262
+ "command": 194,
15236
15263
  "rule": 111,
15237
15264
  "skill": 288,
15238
15265
  "subagent": 1,
15239
15266
  "template": 1
15240
15267
  },
15241
15268
  "by_lifecycle": {
15242
- "active": 577,
15269
+ "active": 578,
15243
15270
  "archived": 0,
15244
15271
  "deprecated": 0,
15245
15272
  "experimental": 17
15246
15273
  },
15247
15274
  "by_trust_level": {
15248
15275
  "advisory": 8,
15249
- "core": 462,
15276
+ "core": 463,
15250
15277
  "experimental": 22,
15251
15278
  "professional": 102,
15252
15279
  "restricted": 0
15253
15280
  },
15254
15281
  "documented_unassigned_count": 26,
15255
- "total_artefacts": 594,
15282
+ "total_artefacts": 595,
15256
15283
  "unassigned_count": 0
15257
15284
  },
15258
15285
  "unassigned": [],
@@ -1 +1 @@
1
- afd8d19ae939ff4cc011583591c8ae9f88601d301d808874f41cfb43f0d1122a discovery-manifest.json
1
+ 7ae76e70276464f1f360914be34d1498a4c4cf21195ce2e73b9086092b8cf129 discovery-manifest.json
@@ -1,8 +1,8 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-08-05T05:32:20Z`
3
+ - Generated: `2026-08-06T06:45:33Z`
4
4
  - Scanner: `c24312e116f8`
5
- - Artefacts: **594**
5
+ - Artefacts: **595**
6
6
  - Unassigned: **0**
7
7
 
8
8
  ## `engineering` — Engineering
@@ -105,7 +105,7 @@
105
105
 
106
106
  | Pack | Artefacts |
107
107
  |---|---|
108
- | `meta` — Meta | 289 |
108
+ | `meta` — Meta | 290 |
109
109
  | `memory` — Memory | 9 |
110
110
  | `analytics` — Analytics | 4 |
111
111
  | `product-reasoning` — Product Reasoning | 11 |
@@ -1,6 +1,6 @@
1
1
  # Discovery — Orphan Report
2
2
 
3
- - Generated: `2026-08-05T05:32:20Z`
3
+ - Generated: `2026-08-06T06:45:33Z`
4
4
  - Orphan artefacts: **0**
5
5
 
6
6
  > An orphan is an artefact whose declared pack has no other members.
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:acdebb0b72b50f8026c14b11df8706155fb82ba5c44cff7fa47b6e019052d156",
3
- "generated_at": "2026-08-05T05:32:20Z",
2
+ "checksum": "sha256:25d23ff012559eedfa9cb9d1fa4be4f281eb1e5459190acc0877bfc41bda861b",
3
+ "generated_at": "2026-08-06T06:45:33Z",
4
4
  "packs": [
5
5
  {
6
6
  "always_on": false,
@@ -1313,7 +1313,7 @@
1313
1313
  },
1314
1314
  {
1315
1315
  "always_on": true,
1316
- "artefact_count": 289,
1316
+ "artefact_count": 290,
1317
1317
  "artefacts": [
1318
1318
  "src/agent-src/templates/agents/proposal.example.md",
1319
1319
  "src/domains/ai-video/image/analyse/command.md",
@@ -1326,6 +1326,7 @@
1326
1326
  "src/domains/ai-video/video/scene/command.md",
1327
1327
  "src/domains/ai-video/video/stitch/command.md",
1328
1328
  "src/domains/ai-video/video/storyboard/command.md",
1329
+ "src/domains/analysis-workbench/analyze/inbox/command.md",
1329
1330
  "src/domains/analysis-workbench/analyze/reference-repo/command.md",
1330
1331
  "src/domains/engineering-base/bug/command.md",
1331
1332
  "src/domains/engineering-base/bug/fix/command.md",
@@ -1606,14 +1607,14 @@
1606
1607
  "src/skills/verify-repair-loop/SKILL.md"
1607
1608
  ],
1608
1609
  "by_lifecycle": {
1609
- "active": 288,
1610
+ "active": 289,
1610
1611
  "archived": 0,
1611
1612
  "deprecated": 0,
1612
1613
  "experimental": 1
1613
1614
  },
1614
1615
  "by_trust_level": {
1615
1616
  "advisory": 0,
1616
- "core": 287,
1617
+ "core": 288,
1617
1618
  "experimental": 2,
1618
1619
  "professional": 0,
1619
1620
  "restricted": 0
@@ -1,6 +1,6 @@
1
1
  # Discovery — Trust Report
2
2
 
3
- - Generated: `2026-08-05T05:32:20Z`
3
+ - Generated: `2026-08-06T06:45:33Z`
4
4
  - Workspaces tracked: **10**
5
5
  - Human-review-required artefacts: **3**
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  | Workspace | core | professional | experimental | advisory | restricted |
10
10
  |---|---|---|---|---|---|
11
- | `agent-config-maintainer` | 318 | 0 | 3 | 0 | 0 |
11
+ | `agent-config-maintainer` | 319 | 0 | 3 | 0 | 0 |
12
12
  | `construction` | 25 | 0 | 0 | 0 | 0 |
13
13
  | `engineering` | 180 | 62 | 3 | 0 | 0 |
14
14
  | `finance` | 28 | 4 | 0 | 1 | 0 |
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:acdebb0b72b50f8026c14b11df8706155fb82ba5c44cff7fa47b6e019052d156",
3
- "generated_at": "2026-08-05T05:32:20Z",
2
+ "checksum": "sha256:25d23ff012559eedfa9cb9d1fa4be4f281eb1e5459190acc0877bfc41bda861b",
3
+ "generated_at": "2026-08-06T06:45:33Z",
4
4
  "scanner_version": "c24312e116f8",
5
5
  "workspaces": [
6
6
  {
@@ -623,7 +623,7 @@
623
623
  ]
624
624
  },
625
625
  {
626
- "artefact_count": 313,
626
+ "artefact_count": 314,
627
627
  "default_packs": [
628
628
  "meta",
629
629
  "memory",
@@ -636,7 +636,7 @@
636
636
  "optional_packs": [],
637
637
  "packs": [
638
638
  {
639
- "artefact_count": 289,
639
+ "artefact_count": 290,
640
640
  "artefacts": [
641
641
  "src/agent-src/templates/agents/proposal.example.md",
642
642
  "src/domains/ai-video/image/analyse/command.md",
@@ -649,6 +649,7 @@
649
649
  "src/domains/ai-video/video/scene/command.md",
650
650
  "src/domains/ai-video/video/stitch/command.md",
651
651
  "src/domains/ai-video/video/storyboard/command.md",
652
+ "src/domains/analysis-workbench/analyze/inbox/command.md",
652
653
  "src/domains/analysis-workbench/analyze/reference-repo/command.md",
653
654
  "src/domains/engineering-base/bug/command.md",
654
655
  "src/domains/engineering-base/bug/fix/command.md",
@@ -19536,6 +19536,55 @@ var CONCERN_REGISTRY = {
19536
19536
  "src/scripts/hooks/code_graph_nudge_hook.ts": main29
19537
19537
  };
19538
19538
 
19539
+ // src/scripts/hooks/host_semantics.ts
19540
+ var VERIFIED_PLATFORMS = /* @__PURE__ */ new Set(["claude"]);
19541
+ var CLAUDE_HOOK_EVENT_NAME = {
19542
+ pre_tool_use: "PreToolUse",
19543
+ post_tool_use: "PostToolUse",
19544
+ user_prompt_submit: "UserPromptSubmit",
19545
+ session_start: "SessionStart",
19546
+ session_end: "SessionEnd",
19547
+ stop: "Stop",
19548
+ pre_compact: "PreCompact"
19549
+ };
19550
+ var CLAUDE_BLOCK_CAPABLE_EVENTS = /* @__PURE__ */ new Set([
19551
+ "pre_tool_use",
19552
+ "user_prompt_submit",
19553
+ "stop"
19554
+ ]);
19555
+ function _joinReasons(reasons) {
19556
+ return reasons.map((r) => r.trim()).filter((r) => r.length > 0).join(" \xB7 ");
19557
+ }
19558
+ function claudeAdditionalContext(event, text) {
19559
+ const hookEventName = CLAUDE_HOOK_EVENT_NAME[event] ?? event;
19560
+ return `${JSON.stringify({
19561
+ hookSpecificOutput: { hookEventName, additionalContext: text }
19562
+ })}
19563
+ `;
19564
+ }
19565
+ function emitFor(platform, event, severity, reasons, legacyExit) {
19566
+ if (!VERIFIED_PLATFORMS.has(platform)) {
19567
+ return { exit: legacyExit, stdout: "", stderr: "" };
19568
+ }
19569
+ const reason = _joinReasons(reasons);
19570
+ if (severity === "allow") {
19571
+ return { exit: 0, stdout: "", stderr: "" };
19572
+ }
19573
+ if (severity === "block") {
19574
+ if (CLAUDE_BLOCK_CAPABLE_EVENTS.has(event)) {
19575
+ const label2 = reason || "blocked by agent-config hook policy";
19576
+ return { exit: 2, stdout: "", stderr: `${label2}
19577
+ ` };
19578
+ }
19579
+ const label = reason || "agent-config hook reported a blocking finding";
19580
+ return { exit: 0, stdout: claudeAdditionalContext(event, label), stderr: "" };
19581
+ }
19582
+ if (!reason) {
19583
+ return { exit: 0, stdout: "", stderr: "" };
19584
+ }
19585
+ return { exit: 0, stdout: claudeAdditionalContext(event, reason), stderr: "" };
19586
+ }
19587
+
19539
19588
  // src/scripts/hooks/dispatch_hook.ts
19540
19589
  var _IN_BUNDLE = true;
19541
19590
  var REPO_ROOT = path41.resolve(
@@ -19567,6 +19616,9 @@ function _isObject9(v) {
19567
19616
  function _severity_for(rc) {
19568
19617
  return _SEVERITY_BY_EXIT[rc] ?? "error";
19569
19618
  }
19619
+ function _is_advisory(concern) {
19620
+ return String(concern["severity"] ?? "").trim().toLowerCase() === "advisory";
19621
+ }
19570
19622
  function _now_iso3() {
19571
19623
  return (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z");
19572
19624
  }
@@ -20166,6 +20218,7 @@ function main30(argv) {
20166
20218
  const rcs = [];
20167
20219
  const feedback_entries = [];
20168
20220
  const context_blocks = [];
20221
+ const concern_messages = [];
20169
20222
  for (const concern of concerns) {
20170
20223
  const concern_started = _now_iso3();
20171
20224
  const { rc: rawRcResult, stderr: stderr_text, stdout: stdout_text, duration_ms } = _run_concern(concern, envelope);
@@ -20181,8 +20234,19 @@ function main30(argv) {
20181
20234
  process.stderr.write(stderr_text);
20182
20235
  }
20183
20236
  }
20237
+ if (rc === EXIT_BLOCK2 && _is_advisory(concern)) {
20238
+ process.stderr.write(
20239
+ `dispatch_hook: concern '${String(concern["name"])}' is declared severity: advisory but returned BLOCK \u2014 downgraded to warn.
20240
+ `
20241
+ );
20242
+ rc = EXIT_WARN7;
20243
+ }
20184
20244
  rcs.push(rc);
20185
20245
  const reply = _parse_concern_stdout(stdout_text);
20246
+ const stated = typeof reply["reason"] === "string" && reply["reason"].trim() ? reply["reason"].trim() : stderr_text.trim();
20247
+ if (stated) {
20248
+ concern_messages.push({ rc, text: stated });
20249
+ }
20186
20250
  if (args.event === "session_start" && rc === EXIT_ALLOW9 && typeof reply["context"] === "string" && reply["context"].trim()) {
20187
20251
  context_blocks.push(reply["context"].trim());
20188
20252
  }
@@ -20205,7 +20269,21 @@ function main30(argv) {
20205
20269
  if (context_blocks.length > 0 && final_rc === EXIT_ALLOW9) {
20206
20270
  process.stdout.write(context_blocks.join("\n\n") + "\n");
20207
20271
  }
20208
- return final_rc;
20272
+ const decidingReasons = concern_messages.filter((m) => m.rc === final_rc).map((m) => m.text);
20273
+ const emission = emitFor(
20274
+ args.platform,
20275
+ args.event,
20276
+ _severity_for(final_rc),
20277
+ decidingReasons,
20278
+ final_rc
20279
+ );
20280
+ if (emission.stdout) {
20281
+ process.stdout.write(emission.stdout);
20282
+ }
20283
+ if (emission.stderr) {
20284
+ process.stderr.write(emission.stderr);
20285
+ }
20286
+ return emission.exit;
20209
20287
  }
20210
20288
  function _isDir4(p) {
20211
20289
  try {
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "discovery": {
3
- "artefact_count": 594,
3
+ "artefact_count": 595,
4
4
  "scanner_version": "c24312e116f8"
5
5
  },
6
- "generated_at": "2026-08-05",
6
+ "generated_at": "2026-08-06",
7
7
  "package": {
8
8
  "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) \u2014 every claim machine-checked, including \"zero runtime daemon\".",
9
9
  "homepage": "https://event4u-app.github.io/agent-config",
10
10
  "name": "@event4u/agent-config",
11
11
  "repository": "https://github.com/event4u-app/agent-config",
12
- "version": "9.22.0"
12
+ "version": "9.24.0"
13
13
  },
14
14
  "registries": [
15
15
  {
@@ -9,12 +9,12 @@
9
9
  "transport": {
10
10
  "type": "stdio"
11
11
  },
12
- "version": "9.22.0"
12
+ "version": "9.24.0"
13
13
  }
14
14
  ],
15
15
  "repository": {
16
16
  "source": "github",
17
17
  "url": "https://github.com/event4u-app/agent-config"
18
18
  },
19
- "version": "9.22.0"
19
+ "version": "9.24.0"
20
20
  }
@@ -940,12 +940,51 @@ function _read_rule_packs() {
940
940
  * compiles and behaves unchanged.
941
941
  */
942
942
  /** List rule basenames under RULES_SOURCE, workspace/pack scope applied. */
943
+ /**
944
+ * Is this rule `type: manual` (ADR-004 reference-only)?
945
+ *
946
+ * The schema is explicit: `manual` = "no auto-injection (zero workspace-budget
947
+ * cost); file remains as a reference document linkable from skills/contexts."
948
+ * `compile_router` already honours the first half by omitting manual rules from
949
+ * `dist/router.json`. The per-tool projection did NOT: it symlinked them into
950
+ * `.claude/rules/` (and siblings), so under the default `eager-all` projection
951
+ * their full bodies were injected every turn — the exact opposite of "zero
952
+ * workspace-budget cost". `brand-consistency` is the clearest case: its own body
953
+ * says "reference-only, no router emission", and it shipped in context anyway.
954
+ *
955
+ * Excluded from the per-tool trees ONLY. The file keeps its place in
956
+ * `dist/agent-src/rules/`, which is what "remains as a reference document
957
+ * linkable" requires — inbound cross-references must still resolve.
958
+ */
959
+ function _is_manual_rule(rule_path) {
960
+ let content;
961
+ try {
962
+ content = fs.readFileSync(rule_path, 'utf-8');
963
+ }
964
+ catch {
965
+ return false; // unreadable → fail open, same posture as the scope filters
966
+ }
967
+ const [fm_lines] = _split_frontmatter(content);
968
+ if (fm_lines === null) {
969
+ return false;
970
+ }
971
+ for (const line of fm_lines) {
972
+ const m = /^type:\s*["']?([a-z]+)["']?\s*$/.exec(line);
973
+ if (m) {
974
+ return m[1] === 'manual';
975
+ }
976
+ }
977
+ return false;
978
+ }
943
979
  function _scoped_rule_basenames() {
944
980
  const scope = _read_rule_workspaces();
945
981
  const pack_scope = _read_rule_packs();
946
982
  return _iterdirSorted(MODULE_STATE.RULES_SOURCE)
947
983
  .filter((p) => p.endsWith('.md') && _isFile(p))
948
984
  .filter((p) => rule_in_scope(p, scope, pack_scope))
985
+ // ADR-004: a manual rule costs zero workspace budget, so it never gets a
986
+ // per-tool symlink regardless of projection mode. See _is_manual_rule.
987
+ .filter((p) => !_is_manual_rule(p))
949
988
  // A compile-disabled rule has no dist/agent-src/ counterpart, so a per-tool
950
989
  // symlink to it would dangle. The source file still exists, which is why the
951
990
  // scope filters alone let it through — the toggle is a separate axis and this
@@ -1179,7 +1218,10 @@ export function generate_cursor_mdc_rules() {
1179
1218
  const pack_scope = _read_rule_packs();
1180
1219
  const rules = _rglobSorted(MODULE_STATE.RULES_SOURCE, '*.md')
1181
1220
  .filter((p) => _isFile(p))
1182
- .filter((p) => rule_in_scope(p, scope, pack_scope));
1221
+ .filter((p) => rule_in_scope(p, scope, pack_scope))
1222
+ // ADR-004 manual rules are reference-only — never auto-injected into a
1223
+ // per-tool tree. Same predicate as generate_rule_symlinks.
1224
+ .filter((p) => !_is_manual_rule(p));
1183
1225
  const stems = rules.map((r) => path.basename(r, '.md'));
1184
1226
  const valid = new Set([
1185
1227
  ...stems.map((s) => `${s}.mdc`),
@@ -1197,7 +1239,10 @@ export function generate_windsurf_modern_rules() {
1197
1239
  const pack_scope = _read_rule_packs();
1198
1240
  const rules = _rglobSorted(MODULE_STATE.RULES_SOURCE, '*.md')
1199
1241
  .filter((p) => _isFile(p))
1200
- .filter((p) => rule_in_scope(p, scope, pack_scope));
1242
+ .filter((p) => rule_in_scope(p, scope, pack_scope))
1243
+ // ADR-004 manual rules are reference-only — never auto-injected into a
1244
+ // per-tool tree. Same predicate as generate_rule_symlinks.
1245
+ .filter((p) => !_is_manual_rule(p));
1201
1246
  const valid = new Set(rules.map((r) => path.basename(r)));
1202
1247
  _clean_modern_dir(_WINDSURF_RULES_DIR(), valid);
1203
1248
  for (const rule of rules) {