mishkan-harness 0.2.0 → 0.2.4

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 (116) hide show
  1. package/README.md +108 -172
  2. package/bin/mishkan.js +677 -16
  3. package/docs/design/MISHKAN_decisions.md +450 -8
  4. package/docs/design/MISHKAN_harness_design.md +1 -33
  5. package/docs/design/MISHKAN_observability.md +13 -9
  6. package/docs/engineer/profile-readable.md +201 -0
  7. package/docs/engineer/profile.md +754 -0
  8. package/docs/research/graphify-token-saving-poc.md +108 -0
  9. package/docs/usage/09-workflows.md +74 -4
  10. package/docs/usage/10-observability.md +37 -13
  11. package/docs/usage/11-graphify.md +264 -0
  12. package/docs/usage/12-skill-discovery.md +294 -0
  13. package/docs/usage/README.md +5 -3
  14. package/package.json +1 -1
  15. package/payload/install/settings.hooks.json +24 -0
  16. package/payload/mishkan/AGENT_SPEC.md +25 -7
  17. package/payload/mishkan/agents/ahikam.md +4 -2
  18. package/payload/mishkan/agents/aholiab.md +4 -2
  19. package/payload/mishkan/agents/asaph.md +5 -2
  20. package/payload/mishkan/agents/baruch.md +19 -2
  21. package/payload/mishkan/agents/benaiah.md +4 -2
  22. package/payload/mishkan/agents/bezalel.md +4 -2
  23. package/payload/mishkan/agents/caleb.md +4 -2
  24. package/payload/mishkan/agents/deborah.md +4 -2
  25. package/payload/mishkan/agents/elasah.md +4 -2
  26. package/payload/mishkan/agents/eliashib.md +4 -2
  27. package/payload/mishkan/agents/ezra.md +4 -2
  28. package/payload/mishkan/agents/hanun.md +5 -2
  29. package/payload/mishkan/agents/hiram.md +5 -2
  30. package/payload/mishkan/agents/hizkiah.md +5 -2
  31. package/payload/mishkan/agents/huldah.md +4 -2
  32. package/payload/mishkan/agents/huram.md +4 -2
  33. package/payload/mishkan/agents/hushai.md +5 -2
  34. package/payload/mishkan/agents/igal.md +4 -2
  35. package/payload/mishkan/agents/ira.md +5 -2
  36. package/payload/mishkan/agents/jahaziel.md +5 -2
  37. package/payload/mishkan/agents/jakin.md +4 -2
  38. package/payload/mishkan/agents/jehonathan.md +5 -2
  39. package/payload/mishkan/agents/jehoshaphat.md +4 -2
  40. package/payload/mishkan/agents/joab.md +5 -2
  41. package/payload/mishkan/agents/joah.md +5 -2
  42. package/payload/mishkan/agents/maaseiah.md +4 -2
  43. package/payload/mishkan/agents/meremoth.md +5 -2
  44. package/payload/mishkan/agents/meshullam.md +5 -2
  45. package/payload/mishkan/agents/nathan.md +5 -2
  46. package/payload/mishkan/agents/nehemiah.md +4 -2
  47. package/payload/mishkan/agents/obed.md +4 -2
  48. package/payload/mishkan/agents/oholiab.md +5 -2
  49. package/payload/mishkan/agents/palal.md +5 -2
  50. package/payload/mishkan/agents/phinehas.md +4 -2
  51. package/payload/mishkan/agents/rehum.md +4 -2
  52. package/payload/mishkan/agents/salma.md +5 -2
  53. package/payload/mishkan/agents/seraiah.md +4 -2
  54. package/payload/mishkan/agents/shallum.md +5 -2
  55. package/payload/mishkan/agents/shaphan.md +4 -2
  56. package/payload/mishkan/agents/shemaiah.md +4 -2
  57. package/payload/mishkan/agents/shevna.md +5 -2
  58. package/payload/mishkan/agents/uriah.md +5 -2
  59. package/payload/mishkan/agents/zaccur.md +4 -2
  60. package/payload/mishkan/agents/zadok.md +5 -2
  61. package/payload/mishkan/agents/zerubbabel.md +4 -2
  62. package/payload/mishkan/commands/code-graph.md +35 -0
  63. package/payload/mishkan/commands/eval-baruch.md +57 -0
  64. package/payload/mishkan/commands/mishkan-org-reference.md +58 -0
  65. package/payload/mishkan/commands/mishkan-resume.md +19 -5
  66. package/payload/mishkan/commands/mishkan-skills-misses.md +47 -0
  67. package/payload/mishkan/commands/mishkan-skills-reindex.md +33 -0
  68. package/payload/mishkan/commands/skills.md +35 -0
  69. package/payload/mishkan/commands/sprint-close.md +3 -1
  70. package/payload/mishkan/hooks/pre-tool-knowledge-route.sh +231 -0
  71. package/payload/mishkan/hooks/pre-tool-task-skill-route.sh +122 -0
  72. package/payload/mishkan/hooks/session-start-skill-index.sh +35 -0
  73. package/payload/mishkan/observability/schema.json +1 -1
  74. package/payload/mishkan/observability/watch/src/mishkan_watch/__main__.py +84 -2
  75. package/payload/mishkan/observability/watch/src/mishkan_watch/app.py +64 -3
  76. package/payload/mishkan/observability/watch/src/mishkan_watch/org_data.py +79 -0
  77. package/payload/mishkan/observability/watch/src/mishkan_watch/skills_data.py +267 -0
  78. package/payload/mishkan/observability/watch/src/mishkan_watch/tabs/agents.py +33 -1
  79. package/payload/mishkan/observability/watch/src/mishkan_watch/tabs/knowledge.py +118 -9
  80. package/payload/mishkan/observability/watch/src/mishkan_watch/tabs/live.py +102 -2
  81. package/payload/mishkan/observability/watch/src/mishkan_watch/tabs/org.py +139 -0
  82. package/payload/mishkan/observability/watch/src/mishkan_watch/tabs/skills.py +187 -0
  83. package/payload/mishkan/observability/watch/src/mishkan_watch/tabs/usage.py +377 -0
  84. package/payload/mishkan/observability/watch/src/mishkan_watch/tabs/workflows.py +199 -27
  85. package/payload/mishkan/observability/watch/src/mishkan_watch/theme.tcss +78 -4
  86. package/payload/mishkan/observability/watchd/src/mishkan_watchd/__main__.py +36 -6
  87. package/payload/mishkan/observability/watchd/src/mishkan_watchd/sources/bus_tail.py +16 -3
  88. package/payload/mishkan/observability/watchd/src/mishkan_watchd/sources/graphify_tail.py +220 -0
  89. package/payload/mishkan/observability/watchd/src/mishkan_watchd/sources/worktree_poll.py +13 -2
  90. package/payload/mishkan/observability/watchd/src/mishkan_watchd/state.py +157 -3
  91. package/payload/mishkan/observability/watchd/tests/test_state.py +6 -2
  92. package/payload/mishkan/org/org.json +141 -0
  93. package/payload/mishkan/scripts/pre-commit-eval-gate.sh +50 -0
  94. package/payload/mishkan/scripts/skill-discovery-indexer.py +462 -0
  95. package/payload/mishkan/scripts/skill-discovery-misses.py +173 -0
  96. package/payload/mishkan/scripts/skill-discovery-router.py +457 -0
  97. package/payload/mishkan/scripts/skill-discovery-smoke.sh +156 -0
  98. package/payload/mishkan/skills/graphify-query-craft/SKILL.md +162 -0
  99. package/payload/mishkan/skills/mishkan-init/SKILL.md +15 -0
  100. package/payload/mishkan/skills/skill-discovery/SKILL.md +120 -0
  101. package/payload/mishkan/templates/case-node.schema.json +1 -0
  102. package/payload/mishkan/templates/observability-log.schema.json +1 -0
  103. package/payload/mishkan/workflows/README.md +78 -13
  104. package/payload/mishkan/workflows/chosheb-feature-ship.js +75 -0
  105. package/payload/mishkan/workflows/migdal-dr-drill.js +94 -0
  106. package/payload/mishkan/workflows/migdal-infra-change.js +67 -0
  107. package/payload/mishkan/workflows/mishkan-blast-radius.js +144 -0
  108. package/payload/mishkan/workflows/mishkan-init.js +58 -0
  109. package/payload/mishkan/workflows/mishkan-knowledge-gap-discovery.js +121 -0
  110. package/payload/mishkan/workflows/mishkan-standards-rollout.js +153 -0
  111. package/payload/mishkan/workflows/mishmar-security-gate.js +83 -0
  112. package/payload/mishkan/workflows/panim-ds-rollout.js +83 -0
  113. package/payload/mishkan/workflows/sefer-release-notes.js +85 -0
  114. package/payload/mishkan/workflows/yasad-data-migration-wave.js +78 -0
  115. package/payload/mishkan/workflows/yasad-schema-evolution.js +76 -0
  116. package/payload/mishkan/templates/user-CLAUDE.md +0 -62
@@ -62,5 +62,7 @@ Approval gate via `/plan`. pnpm only. WCAG 2.2 AA. Core Web Vitals budgets.
62
62
 
63
63
  ## Dynamic Context Injection Point
64
64
 
65
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
66
- Everything above this line is the cacheable static role prefix. -->
65
+ <!-- Cacheable prefix boundary. Everything above this line must stay
66
+ byte-identical between calls for prompt caching to fire. Project
67
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
68
+ parent session context, not injected here. -->
@@ -42,6 +42,7 @@ you do not write or block code (that is Ira/Joab/Benaiah).
42
42
  ## Skills (invoke on demand)
43
43
 
44
44
  - `hushai-security-advisor-craft` — ASVS prioritisation + delivery-vs-security counsel; advisory-only
45
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
45
46
  - `security-threat-model` — advisory threat-model review
46
47
  - `code-review-security` — advisory security review
47
48
 
@@ -55,5 +56,7 @@ facts. English for all output.
55
56
 
56
57
  ## Dynamic Context Injection Point
57
58
 
58
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
59
- Everything above this line is the cacheable static role prefix. -->
59
+ <!-- Cacheable prefix boundary. Everything above this line must stay
60
+ byte-identical between calls for prompt caching to fire. Project
61
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
62
+ parent session context, not injected here. -->
@@ -54,5 +54,7 @@ No `/plan` (collect-only role).
54
54
 
55
55
  ## Dynamic Context Injection Point
56
56
 
57
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
58
- Everything above this line is the cacheable static role prefix. -->
57
+ <!-- Cacheable prefix boundary. Everything above this line must stay
58
+ byte-identical between calls for prompt caching to fire. Project
59
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
60
+ parent session context, not injected here. -->
@@ -65,6 +65,7 @@ finding:
65
65
  ## Skills (invoke on demand)
66
66
 
67
67
  - `ira-code-security-craft` — any code-level security review (the
68
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
68
69
  pre-block rubric, the false-positive guard list, severity calibration,
69
70
  and durable remediation patterns — the depth lives in this skill)
70
71
  - `code-review-security` — code-level security review
@@ -82,5 +83,7 @@ facts. English for all output.
82
83
 
83
84
  ## Dynamic Context Injection Point
84
85
 
85
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
86
- Everything above this line is the cacheable static role prefix. -->
86
+ <!-- Cacheable prefix boundary. Everything above this line must stay
87
+ byte-identical between calls for prompt caching to fire. Project
88
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
89
+ parent session context, not injected here. -->
@@ -51,6 +51,7 @@ finding:
51
51
  ## Skills (invoke on demand)
52
52
 
53
53
  - `qa-evaluation-craft` — anchor-every-finding + structured-findings discipline (shared with uriah)
54
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
54
55
  - `e2e-testing-patterns` — front-end E2E review
55
56
  - `webapp-testing` — test strategy review
56
57
  - `javascript-testing-patterns` — unit/integration test review
@@ -67,5 +68,7 @@ No `/plan` (evaluate against known rules).
67
68
 
68
69
  ## Dynamic Context Injection Point
69
70
 
70
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
71
- Everything above this line is the cacheable static role prefix. -->
71
+ <!-- Cacheable prefix boundary. Everything above this line must stay
72
+ byte-identical between calls for prompt caching to fire. Project
73
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
74
+ parent session context, not injected here. -->
@@ -62,5 +62,7 @@ facts. English for all output.
62
62
 
63
63
  ## Dynamic Context Injection Point
64
64
 
65
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
66
- Everything above this line is the cacheable static role prefix. -->
65
+ <!-- Cacheable prefix boundary. Everything above this line must stay
66
+ byte-identical between calls for prompt caching to fire. Project
67
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
68
+ parent session context, not injected here. -->
@@ -43,6 +43,7 @@ You take structured graph knowledge and make it legible. You publish.
43
43
  ## Skills (invoke on demand)
44
44
 
45
45
  - `jehonathan-publication-craft` — Cognee query + Stripe-quality bar + source-grounded publication
46
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
46
47
  - `doc-coauthoring` — knowledge publication
47
48
  - `context-compress` — compress findings before publish
48
49
 
@@ -58,5 +59,7 @@ Diátaxis quadrant declared.
58
59
 
59
60
  ## Dynamic Context Injection Point
60
61
 
61
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
62
- Everything above this line is the cacheable static role prefix. -->
62
+ <!-- Cacheable prefix boundary. Everything above this line must stay
63
+ byte-identical between calls for prompt caching to fire. Project
64
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
65
+ parent session context, not injected here. -->
@@ -64,5 +64,7 @@ Diátaxis quadrant on every doc. MADR for ADRs. Keep a Changelog. No undated doc
64
64
 
65
65
  ## Dynamic Context Injection Point
66
66
 
67
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
68
- Everything above this line is the cacheable static role prefix. -->
67
+ <!-- Cacheable prefix boundary. Everything above this line must stay
68
+ byte-identical between calls for prompt caching to fire. Project
69
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
70
+ parent session context, not injected here. -->
@@ -53,6 +53,7 @@ finding:
53
53
  ## Skills (invoke on demand)
54
54
 
55
55
  - `joab-app-security-craft` — auth flows + CSRF/XSS + OWASP API Top 10 across surfaces
56
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
56
57
  - `api-security-best-practices` — API attack-surface review
57
58
  - `auth-implementation-patterns` — auth flow review
58
59
  - `code-review-security` — client/surface security review
@@ -67,5 +68,7 @@ facts. English for all output.
67
68
 
68
69
  ## Dynamic Context Injection Point
69
70
 
70
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
71
- Everything above this line is the cacheable static role prefix. -->
71
+ <!-- Cacheable prefix boundary. Everything above this line must stay
72
+ byte-identical between calls for prompt caching to fire. Project
73
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
74
+ parent session context, not injected here. -->
@@ -42,6 +42,7 @@ You document the specific project: its decisions, its operations, its history.
42
42
  ## Skills (invoke on demand)
43
43
 
44
44
  - `documentation-craft` — Diátaxis + pull-based discipline + source-grounded writing (shared with the other 2 Sefer scope specialists)
45
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
45
46
  - `architecture-decision-records` — project-layer ADRs
46
47
  - `doc-coauthoring` — runbook / changelog authoring
47
48
  - `changelog-automation` — release-note generation
@@ -58,5 +59,7 @@ MADR for ADRs. Keep a Changelog. Diátaxis quadrant.
58
59
 
59
60
  ## Dynamic Context Injection Point
60
61
 
61
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
62
- Everything above this line is the cacheable static role prefix. -->
62
+ <!-- Cacheable prefix boundary. Everything above this line must stay
63
+ byte-identical between calls for prompt caching to fire. Project
64
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
65
+ parent session context, not injected here. -->
@@ -57,5 +57,7 @@ No `/plan` (collect-only role).
57
57
 
58
58
  ## Dynamic Context Injection Point
59
59
 
60
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
61
- Everything above this line is the cacheable static role prefix. -->
60
+ <!-- Cacheable prefix boundary. Everything above this line must stay
61
+ byte-identical between calls for prompt caching to fire. Project
62
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
63
+ parent session context, not injected here. -->
@@ -44,6 +44,7 @@ You work the delivery layer: CI/CD, build, release automation.
44
44
  ## Skills (invoke on demand)
45
45
 
46
46
  - `meremoth-devops-craft` — pipeline stages + SOPS marshalling + CI-and-remote-script rule
47
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
47
48
  - `github-actions-templates` — GitHub Actions pipelines
48
49
  - `gitlab-ci-patterns` — GitLab CI pipelines
49
50
  - `deployment-pipeline-design` — release orchestration
@@ -61,5 +62,7 @@ No `:latest`. SOPS for secrets.
61
62
 
62
63
  ## Dynamic Context Injection Point
63
64
 
64
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
65
- Everything above this line is the cacheable static role prefix. -->
65
+ <!-- Cacheable prefix boundary. Everything above this line must stay
66
+ byte-identical between calls for prompt caching to fire. Project
67
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
68
+ parent session context, not injected here. -->
@@ -46,6 +46,7 @@ change, the alternatives, what is affected, the rollback path.
46
46
  ## Skills (invoke on demand)
47
47
 
48
48
  - `meshullam-infra-design-craft` — C4 + Compose/Terraform/Helm + default-deny networking
49
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
49
50
  - `deployment-pipeline-design` — delivery topology
50
51
  - `multi-cloud-architecture` — cross-cloud topology
51
52
  - `terraform-module-library` — Terraform module work
@@ -63,5 +64,7 @@ No `:latest`. All resources tagged. SOPS for secrets.
63
64
 
64
65
  ## Dynamic Context Injection Point
65
66
 
66
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
67
- Everything above this line is the cacheable static role prefix. -->
67
+ <!-- Cacheable prefix boundary. Everything above this line must stay
68
+ byte-identical between calls for prompt caching to fire. Project
69
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
70
+ parent session context, not injected here. -->
@@ -49,6 +49,7 @@ approval needed. Capture the outcome as an ADR (MADR) for Sefer to publish.
49
49
  ## Skills (invoke on demand)
50
50
 
51
51
  - `nathan-architecture-craft` — any architecture decision (how Nathan reasons,
52
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
52
53
  with worked examples — the depth lives in this skill, not in this file)
53
54
  - `architecture-decision-records` — writing ADRs
54
55
  - `microservices-patterns` — service decomposition decisions
@@ -66,5 +67,7 @@ Approval gate via `/plan`.
66
67
 
67
68
  ## Dynamic Context Injection Point
68
69
 
69
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
70
- Everything above this line is the cacheable static role prefix. -->
70
+ <!-- Cacheable prefix boundary. Everything above this line must stay
71
+ byte-identical between calls for prompt caching to fire. Project
72
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
73
+ parent session context, not injected here. -->
@@ -89,5 +89,7 @@ Approval gate on consequential decisions via `/plan`.
89
89
 
90
90
  ## Dynamic Context Injection Point
91
91
 
92
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
93
- Everything above this line is the cacheable static role prefix. -->
92
+ <!-- Cacheable prefix boundary. Everything above this line must stay
93
+ byte-identical between calls for prompt caching to fire. Project
94
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
95
+ parent session context, not injected here. -->
@@ -56,5 +56,7 @@ Core Web Vitals budgets (LCP < 2.5s, INP < 200ms, CLS < 0.1).
56
56
 
57
57
  ## Dynamic Context Injection Point
58
58
 
59
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
60
- Everything above this line is the cacheable static role prefix. -->
59
+ <!-- Cacheable prefix boundary. Everything above this line must stay
60
+ byte-identical between calls for prompt caching to fire. Project
61
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
62
+ parent session context, not injected here. -->
@@ -46,6 +46,7 @@ Plan before a **design-system or state-management architectural change**.
46
46
  ## Skills (invoke on demand)
47
47
 
48
48
  - `oholiab-design-system-craft` — tokens + components + theming + cost-of-extension (the depth lives here)
49
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
49
50
  - `design-system-patterns` — DS architecture and tokens
50
51
  - `tailwind-design-system` — Tailwind tokenisation
51
52
  - `web-component-design` — component contracts
@@ -63,5 +64,7 @@ pnpm only. WCAG 2.2 AA. Core Web Vitals budgets. TanStack Query/Router.
63
64
 
64
65
  ## Dynamic Context Injection Point
65
66
 
66
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
67
- Everything above this line is the cacheable static role prefix. -->
67
+ <!-- Cacheable prefix boundary. Everything above this line must stay
68
+ byte-identical between calls for prompt caching to fire. Project
69
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
70
+ parent session context, not injected here. -->
@@ -43,6 +43,7 @@ You work at the structural intersection: OS, virtualisation, networking.
43
43
  ## Skills (invoke on demand)
44
44
 
45
45
  - `palal-systems-craft` — diagnose-before-fix + two-causes + runtime/network/iptables discipline
46
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
46
47
  - `bash-defensive-patterns` — shell hardening
47
48
  - `k8s-security-policies` — NetworkPolicy / PSP / RBAC
48
49
  - `mtls-configuration` — mTLS plumbing
@@ -59,5 +60,7 @@ Two root causes on non-trivial failures (e.g. an incident is often applicative +
59
60
 
60
61
  ## Dynamic Context Injection Point
61
62
 
62
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
63
- Everything above this line is the cacheable static role prefix. -->
63
+ <!-- Cacheable prefix boundary. Everything above this line must stay
64
+ byte-identical between calls for prompt caching to fire. Project
65
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
66
+ parent session context, not injected here. -->
@@ -69,5 +69,7 @@ Two root causes on non-trivial failures. Approval gate via `/plan`.
69
69
 
70
70
  ## Dynamic Context Injection Point
71
71
 
72
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
73
- Everything above this line is the cacheable static role prefix. -->
72
+ <!-- Cacheable prefix boundary. Everything above this line must stay
73
+ byte-identical between calls for prompt caching to fire. Project
74
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
75
+ parent session context, not injected here. -->
@@ -56,5 +56,7 @@ facts. English for all output.
56
56
 
57
57
  ## Dynamic Context Injection Point
58
58
 
59
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
60
- Everything above this line is the cacheable static role prefix. -->
59
+ <!-- Cacheable prefix boundary. Everything above this line must stay
60
+ byte-identical between calls for prompt caching to fire. Project
61
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
62
+ parent session context, not injected here. -->
@@ -46,6 +46,7 @@ Plan before any **state-management architectural change**.
46
46
  ## Skills (invoke on demand)
47
47
 
48
48
  - `salma-frontend-implementation-craft` — TanStack + tokens + state-management discipline (the depth lives here)
49
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
49
50
  - `react-modernization` — React refactors and patterns
50
51
  - `nextjs-app-router-patterns` — Next.js App Router work
51
52
  - `responsive-design` — responsive layouts
@@ -65,5 +66,7 @@ pnpm only. WCAG 2.2 AA. Core Web Vitals budgets.
65
66
 
66
67
  ## Dynamic Context Injection Point
67
68
 
68
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
69
- Everything above this line is the cacheable static role prefix. -->
69
+ <!-- Cacheable prefix boundary. Everything above this line must stay
70
+ byte-identical between calls for prompt caching to fire. Project
71
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
72
+ parent session context, not injected here. -->
@@ -69,5 +69,7 @@ Diátaxis quadrant declared.
69
69
 
70
70
  ## Dynamic Context Injection Point
71
71
 
72
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
73
- Everything above this line is the cacheable static role prefix. -->
72
+ <!-- Cacheable prefix boundary. Everything above this line must stay
73
+ byte-identical between calls for prompt caching to fire. Project
74
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
75
+ parent session context, not injected here. -->
@@ -48,6 +48,7 @@ data-safety implications, the rollback path, and what depends on the schema.
48
48
  ## Skills (invoke on demand)
49
49
 
50
50
  - `shallum-database-craft` — two-shape modeling + EXPLAIN-as-test + zero-downtime migration patterns
51
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
51
52
  - `postgresql-table-design` — schema design
52
53
  - `sql-optimization-patterns` — query tuning
53
54
  - `database-migration` — zero-downtime migration planning
@@ -62,5 +63,7 @@ facts. English for all output.
62
63
 
63
64
  ## Dynamic Context Injection Point
64
65
 
65
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
66
- Everything above this line is the cacheable static role prefix. -->
66
+ <!-- Cacheable prefix boundary. Everything above this line must stay
67
+ byte-identical between calls for prompt caching to fire. Project
68
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
69
+ parent session context, not injected here. -->
@@ -60,5 +60,7 @@ facts. English for all output.
60
60
 
61
61
  ## Dynamic Context Injection Point
62
62
 
63
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
64
- Everything above this line is the cacheable static role prefix. -->
63
+ <!-- Cacheable prefix boundary. Everything above this line must stay
64
+ byte-identical between calls for prompt caching to fire. Project
65
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
66
+ parent session context, not injected here. -->
@@ -63,5 +63,7 @@ facts. English for all output.
63
63
 
64
64
  ## Dynamic Context Injection Point
65
65
 
66
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
67
- Everything above this line is the cacheable static role prefix. -->
66
+ <!-- Cacheable prefix boundary. Everything above this line must stay
67
+ byte-identical between calls for prompt caching to fire. Project
68
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
69
+ parent session context, not injected here. -->
@@ -40,6 +40,7 @@ You embed with the teams and document what they produce.
40
40
  ## Skills (invoke on demand)
41
41
 
42
42
  - `documentation-craft` — Diátaxis + pull-based discipline + source-grounded writing (shared with the other 2 Sefer scope specialists)
43
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
43
44
  - `doc-coauthoring` — team-layer doc authoring
44
45
 
45
46
  ## Constraints
@@ -54,5 +55,7 @@ Diátaxis quadrant declared.
54
55
 
55
56
  ## Dynamic Context Injection Point
56
57
 
57
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
58
- Everything above this line is the cacheable static role prefix. -->
58
+ <!-- Cacheable prefix boundary. Everything above this line must stay
59
+ byte-identical between calls for prompt caching to fire. Project
60
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
61
+ parent session context, not injected here. -->
@@ -51,6 +51,7 @@ finding:
51
51
  ## Skills (invoke on demand)
52
52
 
53
53
  - `qa-evaluation-craft` — anchor-every-finding + structured-findings discipline (shared with jahaziel)
54
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
54
55
  - `python-testing-patterns` — test-quality evaluation
55
56
  - `code-review-excellence` — backend code review rubric
56
57
 
@@ -66,5 +67,7 @@ No `/plan` (evaluate against known rules).
66
67
 
67
68
  ## Dynamic Context Injection Point
68
69
 
69
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
70
- Everything above this line is the cacheable static role prefix. -->
70
+ <!-- Cacheable prefix boundary. Everything above this line must stay
71
+ byte-identical between calls for prompt caching to fire. Project
72
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
73
+ parent session context, not injected here. -->
@@ -54,5 +54,7 @@ No `/plan` (collect-only role).
54
54
 
55
55
  ## Dynamic Context Injection Point
56
56
 
57
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
58
- Everything above this line is the cacheable static role prefix. -->
57
+ <!-- Cacheable prefix boundary. Everything above this line must stay
58
+ byte-identical between calls for prompt caching to fire. Project
59
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
60
+ parent session context, not injected here. -->
@@ -48,6 +48,7 @@ guarantees to be fixed, and what they bind.
48
48
  ## Skills (invoke on demand)
49
49
 
50
50
  - `zadok-contract-craft` — any contract decision (how Zadok reasons,
51
+ - `graphify-query-craft` — query the project code-structure graph (~1.8k tokens vs ~80k+ grep+Read) before reading source for any structural question (who calls X, what depends on Y, where is the entry point). Per D-009 amended scope: all code-touching dev agents.
51
52
  with worked examples — the depth lives in this skill, not in this file)
52
53
  - `openapi-spec-generation` — contract authoring
53
54
  - `fastapi-templates` — FastAPI scaffolding (when the contract lives on FastAPI)
@@ -63,5 +64,7 @@ facts. English for all output.
63
64
 
64
65
  ## Dynamic Context Injection Point
65
66
 
66
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
67
- Everything above this line is the cacheable static role prefix. -->
67
+ <!-- Cacheable prefix boundary. Everything above this line must stay
68
+ byte-identical between calls for prompt caching to fire. Project
69
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
70
+ parent session context, not injected here. -->
@@ -65,5 +65,7 @@ OpenAPI 3.1 contract before any endpoint. Approval gate via `/plan`.
65
65
 
66
66
  ## Dynamic Context Injection Point
67
67
 
68
- <!-- Project sprint state from ./CLAUDE.md is injected below at runtime.
69
- Everything above this line is the cacheable static role prefix. -->
68
+ <!-- Cacheable prefix boundary. Everything above this line must stay
69
+ byte-identical between calls for prompt caching to fire. Project
70
+ sprint state from ./CLAUDE.md is loaded by Claude Code into the
71
+ parent session context, not injected here. -->
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: code-graph
3
+ description: Inspect, refresh, or open the Graphify code-structure graph for the current project. Wraps `npx mishkan-harness code-graph` so it's reachable from any Claude Code session. Three subcommands — `status` (default, prints nodes/edges/last-scan), `scan` (runs `graphify update .` to refresh the index), `open` (opens graph.html in the browser). Use when you need to know the current state of the code graph, when you've made code changes and want a fresh index, or when you want to visually browse the call structure.
4
+ ---
5
+
6
+ # /code-graph
7
+
8
+ Wrapper for the harness's code-graph (Graphify) inspection. Runs the
9
+ `npx mishkan-harness code-graph` CLI subcommand on behalf of the user.
10
+
11
+ ## Subcommands
12
+
13
+ ```bash
14
+ npx mishkan-harness code-graph status # default — nodes/edges/last-scan
15
+ npx mishkan-harness code-graph scan # refresh the index (graphify update .)
16
+ npx mishkan-harness code-graph open # open graph.html in browser
17
+ ```
18
+
19
+ ## When to suggest each
20
+
21
+ - **`status`** — first action when the user asks "is graphify up to date" or "how big is my graph". Cheap, no side effects.
22
+ - **`scan`** — after a meaningful round of code edits (refactor, new module, dependency added). Or when the advisory hook fires and the agent isn't sure whether the graph reflects current state.
23
+ - **`open`** — when the user asks to "see" or "visualise" the call graph. Opens the static HTML Graphify writes alongside `graph.json`.
24
+
25
+ ## Behaviour
26
+
27
+ - Looks for `graphify-out/` in the current project root. If missing, surfaces the install hint (`graphify update .` to create one, or `uv tool install "graphifyy>=0.8.33"` if graphify itself isn't installed).
28
+ - Always succeeds with output even when the graph is empty or stale — the CLI is designed to be informative, not gating.
29
+ - Stateful: `scan` modifies `graphify-out/`. `status` and `open` are read-only.
30
+
31
+ ## See also
32
+
33
+ - ADR `D-008` and `D-009` — the cost rationale and the advisory-hook design
34
+ - `docs/usage/11-graphify.md` — full usage chapter
35
+ - `graphify-query-craft` skill — when and how the 20 code-touching agents query
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: eval-baruch
3
+ description: Run the Baruch contract eval — validates research-log schema enforcement (valid fixtures pass, invalid fixtures fail) and asserts the golden case's semantic shape. Use BEFORE committing any change to research-log.schema.json, validate-research-log.sh, agents/baruch.md, or the Baruch craft skill. Does NOT call an LLM — it's a fast deterministic contract test (typically < 5s).
4
+ ---
5
+
6
+ # /eval-baruch
7
+
8
+ Exercise Baruch's contract end-to-end without calling an LLM:
9
+
10
+ 1. Every fixture under `evals/baruch/fixtures/valid/` MUST validate (catches over-strictness).
11
+ 2. Every fixture under `evals/baruch/fixtures/invalid/` MUST be rejected (catches under-strictness).
12
+ 3. The golden case `evals/baruch/golden_case/produced.json` MUST validate AND satisfy every jq assertion in `expected.yaml`.
13
+
14
+ ## How to invoke
15
+
16
+ ```bash
17
+ cd payload/mishkan/evals/baruch && ./run.sh
18
+ echo "exit: $?"
19
+ ```
20
+
21
+ Or from anywhere in the harness checkout:
22
+
23
+ ```bash
24
+ bash payload/mishkan/evals/baruch/run.sh
25
+ ```
26
+
27
+ Exit codes:
28
+ - `0` → all checks passed
29
+ - `1` → one or more checks failed
30
+ - `2` → environment problem (missing `jq`, validator, or schema)
31
+
32
+ ## When to run
33
+
34
+ - **Before any edit** to: `research-log.schema.json`, `validate-research-log.sh`, `agents/baruch.md`, the Baruch craft skill, or the eval itself.
35
+ - **After any such edit**, before opening a PR (the GitHub workflow `.github/workflows/eval-baruch.yml` also runs on PR — local run catches regressions faster).
36
+ - **As a sanity check** when investigating any Baruch output drift.
37
+
38
+ ## When NOT to run
39
+
40
+ - Day-to-day code changes that don't touch the contract surface.
41
+ - Live LLM testing — this eval doesn't run Baruch through an LLM. To do that, run the actual research pipeline against `golden_case/input.yaml`, compare the live output to `produced.json`, and update both `produced.json` and `expected.yaml` deliberately if the change is intentional.
42
+
43
+ ## What to do on failure
44
+
45
+ | Symptom | Likely cause | Action |
46
+ |---|---|---|
47
+ | valid fixture rejected | schema/validator too strict OR fixture broken | compare schema vs fixture; fix whichever is wrong |
48
+ | invalid fixture accepted | validator missing a check | add the missing check; re-run |
49
+ | golden case fails expected.yaml | Baruch output drift (intentional or regression) | inspect diff; update `produced.json` + `expected.yaml` together if intentional |
50
+
51
+ ## See also
52
+
53
+ - Eval README: `payload/mishkan/evals/baruch/README.md`
54
+ - Schema: `payload/mishkan/templates/research-log.schema.json`
55
+ - Validator: `payload/mishkan/scripts/validate-research-log.sh`
56
+ - Baruch agent: `payload/mishkan/agents/baruch.md`
57
+ - CI workflow: `.github/workflows/eval-baruch.yml`