@llblab/pi-actors 0.45.0 → 0.46.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 (211) hide show
  1. package/AGENTS.md +10 -6
  2. package/CHANGELOG.md +14 -1
  3. package/README.md +28 -12
  4. package/dist/fixtures/protocol/recipe-summary.json +1 -1
  5. package/dist/index.d.ts +1 -2
  6. package/dist/index.js +10 -110
  7. package/dist/lib/async-runs.d.ts +4 -1
  8. package/dist/lib/async-runs.js +22 -23
  9. package/dist/lib/automatic-review-runtime.d.ts +2 -0
  10. package/dist/lib/automatic-review-runtime.js +12 -5
  11. package/dist/lib/draft-sleep.js +0 -1
  12. package/dist/lib/extension-runtime.d.ts +21 -0
  13. package/dist/lib/extension-runtime.js +122 -0
  14. package/dist/lib/inspector.js +45 -7
  15. package/dist/lib/paths.d.ts +0 -1
  16. package/dist/lib/paths.js +0 -7
  17. package/dist/lib/prompts.d.ts +1 -1
  18. package/dist/lib/prompts.js +2 -2
  19. package/dist/lib/recipes-context.js +2 -2
  20. package/dist/lib/recipes-references.d.ts +24 -9
  21. package/dist/lib/recipes-references.js +152 -126
  22. package/dist/lib/runtime.d.ts +0 -1
  23. package/dist/lib/runtime.js +1 -3
  24. package/dist/lib/tools-inspect.d.ts +0 -1
  25. package/dist/lib/tools-inspect.js +35 -8
  26. package/dist/lib/tools-local.d.ts +2 -0
  27. package/dist/lib/tools-local.js +1 -1
  28. package/dist/lib/tools-spawn.d.ts +2 -0
  29. package/dist/lib/tools-spawn.js +24 -52
  30. package/dist/scripts/async-runner.mjs +0 -16
  31. package/dist/scripts/build-dist.mjs +13 -4
  32. package/dist/skills/actors/SKILL.md +6 -6
  33. package/dist/skills/actors/recipes/recipe-validate.json +11 -0
  34. package/{recipes/utility-coordinator-lock-snapshot.json → dist/skills/actors/recipes/resource-locker-snapshot.json} +1 -3
  35. package/dist/{recipes → skills/actors/recipes}/resource-locker.json +1 -3
  36. package/dist/{recipes/utility-run-ops-snapshot.json → skills/actors/recipes/run-ops-snapshot.json} +1 -3
  37. package/dist/skills/actors/recipes/run-summary.json +9 -0
  38. package/dist/{scripts/locker.mjs → skills/actors/scripts/resource-locker.mjs} +2 -23
  39. package/dist/skills/actors/scripts/run-utils.mjs +164 -0
  40. package/{scripts → dist/skills/actors/scripts}/validate-recipe.mjs +134 -18
  41. package/dist/skills/artifacts/SKILL.md +16 -0
  42. package/{recipes/pipeline-artifact-bundle.json → dist/skills/artifacts/recipes/bundle.json} +4 -4
  43. package/dist/{recipes/utility-artifact-write.json → skills/artifacts/recipes/file-write.json} +1 -3
  44. package/dist/{recipes/utility-artifact-manifest.json → skills/artifacts/recipes/manifest.json} +1 -3
  45. package/{recipes/pipeline-artifact-report.json → dist/skills/artifacts/recipes/report.json} +2 -2
  46. package/dist/{recipes/pipeline-artifact-write.json → skills/artifacts/recipes/write.json} +3 -3
  47. package/dist/skills/artifacts/scripts/artifact-utils.mjs +63 -0
  48. package/dist/skills/media/SKILL.md +16 -0
  49. package/dist/{recipes/pipeline-media-library.json → skills/media/recipes/library.json} +2 -2
  50. package/{recipes/music-player.json → dist/skills/media/recipes/player.json} +1 -3
  51. package/dist/{recipes/utility-playlist-build.json → skills/media/recipes/playlist-build.json} +1 -3
  52. package/dist/skills/media/scripts/media-utils.mjs +47 -0
  53. package/dist/{scripts → skills/media/scripts}/music-player.mjs +9 -3
  54. package/dist/skills/project-work/SKILL.md +16 -0
  55. package/dist/skills/project-work/recipes/changelog-section.json +11 -0
  56. package/{recipes/pipeline-docs-maintenance.json → dist/skills/project-work/recipes/docs-maintenance.json} +4 -4
  57. package/dist/skills/project-work/recipes/package-summary.json +9 -0
  58. package/{recipes/pipeline-release-readiness.json → dist/skills/project-work/recipes/release-readiness.json} +6 -6
  59. package/dist/{recipes/pipeline-release-summary.json → skills/project-work/recipes/release-summary.json} +5 -5
  60. package/{recipes/pipeline-repo-health.json → dist/skills/project-work/recipes/repo-health.json} +6 -6
  61. package/{recipes/pipeline-async-run-ops.json → dist/skills/project-work/recipes/run-ops.json} +3 -3
  62. package/dist/skills/project-work/recipes/skill-summary.json +11 -0
  63. package/dist/skills/project-work/scripts/project-utils.mjs +89 -0
  64. package/dist/skills/recipe-memory/SKILL.md +16 -0
  65. package/dist/skills/swarm/SKILL.md +4 -4
  66. package/{recipes/pipeline-architect-coordinator.json → dist/skills/swarm/recipes/architect.json} +5 -5
  67. package/{recipes/pipeline-checkpoint-continuation.json → dist/skills/swarm/recipes/checkpoint-continuation.json} +3 -3
  68. package/dist/{recipes/pipeline-development-tasking.json → skills/swarm/recipes/development-tasking.json} +4 -4
  69. package/dist/{recipes/lens-swarm.json → skills/swarm/recipes/lens-review.json} +1 -1
  70. package/dist/{recipes/pipeline-quorum-review.json → skills/swarm/recipes/quorum-review.json} +4 -4
  71. package/{recipes/pipeline-research-synthesis.json → dist/skills/swarm/recipes/research-synthesis.json} +6 -6
  72. package/{recipes/pipeline-review-readiness.json → dist/skills/swarm/recipes/review-readiness.json} +1 -1
  73. package/{recipes/subagents-prompts.json → dist/skills/swarm/recipes/subagent-prompts.json} +1 -1
  74. package/{recipes → dist/skills/swarm/recipes}/subagent-quorum.json +1 -1
  75. package/dist/{recipes → skills/swarm/recipes}/subagent-review-coordinator.json +6 -6
  76. package/docs/actor-inspector.md +4 -3
  77. package/docs/async-runs.md +2 -2
  78. package/docs/recipe-library.md +23 -23
  79. package/docs/releasing.md +2 -2
  80. package/docs/template-recipes.md +30 -14
  81. package/docs/tool-registry.md +2 -2
  82. package/fixtures/protocol/recipe-summary.json +1 -1
  83. package/index.ts +18 -112
  84. package/lib/async-runs.ts +47 -24
  85. package/lib/automatic-review-runtime.ts +16 -3
  86. package/lib/draft-sleep.ts +0 -1
  87. package/lib/extension-runtime.ts +158 -0
  88. package/lib/inspector.ts +56 -11
  89. package/lib/paths.ts +0 -7
  90. package/lib/prompts.ts +2 -2
  91. package/lib/recipes-context.ts +2 -2
  92. package/lib/recipes-references.ts +223 -134
  93. package/lib/runtime.ts +1 -5
  94. package/lib/tools-inspect.ts +42 -9
  95. package/lib/tools-local.ts +2 -0
  96. package/lib/tools-spawn.ts +37 -74
  97. package/package.json +3 -5
  98. package/scripts/async-runner.mjs +0 -16
  99. package/scripts/build-dist.mjs +13 -4
  100. package/skills/actors/SKILL.md +6 -6
  101. package/skills/actors/recipes/recipe-validate.json +11 -0
  102. package/{dist/recipes/utility-coordinator-lock-snapshot.json → skills/actors/recipes/resource-locker-snapshot.json} +1 -3
  103. package/{recipes → skills/actors/recipes}/resource-locker.json +1 -3
  104. package/{recipes/utility-run-ops-snapshot.json → skills/actors/recipes/run-ops-snapshot.json} +1 -3
  105. package/skills/actors/recipes/run-summary.json +9 -0
  106. package/{scripts/locker.mjs → skills/actors/scripts/resource-locker.mjs} +2 -23
  107. package/skills/actors/scripts/run-utils.mjs +164 -0
  108. package/{dist → skills/actors}/scripts/validate-recipe.mjs +134 -18
  109. package/skills/artifacts/SKILL.md +16 -0
  110. package/{dist/recipes/pipeline-artifact-bundle.json → skills/artifacts/recipes/bundle.json} +4 -4
  111. package/{recipes/utility-artifact-write.json → skills/artifacts/recipes/file-write.json} +1 -3
  112. package/{recipes/utility-artifact-manifest.json → skills/artifacts/recipes/manifest.json} +1 -3
  113. package/{dist/recipes/pipeline-artifact-report.json → skills/artifacts/recipes/report.json} +2 -2
  114. package/{recipes/pipeline-artifact-write.json → skills/artifacts/recipes/write.json} +3 -3
  115. package/skills/artifacts/scripts/artifact-utils.mjs +63 -0
  116. package/skills/media/SKILL.md +16 -0
  117. package/{recipes/pipeline-media-library.json → skills/media/recipes/library.json} +2 -2
  118. package/{dist/recipes/music-player.json → skills/media/recipes/player.json} +1 -3
  119. package/{recipes/utility-playlist-build.json → skills/media/recipes/playlist-build.json} +1 -3
  120. package/skills/media/scripts/media-utils.mjs +47 -0
  121. package/{scripts → skills/media/scripts}/music-player.mjs +9 -3
  122. package/skills/project-work/SKILL.md +16 -0
  123. package/skills/project-work/recipes/changelog-section.json +11 -0
  124. package/{dist/recipes/pipeline-docs-maintenance.json → skills/project-work/recipes/docs-maintenance.json} +4 -4
  125. package/skills/project-work/recipes/package-summary.json +9 -0
  126. package/{dist/recipes/pipeline-release-readiness.json → skills/project-work/recipes/release-readiness.json} +6 -6
  127. package/{recipes/pipeline-release-summary.json → skills/project-work/recipes/release-summary.json} +5 -5
  128. package/{dist/recipes/pipeline-repo-health.json → skills/project-work/recipes/repo-health.json} +6 -6
  129. package/{dist/recipes/pipeline-async-run-ops.json → skills/project-work/recipes/run-ops.json} +3 -3
  130. package/skills/project-work/recipes/skill-summary.json +11 -0
  131. package/skills/project-work/scripts/project-utils.mjs +89 -0
  132. package/skills/recipe-memory/SKILL.md +16 -0
  133. package/skills/swarm/SKILL.md +4 -4
  134. package/{dist/recipes/pipeline-architect-coordinator.json → skills/swarm/recipes/architect.json} +5 -5
  135. package/{dist/recipes/pipeline-checkpoint-continuation.json → skills/swarm/recipes/checkpoint-continuation.json} +3 -3
  136. package/{recipes/pipeline-development-tasking.json → skills/swarm/recipes/development-tasking.json} +4 -4
  137. package/{recipes/lens-swarm.json → skills/swarm/recipes/lens-review.json} +1 -1
  138. package/{recipes/pipeline-quorum-review.json → skills/swarm/recipes/quorum-review.json} +4 -4
  139. package/{dist/recipes/pipeline-research-synthesis.json → skills/swarm/recipes/research-synthesis.json} +6 -6
  140. package/{dist/recipes/pipeline-review-readiness.json → skills/swarm/recipes/review-readiness.json} +1 -1
  141. package/{dist/recipes/subagents-prompts.json → skills/swarm/recipes/subagent-prompts.json} +1 -1
  142. package/{dist → skills/swarm}/recipes/subagent-quorum.json +1 -1
  143. package/{recipes → skills/swarm/recipes}/subagent-review-coordinator.json +6 -6
  144. package/dist/recipes/utility-changelog-section.json +0 -13
  145. package/dist/recipes/utility-package-summary.json +0 -11
  146. package/dist/recipes/utility-run-summary.json +0 -11
  147. package/dist/recipes/utility-skill-summary.json +0 -13
  148. package/dist/recipes/utility-validate-recipe.json +0 -13
  149. package/dist/scripts/recipe-utils.mjs +0 -405
  150. package/dist/scripts/release-gates.mjs +0 -278
  151. package/recipes/utility-changelog-section.json +0 -13
  152. package/recipes/utility-package-summary.json +0 -11
  153. package/recipes/utility-run-summary.json +0 -11
  154. package/recipes/utility-skill-summary.json +0 -13
  155. package/recipes/utility-validate-recipe.json +0 -13
  156. package/scripts/recipe-utils.mjs +0 -405
  157. package/scripts/release-gates.mjs +0 -278
  158. /package/dist/{recipes/utility-validation-wrapper.json → skills/actors/recipes/command-validate.json} +0 -0
  159. /package/dist/{recipes/utility-jsonl-tail.json → skills/actors/recipes/jsonl-tail.json} +0 -0
  160. /package/dist/{recipes/utility-run-state-files.json → skills/actors/recipes/run-state-files.json} +0 -0
  161. /package/dist/{recipes/utility-playlist-scan.json → skills/media/recipes/playlist-scan.json} +0 -0
  162. /package/dist/{recipes/utility-changelog-head.json → skills/project-work/recipes/changelog-head.json} +0 -0
  163. /package/dist/{recipes/utility-git-log.json → skills/project-work/recipes/git-log.json} +0 -0
  164. /package/dist/{recipes/utility-git-status.json → skills/project-work/recipes/git-status.json} +0 -0
  165. /package/dist/{recipes/utility-markdown-index.json → skills/project-work/recipes/markdown-index.json} +0 -0
  166. /package/dist/{recipes → skills/recipe-memory/recipes}/draft-review.json +0 -0
  167. /package/dist/{recipes → skills/recipe-memory/recipes}/tool-review.json +0 -0
  168. /package/dist/{recipes → skills/swarm/recipes}/subagent-artifact.json +0 -0
  169. /package/dist/{recipes → skills/swarm/recipes}/subagent-checkpoint.json +0 -0
  170. /package/dist/{recipes → skills/swarm/recipes}/subagent-conflict-report.json +0 -0
  171. /package/dist/{recipes → skills/swarm/recipes}/subagent-contradiction-map.json +0 -0
  172. /package/dist/{recipes → skills/swarm/recipes}/subagent-critic.json +0 -0
  173. /package/dist/{recipes → skills/swarm/recipes}/subagent-evidence-map.json +0 -0
  174. /package/dist/{recipes → skills/swarm/recipes}/subagent-followup.json +0 -0
  175. /package/dist/{recipes → skills/swarm/recipes}/subagent-judge.json +0 -0
  176. /package/dist/{recipes → skills/swarm/recipes}/subagent-merge.json +0 -0
  177. /package/dist/{recipes → skills/swarm/recipes}/subagent-normalize.json +0 -0
  178. /package/dist/{recipes → skills/swarm/recipes}/subagent-plan.json +0 -0
  179. /package/dist/{recipes → skills/swarm/recipes}/subagent-preflight.json +0 -0
  180. /package/dist/{recipes → skills/swarm/recipes}/subagent-prompt.json +0 -0
  181. /package/dist/{recipes → skills/swarm/recipes}/subagent-review.json +0 -0
  182. /package/dist/{recipes → skills/swarm/recipes}/subagent-task-card.json +0 -0
  183. /package/dist/{recipes → skills/swarm/recipes}/subagent-tools.json +0 -0
  184. /package/dist/{recipes → skills/swarm/recipes}/subagent-verify.json +0 -0
  185. /package/{recipes/utility-validation-wrapper.json → skills/actors/recipes/command-validate.json} +0 -0
  186. /package/{recipes/utility-jsonl-tail.json → skills/actors/recipes/jsonl-tail.json} +0 -0
  187. /package/{recipes/utility-run-state-files.json → skills/actors/recipes/run-state-files.json} +0 -0
  188. /package/{recipes/utility-playlist-scan.json → skills/media/recipes/playlist-scan.json} +0 -0
  189. /package/{recipes/utility-changelog-head.json → skills/project-work/recipes/changelog-head.json} +0 -0
  190. /package/{recipes/utility-git-log.json → skills/project-work/recipes/git-log.json} +0 -0
  191. /package/{recipes/utility-git-status.json → skills/project-work/recipes/git-status.json} +0 -0
  192. /package/{recipes/utility-markdown-index.json → skills/project-work/recipes/markdown-index.json} +0 -0
  193. /package/{recipes → skills/recipe-memory/recipes}/draft-review.json +0 -0
  194. /package/{recipes → skills/recipe-memory/recipes}/tool-review.json +0 -0
  195. /package/{recipes → skills/swarm/recipes}/subagent-artifact.json +0 -0
  196. /package/{recipes → skills/swarm/recipes}/subagent-checkpoint.json +0 -0
  197. /package/{recipes → skills/swarm/recipes}/subagent-conflict-report.json +0 -0
  198. /package/{recipes → skills/swarm/recipes}/subagent-contradiction-map.json +0 -0
  199. /package/{recipes → skills/swarm/recipes}/subagent-critic.json +0 -0
  200. /package/{recipes → skills/swarm/recipes}/subagent-evidence-map.json +0 -0
  201. /package/{recipes → skills/swarm/recipes}/subagent-followup.json +0 -0
  202. /package/{recipes → skills/swarm/recipes}/subagent-judge.json +0 -0
  203. /package/{recipes → skills/swarm/recipes}/subagent-merge.json +0 -0
  204. /package/{recipes → skills/swarm/recipes}/subagent-normalize.json +0 -0
  205. /package/{recipes → skills/swarm/recipes}/subagent-plan.json +0 -0
  206. /package/{recipes → skills/swarm/recipes}/subagent-preflight.json +0 -0
  207. /package/{recipes → skills/swarm/recipes}/subagent-prompt.json +0 -0
  208. /package/{recipes → skills/swarm/recipes}/subagent-review.json +0 -0
  209. /package/{recipes → skills/swarm/recipes}/subagent-task-card.json +0 -0
  210. /package/{recipes → skills/swarm/recipes}/subagent-tools.json +0 -0
  211. /package/{recipes → skills/swarm/recipes}/subagent-verify.json +0 -0
@@ -39,14 +39,20 @@ import {
39
39
  import { fileURLToPath, pathToFileURL } from "node:url";
40
40
 
41
41
  function packageRoot() {
42
- return dirname(dirname(fileURLToPath(import.meta.url)));
42
+ return dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))));
43
43
  }
44
44
 
45
45
  async function importRuntimeModule(name) {
46
46
  const root = packageRoot();
47
- const compiled = join(root, "dist", "lib", `${name}.js`);
47
+ const compiled = join(root, "lib", `${name}.js`);
48
+ const installedCompiled = join(root, "dist", "lib", `${name}.js`);
48
49
  const source = join(root, "lib", `${name}.ts`);
49
- return await import(pathToFileURL(existsSync(compiled) ? compiled : source).href);
50
+ const module = existsSync(compiled)
51
+ ? compiled
52
+ : root.includes(`${delimiter}node_modules${delimiter}`) && existsSync(installedCompiled)
53
+ ? installedCompiled
54
+ : source;
55
+ return await import(pathToFileURL(module).href);
50
56
  }
51
57
 
52
58
  const { appendRunControlInStateDir, claimRunControlByIdInStateDir,
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: project-work
3
+ description: Repository inspection, documentation maintenance, release preparation, and project health workflows.
4
+ ---
5
+
6
+ # Project Work
7
+
8
+ Own reusable workflows for inspecting and maintaining software projects.
9
+
10
+ ## Scope
11
+
12
+ - Summarize Git, package, Skill, changelog, and documentation state.
13
+ - Compose repository health, documentation maintenance, and release-readiness evidence.
14
+ - Keep project-level orchestration separate from lower-level artifact and actor utilities.
15
+
16
+ This Skill does not own the Run kernel, publication authority, multi-agent methodology, or artifact-writing mechanics. Its Recipe identity is `project-work/<filename stem>`; Recipe files have no top-level `name`. It composes other capabilities only through exact `<skill>/<recipe>` references and keeps project-specific helper behavior under its own `scripts/` directory.
@@ -0,0 +1,11 @@
1
+ {
2
+ "args": [
3
+ "file:path",
4
+ "version:string"
5
+ ],
6
+ "defaults": {
7
+ "file": "CHANGELOG.md",
8
+ "version": "0.7.1"
9
+ },
10
+ "template": "{skill_dir}/scripts/project-utils.mjs changelog-section {file} {version}"
11
+ }
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "docs_index": "utility-markdown-index.json",
5
- "reviewer": "subagent-review.json",
6
- "planner": "subagent-plan.json",
7
- "artifact": "pipeline-artifact-report.json"
4
+ "docs_index": "project-work/markdown-index",
5
+ "reviewer": "swarm/subagent-review",
6
+ "planner": "swarm/subagent-plan",
7
+ "artifact": "artifacts/report"
8
8
  },
9
9
  "args": [
10
10
  "docs_dir:path",
@@ -0,0 +1,9 @@
1
+ {
2
+ "args": [
3
+ "package_json:path"
4
+ ],
5
+ "defaults": {
6
+ "package_json": "package.json"
7
+ },
8
+ "template": "{skill_dir}/scripts/project-utils.mjs package-summary {package_json}"
9
+ }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "changelog": "utility-changelog-section.json",
5
- "package": "utility-package-summary.json",
6
- "skill": "utility-skill-summary.json",
7
- "validation": "utility-validation-wrapper.json",
8
- "review": "subagent-review-coordinator.json",
9
- "artifact": "pipeline-artifact-report.json"
4
+ "changelog": "project-work/changelog-section",
5
+ "package": "project-work/package-summary",
6
+ "skill": "project-work/skill-summary",
7
+ "validation": "actors/command-validate",
8
+ "review": "swarm/subagent-review-coordinator",
9
+ "artifact": "artifacts/report"
10
10
  },
11
11
  "args": [
12
12
  "scope:path",
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "changelog": "utility-changelog-section.json",
5
- "package": "utility-package-summary.json",
6
- "skill": "utility-skill-summary.json",
7
- "validation": "utility-validation-wrapper.json",
8
- "artifact": "pipeline-artifact-report.json"
4
+ "changelog": "project-work/changelog-section",
5
+ "package": "project-work/package-summary",
6
+ "skill": "project-work/skill-summary",
7
+ "validation": "actors/command-validate",
8
+ "artifact": "artifacts/report"
9
9
  },
10
10
  "args": [
11
11
  "scope:path",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "git_status": "utility-git-status.json",
5
- "git_log": "utility-git-log.json",
6
- "docs_index": "utility-markdown-index.json",
7
- "validation": "utility-validation-wrapper.json",
8
- "normalizer": "subagent-normalize.json",
9
- "artifact": "pipeline-artifact-report.json"
4
+ "git_status": "project-work/git-status",
5
+ "git_log": "project-work/git-log",
6
+ "docs_index": "project-work/markdown-index",
7
+ "validation": "actors/command-validate",
8
+ "normalizer": "swarm/subagent-normalize",
9
+ "artifact": "artifacts/report"
10
10
  },
11
11
  "args": [
12
12
  "repo:path",
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "snapshot": "utility-run-ops-snapshot.json",
5
- "normalizer": "subagent-normalize.json",
6
- "artifact": "pipeline-artifact-report.json"
4
+ "snapshot": "actors/run-ops-snapshot",
5
+ "normalizer": "swarm/subagent-normalize",
6
+ "artifact": "artifacts/report"
7
7
  },
8
8
  "args": [
9
9
  "state_root:path",
@@ -0,0 +1,11 @@
1
+ {
2
+ "args": [
3
+ "skill:path",
4
+ "package_json:path"
5
+ ],
6
+ "defaults": {
7
+ "skill": "skills/actors/SKILL.md",
8
+ "package_json": "package.json"
9
+ },
10
+ "template": "{skill_dir}/scripts/project-utils.mjs skill-summary {skill} {package_json}"
11
+ }
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+
3
+ /** Project-work metadata and changelog helpers. */
4
+
5
+ import { existsSync, readFileSync } from "node:fs";
6
+ import { resolve } from "node:path";
7
+
8
+ function fail(message) {
9
+ console.error(message);
10
+ process.exit(1);
11
+ }
12
+
13
+ function pathOf(value) {
14
+ return resolve(String(value).replace(/^~(?=\/|$)/, process.env.HOME ?? "~"));
15
+ }
16
+
17
+ function readJson(file) {
18
+ if (!existsSync(file)) return undefined;
19
+ try {
20
+ return JSON.parse(readFileSync(file, "utf8"));
21
+ } catch {
22
+ return undefined;
23
+ }
24
+ }
25
+
26
+ function packageSummary(fileValue = "package.json") {
27
+ const pkg = readJson(pathOf(fileValue));
28
+ if (!pkg) fail(`Package JSON not found or invalid: ${fileValue}`);
29
+ const dependencies = Object.keys(pkg.dependencies ?? {}).sort();
30
+ const devDependencies = Object.keys(pkg.devDependencies ?? {}).sort();
31
+ console.log(JSON.stringify({
32
+ name: pkg.name ?? "",
33
+ version: pkg.version ?? "",
34
+ type: pkg.type ?? "",
35
+ private: Boolean(pkg.private),
36
+ packageManager: pkg.packageManager ?? "",
37
+ files: Array.isArray(pkg.files) ? pkg.files : [],
38
+ bin: pkg.bin ?? null,
39
+ main: pkg.main ?? "",
40
+ exports: pkg.exports ?? null,
41
+ scripts: Object.keys(pkg.scripts ?? {}).sort(),
42
+ dependencyCount: dependencies.length,
43
+ devDependencyCount: devDependencies.length,
44
+ dependencies,
45
+ devDependencies,
46
+ }, null, 2));
47
+ }
48
+
49
+ function skillSummary(skillValue, packageValue = "package.json") {
50
+ const content = readFileSync(pathOf(skillValue), "utf8");
51
+ const pkg = readJson(pathOf(packageValue)) ?? {};
52
+ const frontmatter = content.match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1] ?? "";
53
+ const fields = Object.fromEntries(frontmatter.split(/\r?\n/).flatMap((line) => {
54
+ const match = line.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);
55
+ return match ? [[match[1], match[2].trim()]] : [];
56
+ }));
57
+ const version = fields.version ?? frontmatter.match(/^\s+version:\s*([^\n]+)$/m)?.[1]?.trim() ?? "";
58
+ const body = content.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/, "");
59
+ console.log(JSON.stringify({
60
+ path: skillValue,
61
+ name: fields.name ?? "",
62
+ description: fields.description ?? "",
63
+ version,
64
+ packageVersion: pkg.version ?? "",
65
+ versionMatchesPackage: version === pkg.version,
66
+ frontmatterExtraColonLines: frontmatter.split(/\r?\n/).filter((line) =>
67
+ /^\w+:\s*\S/.test(line) && (line.match(/:/g) ?? []).length > 1),
68
+ bodyLineCount: body.split(/\r?\n/).length,
69
+ headings: body.split(/\r?\n/).filter((line) => /^#{1,6}\s/.test(line)),
70
+ }, null, 2));
71
+ }
72
+
73
+ function changelogSection(fileValue, version) {
74
+ const lines = readFileSync(pathOf(fileValue), "utf8").split(/\r?\n/);
75
+ const start = lines.findIndex((line) => line.startsWith("## ") && line.includes(version));
76
+ if (start < 0) fail(`Version section not found: ${version}`);
77
+ const next = lines.findIndex((line, index) => index > start && line.startsWith("## "));
78
+ console.log(lines.slice(start, next < 0 ? lines.length : next).join("\n").trimEnd());
79
+ }
80
+
81
+ const [command, ...args] = process.argv.slice(2);
82
+ try {
83
+ if (command === "package-summary") packageSummary(args[0]);
84
+ else if (command === "skill-summary") skillSummary(args[0], args[1]);
85
+ else if (command === "changelog-section") changelogSection(args[0] ?? "CHANGELOG.md", args[1] ?? "Unreleased");
86
+ else fail(`Unknown project command: ${command ?? ""}`);
87
+ } catch (error) {
88
+ fail(error instanceof Error ? error.message : String(error));
89
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: recipe-memory
3
+ description: Package-owned structural review components for safe persistent Recipe capability memory.
4
+ ---
5
+
6
+ # Recipe Memory
7
+
8
+ Own the executable reviewer components used by automatic draft and active-tool Recipe evolution.
9
+
10
+ ## Scope
11
+
12
+ - Review value-free structural projections rather than executable content or machine-local paths.
13
+ - Return bounded decisions for deterministic package-owned executors.
14
+ - Remain package-owned so user Recipes cannot shadow or redirect automatic review.
15
+
16
+ This Skill does not own registry mutation, CAS, journaling, quarantine, lineage, retry, reset, or safe-boundary activation. Those remain Run-kernel and registry responsibilities. Its direct Recipe identities are `recipe-memory/<filename stem>`; Recipe files have no top-level `name`. They are internal components, never automatic user tools.
@@ -9,7 +9,7 @@ Subagent orchestration: delegated review, quorum consensus, scoped locks, clean-
9
9
 
10
10
  ## Purpose
11
11
 
12
- Run subagents safely and predictably through reusable orchestration contracts.
12
+ Run subagents safely and predictably through reusable orchestration contracts. Skill Recipe identity is `<active Skill name>/<Recipe filename stem>`; Recipe files have no top-level `name`. Components are direct files under `recipes/` and use exact `swarm/<recipe>` identities, including `swarm/lens-review`, `swarm/quorum-review`, `swarm/research-synthesis`, and `swarm/development-tasking`; they remain components rather than automatic tools.
13
13
 
14
14
  Activation rule: load this skill before launching multiple independent actors or subagents, even when the work is creative artifact generation rather than code review. The coordinator owns decomposition, disjoint scopes, launch correctness, result integration, and final validation; participants may choose local content or implementation details independently inside their assigned boundaries.
15
15
 
@@ -31,7 +31,7 @@ Maintain this skill as a living orchestration standard. When real swarm work exp
31
31
  - `Lens`: A deliberately narrow cognitive role assigned to one subagent, such as security, tests, architecture, economics, or operator UX.
32
32
  - `Task Card`: A bounded implementation assignment with goal, allowed files, avoided files, expected output, and validation gates.
33
33
  - `Component Capability`: An abstract adapter operation such as launcher, reviewer, verifier, merger, quorum, checkpoint, follow-up, judge, or normalizer. Swarm may target these capabilities, but local adapters bind them to concrete tools, recipes, draft recipes, command templates, async runs, or services.
34
- - `Draft Recipe`: A reusable but non-registered recipe captured from a successful inline actor spawn under `~/.pi/agent/recipes/drafts`. It can be replayed by explicit file path and later promoted into the active tool recipe root after enough dogfood.
34
+ - `Draft Recipe`: A reusable but non-registered recipe captured from a successful inline actor spawn under `~/.pi/agent/recipes/drafts`. It can be replayed by an explicit `.json` / `.md` path (relative entry paths use invocation `cwd`) and later promoted into the active tool Recipe root after enough dogfood.
35
35
  - `Coordinator Checkpoint`: A deliberate subagent pause where the subagent preserves its working context, sends a bounded question or status to the orchestrator, receives a coordinator reply, and continues in the same subagent context.
36
36
  - `Evidence Checkpoint`: A deliberate stop where a subagent records sources, assumptions, confidence, contradictions, or blocking evidence gaps before synthesis.
37
37
  - `Integrator`: The human or agent that merges isolated branches/worktrees into the shared target and owns conflict resolution.
@@ -162,7 +162,7 @@ Use [`references/development-swarm.md`](./references/development-swarm.md) for c
162
162
 
163
163
  Purpose: turn one result into many risk lenses and a decision-grade verdict.
164
164
 
165
- Use lens swarm for broad coverage, quorum for confidence on one critical judgement, or both for high-stakes releases. In adapters that expose current session model/thinking policy, default ordinary same-policy review swarms to that current policy and require explicit args only when intentionally varying models or thinking levels. Run a cheap model/tool preflight before launching expensive reviewer fanout; if it fails, use the `ACTOR_PREFLIGHT_FAILED` stage/model/error-class/prompt-file diagnostic to choose explicit override args instead of rerunning blindly. For packaged review swarms, tune `min_successful_reviewers`, `reviewer_concurrency`, `subagent_ttl_ms`, and `merge_policy` instead of manual reruns; preserve partial reports and label the outcome `complete`, `degraded`, or `insufficient_data`. The final report should separate consensus findings, minority findings, merger findings, risks, and recommended next actions.
165
+ Use lens swarm for broad coverage, quorum for confidence on one critical judgement, or both for high-stakes releases. In adapters that expose current session model/thinking policy, default ordinary same-policy review swarms to that current policy and require explicit args only when intentionally varying models or thinking levels. Run a cheap model/tool preflight before launching expensive reviewer fanout; if it fails, use the `ACTOR_PREFLIGHT_FAILED` stage/model/error-class/prompt-file diagnostic to choose explicit override args instead of rerunning blindly. For Skill-owned review swarms, tune `min_successful_reviewers`, `reviewer_concurrency`, `subagent_ttl_ms`, and `merge_policy` instead of manual reruns; preserve partial reports and label the outcome `complete`, `degraded`, or `insufficient_data`. The final report should separate consensus findings, minority findings, merger findings, risks, and recommended next actions.
166
166
 
167
167
  A review swarm synthesis must not fabricate claims. Every final finding should trace to a reviewer note, checked artifact, command output, source, or explicit merger rationale. Devil's Advocate critical findings must be preserved or explicitly disproved with evidence.
168
168
 
@@ -345,7 +345,7 @@ Locks prevent subagents from interfering with shared scopes. Locks are optional
345
345
 
346
346
  ## Validation
347
347
 
348
- After changing Swarm adapter contracts or packaged documentation, validate the local distribution with whatever checks the host project provides. At minimum, review the text for boundary drift:
348
+ After changing Swarm adapter contracts or Skill documentation, validate the local distribution with whatever checks the host project provides. At minimum, review the text for boundary drift:
349
349
 
350
350
  - no dependency on a specific extension, actor runtime, registry, recipe store, or CLI runner;
351
351
  - no bundled broad coordinator or lock runtime as portable Swarm core;
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "reviewer": "subagent-review.json",
5
- "critic": "subagent-critic.json",
6
- "verifier": "subagent-verify.json",
7
- "merger": "subagent-merge.json",
8
- "normalizer": "subagent-normalize.json"
4
+ "reviewer": "swarm/subagent-review",
5
+ "critic": "swarm/subagent-critic",
6
+ "verifier": "swarm/subagent-verify",
7
+ "merger": "swarm/subagent-merge",
8
+ "normalizer": "swarm/subagent-normalize"
9
9
  },
10
10
  "args": [
11
11
  "problem:string",
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "checkpoint": "subagent-checkpoint.json",
5
- "followup": "subagent-followup.json",
6
- "normalizer": "subagent-normalize.json"
4
+ "checkpoint": "swarm/subagent-checkpoint",
5
+ "followup": "swarm/subagent-followup",
6
+ "normalizer": "swarm/subagent-normalize"
7
7
  },
8
8
  "args": [
9
9
  "state:string",
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "planner": "subagent-plan.json",
5
- "task_card": "subagent-task-card.json",
6
- "critic": "subagent-critic.json",
7
- "normalizer": "subagent-normalize.json"
4
+ "planner": "swarm/subagent-plan",
5
+ "task_card": "swarm/subagent-task-card",
6
+ "critic": "swarm/subagent-critic",
7
+ "normalizer": "swarm/subagent-normalize"
8
8
  },
9
9
  "args": [
10
10
  "goal:string",
@@ -2,7 +2,7 @@
2
2
  "description": "General-purpose multi-lens review swarm. Launches independent reviewers by lens, then verifies, merges, judges, and normalizes the result.",
3
3
  "async": true,
4
4
  "imports": {
5
- "coordinator": "subagent-review-coordinator.json"
5
+ "coordinator": "swarm/subagent-review-coordinator"
6
6
  },
7
7
  "args": [
8
8
  "scope:string",
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "subagent": "subagent-prompt.json",
5
- "merger": "subagent-merge.json",
6
- "judge": "subagent-judge.json",
7
- "normalizer": "subagent-normalize.json"
4
+ "subagent": "swarm/subagent-prompt",
5
+ "merger": "swarm/subagent-merge",
6
+ "judge": "swarm/subagent-judge",
7
+ "normalizer": "swarm/subagent-normalize"
8
8
  },
9
9
  "args": [
10
10
  "prompt:string",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "planner": "subagent-plan.json",
5
- "evidence": "subagent-evidence-map.json",
6
- "contradictions": "subagent-contradiction-map.json",
7
- "verifier": "subagent-verify.json",
8
- "merger": "subagent-merge.json",
9
- "normalizer": "subagent-normalize.json"
4
+ "planner": "swarm/subagent-plan",
5
+ "evidence": "swarm/subagent-evidence-map",
6
+ "contradictions": "swarm/subagent-contradiction-map",
7
+ "verifier": "swarm/subagent-verify",
8
+ "merger": "swarm/subagent-merge",
9
+ "normalizer": "swarm/subagent-normalize"
10
10
  },
11
11
  "args": [
12
12
  "question:string",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "coordinator": "subagent-review-coordinator.json"
4
+ "coordinator": "swarm/subagent-review-coordinator"
5
5
  },
6
6
  "args": [
7
7
  "scope:string",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "subagent": "subagent-prompt.json"
4
+ "subagent": "swarm/subagent-prompt"
5
5
  },
6
6
  "args": [
7
7
  "prompts:array",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "subagent": "subagent-prompt.json"
4
+ "subagent": "swarm/subagent-prompt"
5
5
  },
6
6
  "args": [
7
7
  "prompt:string",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "async": true,
3
3
  "imports": {
4
- "preflight": "subagent-preflight.json",
5
- "reviewer": "subagent-review.json",
6
- "verifier": "subagent-verify.json",
7
- "merger": "subagent-merge.json",
8
- "judge": "subagent-judge.json",
9
- "normalizer": "subagent-normalize.json"
4
+ "preflight": "swarm/subagent-preflight",
5
+ "reviewer": "swarm/subagent-review",
6
+ "verifier": "swarm/subagent-verify",
7
+ "merger": "swarm/subagent-merge",
8
+ "judge": "swarm/subagent-judge",
9
+ "normalizer": "swarm/subagent-normalize"
10
10
  },
11
11
  "args": [
12
12
  "scope:string",
@@ -12,13 +12,14 @@ The Inspector follows the kernel directly. It shows Runs owned by the current Pi
12
12
 
13
13
  Shows captured execution provenance:
14
14
 
15
- - Recipe name and source path;
15
+ - file-derived Recipe stem and logical reference;
16
+ - source kind (`user_registry_capability`, `active_skill_component`, or `explicit_file_recipe`) and Skill identity when owned;
16
17
  - resolved template and values;
17
- - imports/context records;
18
+ - root/import roles plus alias ancestry;
18
19
  - declared artifacts and actor-local actions;
19
20
  - model/thinking policy and launch source.
20
21
 
21
- Captured Recipe evidence belongs to the Run generation and does not change when an active Recipe file later changes. Non-empty object values render as indented brace-delimited property lists rather than flattened inline strings.
22
+ Captured Recipe evidence belongs to the Run generation and does not change when an active Recipe file later changes. Skill components display logical identities such as `artifacts/report`; private physical `source_file`, `skill_dir`, and `recipe_dir` stay out of Inspector and model-facing views. Non-empty object values render as indented brace-delimited property lists rather than flattened inline strings.
22
23
 
23
24
  ## Trace
24
25
 
@@ -123,8 +123,8 @@ Archive and prune apply only to terminal Runs and enforce path containment. Rete
123
123
 
124
124
  Packaged controlled services demonstrate the endpoint protocol:
125
125
 
126
- - `music-player` consumes playback Controls and emits playback Trace;
127
- - `resource-locker` consumes queue/lease actions, emits lock Trace, and atomically retains at most 512 valid journal records within 1 MiB.
126
+ - `media/player` consumes playback Controls and emits playback Trace;
127
+ - `actors/resource-locker` consumes queue/lease actions, emits lock Trace, and atomically retains at most 512 valid journal records within 1 MiB.
128
128
 
129
129
  Shared archive/prune evidence similarly retains at most 256 valid records within 1 MiB under its canonical lock. The obsolete advisory `wake.jsonl` notifier was removed; filesystem watchers and bounded reconciliation observe authoritative state directly.
130
130
 
@@ -1,43 +1,43 @@
1
- # Packaged Recipe Library
1
+ # Skill-Owned Recipe Components
2
2
 
3
- Packaged Recipes provide maintained execution graphs and service definitions. User Recipes with the same name shadow packaged definitions; invalid shadowing fails closed.
3
+ Active Skills provide maintained execution graphs and service definitions. Skill Recipe identity is `<active Skill name>/<Recipe filename stem>`. Recipe files have no top-level `name`; `SKILL.md` `name` remains Pi host metadata matching the Skill directory, and pi-actors introduces no additional Skill identity field. Skill components are outside user Recipe discovery and never become tools merely because a Skill is active.
4
4
 
5
5
  ## Recommended Entry Points
6
6
 
7
7
  ### Repository and delivery
8
8
 
9
- - `pipeline-repo-health.json` — repository inspection and bounded health artifact.
10
- - `pipeline-docs-maintenance.json` — documentation analysis and artifact preparation.
11
- - `pipeline-release-readiness.json` — release checks and readiness artifact.
12
- - `pipeline-release-summary.json` — release-summary artifact.
13
- - `pipeline-development-tasking.json` — task-card and implementation planning pipeline.
9
+ - `project-work/repo-health` — repository inspection and bounded health artifact.
10
+ - `project-work/docs-maintenance` — documentation analysis and artifact preparation.
11
+ - `project-work/release-readiness` — release checks and readiness artifact.
12
+ - `project-work/release-summary` — release-summary artifact.
13
+ - `swarm/development-tasking` — task-card and implementation planning pipeline.
14
14
 
15
15
  ### Review and synthesis
16
16
 
17
- - `pipeline-quorum-review.json` — parallel reviewers with quorum-oriented synthesis.
18
- - `pipeline-review-readiness.json` — review plus readiness stages.
19
- - `pipeline-research-synthesis.json` — evidence-oriented research synthesis.
20
- - `lens-swarm.json` — configurable repeated review lenses.
21
- - `subagent-review-coordinator.json` — lower-level review/verify/merge/judge composition.
17
+ - `swarm/quorum-review` — parallel reviewers with quorum-oriented synthesis.
18
+ - `swarm/review-readiness` — review plus readiness stages.
19
+ - `swarm/research-synthesis` — evidence-oriented research synthesis.
20
+ - `swarm/lens-review` — configurable repeated review lenses.
21
+ - `swarm/subagent-review-coordinator` — lower-level review/verify/merge/judge composition.
22
22
 
23
23
  Callers should own model, thinking, concurrency, quorum, and mission policy. Review pipelines preflight provider/model availability before expensive fanout.
24
24
 
25
25
  ### Artifacts
26
26
 
27
- - `pipeline-artifact-report.json` — prepare one artifact body.
28
- - `pipeline-artifact-write.json` — prepare and deterministically write an artifact.
29
- - `pipeline-artifact-bundle.json` — optional validation, artifact write, manifest generation, and manifest write.
30
- - `utility-artifact-write.json` — deterministic create/overwrite/append helper.
31
- - `utility-artifact-manifest.json` — artifact manifest generation.
27
+ - `artifacts/report` — prepare one artifact body.
28
+ - `artifacts/write` — prepare and deterministically write an artifact.
29
+ - `artifacts/bundle` — optional validation, artifact write, manifest generation, and manifest write.
30
+ - `artifacts/file-write` — deterministic create/overwrite/append helper.
31
+ - `artifacts/manifest` — artifact manifest generation.
32
32
 
33
33
  Artifact pipelines terminate in files/manifests and result evidence; they do not fabricate communication events.
34
34
 
35
35
  ### Controlled services
36
36
 
37
- - `music-player.json` — playback service with declared playback actions, `controls.jsonl`, generation-fenced endpoint readiness, state artifact, and playback Trace. Player selection is `player:enum(auto,mpv,afplay,ffplay,cvlc,play,wmp)=auto`.
38
- - `resource-locker.json` — optional queue/lease-lock service with explicit owner/resource input, lock Trace, and a 512-record/1 MiB atomically retained journal.
37
+ - `media/player` — playback service with declared playback actions, `controls.jsonl`, generation-fenced endpoint readiness, state artifact, and playback Trace. Player selection is `player:enum(auto,mpv,afplay,ffplay,cvlc,play,wmp)=auto`.
38
+ - `actors/resource-locker` — optional queue/lease-lock service with explicit owner/resource input, lock Trace, and a 512-record/1 MiB atomically retained journal.
39
39
 
40
- These are the packaged Recipes that declare actor-local Control. Ordinary one-shot Recipes omit it. Helper-backed packaged Recipes self-locate their installed package root when `repo` is omitted; an explicit caller value still wins for development or custom layouts.
40
+ These Recipes declare actor-local Control. Ordinary one-shot Recipes omit it. Helper-backed Skill Recipes self-locate through runtime-owned `{skill_dir}`; callers do not pass package installation roots.
41
41
 
42
42
  ## Component Recipes
43
43
 
@@ -45,7 +45,7 @@ Subagent components provide reusable command-template cells for normalization, p
45
45
 
46
46
  Imports compose these definitions inside one parent Run. They are not independently addressable peers. Parent template flags control sequencing, parallelism, retries, failure scope, recovery, and repeated execution.
47
47
 
48
- Packaged components can be selected exactly as `std:<recipe-name>`. Recipes bundled under a Pi-active Skill are selected as `skill:<skill-name>/<recipe-path>` and receive runtime-owned `{skill_dir}` plus `{recipe_dir}`. Active Skill components are namespaced library entries, never automatic tools; expose one intentionally through a user Recipe wrapper when a direct tool is desired.
48
+ Recipes bundled under a Pi-active Skill are selected as `<skill-name>/<recipe-stem>` and receive runtime-owned `{skill_dir}` plus `{recipe_dir}`. Explicit `.json` / `.md` paths select exact files: entry paths are based at invocation `cwd`, while relative imports are based at the importing Recipe's directory. Active Skill components are library entries, never automatic tools; expose one intentionally through a user Recipe wrapper when a direct tool is desired.
49
49
 
50
50
  ## Utility Recipes
51
51
 
@@ -70,7 +70,7 @@ Use utilities as imported cells or registered tools where their contract fits.
70
70
 
71
71
  ## Installation Safety
72
72
 
73
- Do not bulk-copy `recipes/*.json` into the user Recipe root. Internal `draft-review.json` and `tool-review.json` support fenced automatic review and must not become user-installed callable tools. Register or wrap only the specific public capability you intend to use.
73
+ Do not bulk-copy bundled Recipes into the user Recipe root. Internal `recipe-memory/draft-review` and `recipe-memory/tool-review` components support fenced automatic review and must not become user-installed callable tools. Register or wrap only the specific public capability you intend to use.
74
74
 
75
75
  ## Validation
76
76
 
@@ -78,7 +78,7 @@ Do not bulk-copy `recipes/*.json` into the user Recipe root. Internal `draft-rev
78
78
  npm run recipes:qa
79
79
  ```
80
80
 
81
- Recipe QA validates syntax, imports, Control declarations, artifact paths, helper references, and platform documentation. Recipe descriptions are optional because discovery supplies stable fallback tool copy; internal component Recipes do not need boilerplate. The packaged baseline requires zero diagnostics and zero warnings, and any future warning is release-blocking with its concrete file and repair. Removed mailbox declarations fail with the migration diagnostic rather than receiving automatic conversion.
81
+ Recipe QA recursively inventories direct Skill components and validates filesystem identity, syntax, imports, Control declarations, origin ownership, portable artifact paths, and `{skill_dir}` helper references. Nested files and JSON/Markdown stem collisions fail precisely. Recipe descriptions remain optional; QA requires zero capability diagnostics and zero warnings without enforcing style, documentation quotas, or architecture policy. Removed mailbox declarations fail with the migration diagnostic rather than receiving automatic conversion.
82
82
 
83
83
  ## Related
84
84
 
package/docs/releasing.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Release Operations
2
2
 
3
- Stable releases use one immutable tag workflow. The workflow runs the complete reusable Ubuntu, macOS, Windows, and dependency-audit boundary before any publication, publishes and verifies the exact npm package through Trusted Publisher, then creates or converges the GitHub Release from the matching changelog section.
3
+ Stable releases use one immutable tag workflow. The workflow runs normal product validation on Ubuntu, macOS, and Windows plus the dependency audit before any publication, publishes and verifies the exact npm package through Trusted Publisher, then creates or converges the GitHub Release from the matching changelog section. Architecture review uses the project-local Domain DAG Skill during architecture-affecting development; release automation does not run policy, line-count, source-style, or Domain DAG gates.
4
4
 
5
5
  ## One-time npm Trusted Publisher setup
6
6
 
@@ -19,7 +19,7 @@ Do not create `NPM_TOKEN`, `NODE_AUTH_TOKEN`, or another long-lived npm publish
19
19
 
20
20
  1. Merge the validated release tree through the repository's guarded `dev` to `main` flow.
21
21
  2. Create one immutable `v<package.version>` tag on the verified `main` commit.
22
- 3. Let `.github/workflows/release.yml` invoke the complete reusable validation workflow.
22
+ 3. Let `.github/workflows/release.yml` invoke the reusable `npm run validate` and dependency-audit workflow.
23
23
  4. Let the publication job verify the tag commit, package manifests, and non-empty changelog section.
24
24
  5. Publish the exact public npm package through OIDC when the version does not exist.
25
25
  6. Verify npm version, `gitHead`, Pi extension/skill metadata, and packed runtime manifests.