pi-daddy 0.43.0 → 0.44.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 (222) hide show
  1. package/CHANGELOG.md +104 -33
  2. package/README.md +27 -5
  3. package/THIRD_PARTY_LICENSES/musl-COPYRIGHT.txt +193 -0
  4. package/THIRD_PARTY_LICENSES/zig-MIT.txt +21 -0
  5. package/THIRD_PARTY_NOTICES.md +9 -0
  6. package/contracts/ledger-record/v1/README.md +40 -25
  7. package/dist/cli.d.ts +2 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +10 -5
  10. package/dist/cli.js.map +1 -1
  11. package/dist/executors/activity-session.js +116 -65
  12. package/dist/executors/activity-session.js.map +1 -1
  13. package/dist/executors/captured-execution.d.ts +13 -0
  14. package/dist/executors/captured-execution.d.ts.map +1 -0
  15. package/dist/executors/captured-execution.js +53 -0
  16. package/dist/executors/captured-execution.js.map +1 -0
  17. package/dist/executors/child-final.d.ts +31 -0
  18. package/dist/executors/child-final.d.ts.map +1 -0
  19. package/dist/executors/child-final.js +197 -0
  20. package/dist/executors/child-final.js.map +1 -0
  21. package/dist/executors/executor.d.ts +2 -1
  22. package/dist/executors/executor.d.ts.map +1 -1
  23. package/dist/executors/executor.js +12 -0
  24. package/dist/executors/executor.js.map +1 -1
  25. package/dist/executors/owned-worker.d.ts +18 -0
  26. package/dist/executors/owned-worker.d.ts.map +1 -0
  27. package/dist/executors/owned-worker.js +295 -0
  28. package/dist/executors/owned-worker.js.map +1 -0
  29. package/dist/executors/worker-artifact.d.ts +3 -0
  30. package/dist/executors/worker-artifact.d.ts.map +1 -0
  31. package/dist/executors/worker-artifact.js +3 -0
  32. package/dist/executors/worker-artifact.js.map +1 -0
  33. package/dist/governance/approval-prompt.d.ts +4 -3
  34. package/dist/governance/approval-prompt.d.ts.map +1 -1
  35. package/dist/governance/approval-prompt.js +13 -6
  36. package/dist/governance/approval-prompt.js.map +1 -1
  37. package/dist/governance/captured-worker-record.d.ts +9 -0
  38. package/dist/governance/captured-worker-record.d.ts.map +1 -0
  39. package/dist/governance/captured-worker-record.js +123 -0
  40. package/dist/governance/captured-worker-record.js.map +1 -0
  41. package/dist/governance/lease-record.d.ts +4 -0
  42. package/dist/governance/lease-record.d.ts.map +1 -1
  43. package/dist/governance/lease-record.js +19 -2
  44. package/dist/governance/lease-record.js.map +1 -1
  45. package/dist/governance/ledger-events.d.ts +5 -5
  46. package/dist/governance/ledger-events.d.ts.map +1 -1
  47. package/dist/governance/ledger-v3-validation.js +1 -1
  48. package/dist/governance/ledger-v3-validation.js.map +1 -1
  49. package/dist/governance/workspace-acceptance.d.ts +3 -1
  50. package/dist/governance/workspace-acceptance.d.ts.map +1 -1
  51. package/dist/governance/workspace-acceptance.js +21 -5
  52. package/dist/governance/workspace-acceptance.js.map +1 -1
  53. package/dist/governance/workspace-lease.d.ts.map +1 -1
  54. package/dist/governance/workspace-lease.js +44 -1
  55. package/dist/governance/workspace-lease.js.map +1 -1
  56. package/dist/kernel/authority-text.d.ts +3 -0
  57. package/dist/kernel/authority-text.d.ts.map +1 -0
  58. package/dist/kernel/authority-text.js +22 -0
  59. package/dist/kernel/authority-text.js.map +1 -0
  60. package/dist/kernel/bounded-read-failures.d.ts +9 -0
  61. package/dist/kernel/bounded-read-failures.d.ts.map +1 -0
  62. package/dist/kernel/bounded-read-failures.js +33 -0
  63. package/dist/kernel/bounded-read-failures.js.map +1 -0
  64. package/dist/kernel/bounded-read-sync.d.ts +24 -0
  65. package/dist/kernel/bounded-read-sync.d.ts.map +1 -0
  66. package/dist/kernel/bounded-read-sync.js +75 -0
  67. package/dist/kernel/bounded-read-sync.js.map +1 -0
  68. package/dist/kernel/bounded-read.d.ts +29 -2
  69. package/dist/kernel/bounded-read.d.ts.map +1 -1
  70. package/dist/kernel/bounded-read.js +98 -9
  71. package/dist/kernel/bounded-read.js.map +1 -1
  72. package/dist/kernel/capacity.d.ts +36 -0
  73. package/dist/kernel/capacity.d.ts.map +1 -0
  74. package/dist/kernel/capacity.js +94 -0
  75. package/dist/kernel/capacity.js.map +1 -0
  76. package/dist/kernel/captured-worker-contract.d.ts +38 -0
  77. package/dist/kernel/captured-worker-contract.d.ts.map +1 -0
  78. package/dist/kernel/captured-worker-contract.js +2 -0
  79. package/dist/kernel/captured-worker-contract.js.map +1 -0
  80. package/dist/kernel/catalog.d.ts +12 -3
  81. package/dist/kernel/catalog.d.ts.map +1 -1
  82. package/dist/kernel/catalog.js +28 -8
  83. package/dist/kernel/catalog.js.map +1 -1
  84. package/dist/kernel/chain.d.ts +1 -0
  85. package/dist/kernel/chain.d.ts.map +1 -1
  86. package/dist/kernel/chain.js.map +1 -1
  87. package/dist/kernel/definitions.d.ts +11 -1
  88. package/dist/kernel/definitions.d.ts.map +1 -1
  89. package/dist/kernel/definitions.js +6 -3
  90. package/dist/kernel/definitions.js.map +1 -1
  91. package/dist/kernel/fanout.d.ts +5 -25
  92. package/dist/kernel/fanout.d.ts.map +1 -1
  93. package/dist/kernel/fanout.js +15 -30
  94. package/dist/kernel/fanout.js.map +1 -1
  95. package/dist/kernel/grant-env.d.ts +0 -2
  96. package/dist/kernel/grant-env.d.ts.map +1 -1
  97. package/dist/kernel/grant-env.js +0 -1
  98. package/dist/kernel/grant-env.js.map +1 -1
  99. package/dist/kernel/model-preflight.d.ts +8 -0
  100. package/dist/kernel/model-preflight.d.ts.map +1 -1
  101. package/dist/kernel/model-preflight.js +23 -0
  102. package/dist/kernel/model-preflight.js.map +1 -1
  103. package/dist/kernel/selected-definitions.d.ts +15 -0
  104. package/dist/kernel/selected-definitions.d.ts.map +1 -0
  105. package/dist/kernel/selected-definitions.js +146 -0
  106. package/dist/kernel/selected-definitions.js.map +1 -0
  107. package/dist/kernel/skill-packages.d.ts +4 -2
  108. package/dist/kernel/skill-packages.d.ts.map +1 -1
  109. package/dist/kernel/skill-packages.js +34 -41
  110. package/dist/kernel/skill-packages.js.map +1 -1
  111. package/dist/kernel/skill-resources.d.ts.map +1 -1
  112. package/dist/kernel/skill-resources.js +8 -11
  113. package/dist/kernel/skill-resources.js.map +1 -1
  114. package/dist/kernel/workspace.d.ts +6 -3
  115. package/dist/kernel/workspace.d.ts.map +1 -1
  116. package/dist/kernel/workspace.js +10 -6
  117. package/dist/kernel/workspace.js.map +1 -1
  118. package/dist/products/dashboard-cli.js +1 -1
  119. package/dist/products/dashboard-cli.js.map +1 -1
  120. package/dist/products/dashboard-render.d.ts +1 -2
  121. package/dist/products/dashboard-render.d.ts.map +1 -1
  122. package/dist/products/dashboard-render.js +3 -1
  123. package/dist/products/dashboard-render.js.map +1 -1
  124. package/dist/products/dashboard-session-client.d.ts +1 -2
  125. package/dist/products/dashboard-session-client.d.ts.map +1 -1
  126. package/dist/products/dashboard-session-client.js.map +1 -1
  127. package/dist/products/episode-report.d.ts +12 -8
  128. package/dist/products/episode-report.d.ts.map +1 -1
  129. package/dist/products/episode-report.js +61 -12
  130. package/dist/products/episode-report.js.map +1 -1
  131. package/extensions/approvals.ts +1 -1
  132. package/extensions/chain-plan.ts +9 -3
  133. package/extensions/context-staging.ts +30 -35
  134. package/extensions/dashboard-session-server.ts +1 -2
  135. package/extensions/definition-describe.ts +44 -0
  136. package/extensions/definition-runtime.ts +89 -26
  137. package/extensions/delegate-chain.ts +273 -256
  138. package/extensions/delegation-activation.ts +1 -1
  139. package/extensions/delegation.ts +41 -53
  140. package/extensions/execute-child.ts +167 -134
  141. package/extensions/fanout-outcome.ts +1 -9
  142. package/extensions/grants-command.ts +2 -9
  143. package/extensions/grants.ts +106 -38
  144. package/extensions/init-command.ts +52 -12
  145. package/extensions/reload-environment.ts +21 -2
  146. package/extensions/retired-inputs.ts +7 -0
  147. package/extensions/run-delegation.ts +212 -265
  148. package/extensions/session-capacity.ts +53 -0
  149. package/extensions/session-environment.ts +5 -2
  150. package/extensions/session-model-prompt.ts +33 -32
  151. package/extensions/session-report.ts +28 -11
  152. package/extensions/session.ts +200 -157
  153. package/extensions/workspace-runtime.ts +2 -1
  154. package/native/README.md +25 -0
  155. package/native/linux-x64/worker +0 -0
  156. package/native/linux-x64/worker.sha256 +1 -0
  157. package/native/provenance.json +42 -0
  158. package/native/toolchain.json +18 -0
  159. package/native/worker.c +209 -0
  160. package/package.json +15 -7
  161. package/src/cli.ts +16 -6
  162. package/src/executors/activity-session.ts +120 -66
  163. package/src/executors/captured-execution.ts +61 -0
  164. package/src/executors/child-final.ts +190 -0
  165. package/src/executors/executor.ts +14 -1
  166. package/src/executors/owned-worker.ts +322 -0
  167. package/src/executors/worker-artifact.ts +2 -0
  168. package/src/governance/approval-prompt.ts +18 -8
  169. package/src/governance/captured-worker-record.ts +138 -0
  170. package/src/governance/lease-record.ts +21 -2
  171. package/src/governance/ledger-events.ts +5 -5
  172. package/src/governance/ledger-v3-validation.ts +1 -1
  173. package/src/governance/workspace-acceptance.ts +20 -4
  174. package/src/governance/workspace-lease.ts +59 -1
  175. package/src/kernel/authority-text.ts +17 -0
  176. package/src/kernel/bounded-read-failures.ts +42 -0
  177. package/src/kernel/bounded-read-sync.ts +87 -0
  178. package/src/kernel/bounded-read.ts +128 -11
  179. package/src/kernel/capacity.ts +123 -0
  180. package/src/kernel/captured-worker-contract.ts +29 -0
  181. package/src/kernel/catalog.ts +45 -16
  182. package/src/kernel/chain.ts +1 -0
  183. package/src/kernel/definitions.ts +11 -2
  184. package/src/kernel/fanout.ts +17 -32
  185. package/src/kernel/grant-env.ts +0 -3
  186. package/src/kernel/model-preflight.ts +29 -0
  187. package/src/kernel/selected-definitions.ts +156 -0
  188. package/src/kernel/skill-packages.ts +40 -38
  189. package/src/kernel/skill-resources.ts +8 -9
  190. package/src/kernel/workspace.ts +12 -5
  191. package/src/products/dashboard-cli.ts +1 -1
  192. package/src/products/dashboard-render.ts +6 -2
  193. package/src/products/dashboard-session-client.ts +1 -2
  194. package/src/products/episode-report.ts +80 -17
  195. package/dist/advisors/advisor.d.ts +0 -90
  196. package/dist/advisors/advisor.d.ts.map +0 -1
  197. package/dist/advisors/advisor.js +0 -154
  198. package/dist/advisors/advisor.js.map +0 -1
  199. package/dist/advisors/decider.d.ts +0 -88
  200. package/dist/advisors/decider.d.ts.map +0 -1
  201. package/dist/advisors/decider.js +0 -29
  202. package/dist/advisors/decider.js.map +0 -1
  203. package/dist/advisors/jev.d.ts +0 -41
  204. package/dist/advisors/jev.d.ts.map +0 -1
  205. package/dist/advisors/jev.js +0 -139
  206. package/dist/advisors/jev.js.map +0 -1
  207. package/dist/advisors/settings.d.ts +0 -49
  208. package/dist/advisors/settings.d.ts.map +0 -1
  209. package/dist/advisors/settings.js +0 -99
  210. package/dist/advisors/settings.js.map +0 -1
  211. package/dist/governance/episode-cost-gate.d.ts +0 -31
  212. package/dist/governance/episode-cost-gate.d.ts.map +0 -1
  213. package/dist/governance/episode-cost-gate.js +0 -112
  214. package/dist/governance/episode-cost-gate.js.map +0 -1
  215. package/extensions/advisor-session.ts +0 -67
  216. package/extensions/effort-advice.ts +0 -112
  217. package/extensions/pruning-advice.ts +0 -133
  218. package/src/advisors/advisor.ts +0 -246
  219. package/src/advisors/decider.ts +0 -74
  220. package/src/advisors/jev.ts +0 -163
  221. package/src/advisors/settings.ts +0 -115
  222. package/src/governance/episode-cost-gate.ts +0 -128
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Newest first. **Breaking changes are marked and say what to do about them.**
4
4
 
5
5
  This file exists because the README had grown ninety lines of stacked version banners before a reader
6
- reached what the package *does* — churn documentation in front of product documentation. The banners are
6
+ reached what the package _does_ — churn documentation in front of product documentation. The banners are
7
7
  the record of how the package got here and are worth keeping; they are not worth reading first.
8
8
 
9
9
  > **0.13.0 is the first PUBLISHED release.** Every version below it was developed in this repository and
@@ -12,14 +12,87 @@ the record of how the package got here and are worth keeping; they are not worth
12
12
  > the record of how the package arrived at what it does, and because the reasoning behind each one is
13
13
  > usually the clearest statement of why the current behaviour is what it is.
14
14
 
15
+ ## 0.44.0 — stable release (2026-10-07)
16
+
17
+ - Rebuild the native helper using a SHA-pinned Zig/static-musl toolchain, retain exact source/artifact/license
18
+ provenance, and have CI reproduce every output byte. The loader verifies the held executable against its generated
19
+ JavaScript constant; the checksum sidecar is no longer runtime authority. Ship the corresponding musl and Zig notices.
20
+ - Reject invalid native control/status descriptors and unsupported child enumeration before admitting a worker;
21
+ treat control-read failures as owner loss, validate numeric bounds, send TERM once per unreaped child, and preserve
22
+ the original stop reason during hard escalation. Startup uses the caller's timeout/deadline, retaining late valid
23
+ ownership evidence without reopening a cancelled worker's start gate.
24
+ - Recheck retained reservations against their original durable receipts before single, parallel and chain dispatch.
25
+ Exact later settlement proof releases capacity once; missing or mismatched proof remains retained, and the original
26
+ failed/unknown result remains unchanged. Use `delegate_all` for independent parallel work.
27
+ - Compare streamed/persisted messages structurally: object-key order is irrelevant, array order and every value remain
28
+ binding. Share a final-output conformance table with skill-harness, preserving text bytes without invented separators.
29
+ - **Breaking — explicit package support:** require Linux x64 and exact Pi 1.0.4 in package platform and peer metadata.
30
+ Other platforms or Pi versions must retain their previously qualified runtime until separately qualified.
31
+ - Clarify the original candidate's removed monetary/advisor/model automation and passive-cost JSON breaking changes,
32
+ with migration guidance and version-scoped changelog entries.
33
+
34
+ ## 0.44.0-rc.1 — captured delegation qualification (2026-10-07)
35
+
36
+ Release candidate for review, not a stable or npm publication. Use the immutable candidate tag for source review.
37
+
38
+ - **Breaking — delegation bounds:** budget now caps active descendants through disjoint subtree reservations, alongside
39
+ depth and per-call limits. Settled children return capacity; uncertain cleanup retains it. A single child
40
+ conservatively reserves the available subtree, and active ownership survives extension reloads.
41
+ - **Bounded input and approval handling:** retain cleanup failures on the original owner, guard manual history
42
+ reads, and time out approvals without weakening their authority. Named approval revocation uses the pinned
43
+ selected definition; `revoke --all` remains available without resource acquisition.
44
+ - **Captured execution contract:** qualify Pi 1.0.4 JSON settlement against the exact persisted current turn and
45
+ active branch. Preserve complete final text and expose work/final/cleanup/observation states independently.
46
+ Failed children return native error results with available evidence; optional recording failures preserve work.
47
+ - **Cleanup:** use the packaged Linux x64 subreaper and execution-bound durable receipts. Unknown subtree cleanup
48
+ retains capacity and quarantines workspace reuse; preserve the referenced ownership directory as evidence.
49
+ - **Breaking — platform/backend support:** the package now declares Linux x64 only. macOS, ARM64 and native Windows users must remain on their previous qualified release; this candidate has no qualified executor there.
50
+ - **Breaking — staged backend release:** governed Herdr execution refuses, even when its server answers, until parity is
51
+ qualified. Explicitly set `PI_DADDY_HERDR=0` for captured execution; there is no fallback after selection.
52
+ - **Required handoffs:** block dependent chain steps when the complete prior final exceeds the handoff limit.
53
+ The completed step and its full result remain available; no tail-only handoff is promoted to complete.
54
+ - **Selected Principal resources:** bind the native phase to selected inline and delegated bytes, hash and exact
55
+ package manifest, use `delegate_describe` to obtain the required definition identity, and pin it until reload.
56
+ Missing, moved or tampered marked Principal resources refuse rather than becoming ordinary inline definitions.
57
+
58
+ - **Breaking — removed automation:** remove monetary execution gates, external advisors and the automatic first-delegation model chooser. Configure provider-side spend controls if required, and select models/thinking manually. Recognized
59
+ legacy settings and cost arguments are inert; manual model edits, permission approvals and retained historical
60
+ usage remain. Pi 1.0.4 argument preparation validates active arguments after removing the retired cost override.
61
+ - Live complete episode cost is explicitly unavailable in the session dashboard; historical usage remains in reports.
62
+
63
+
64
+ ### Passive cost coverage
65
+
66
+ - **Breaking — report JSON change:** row/group/total cost and episode-cost percentiles may be null when coverage is incomplete.
67
+ Use observedCost for the known subtotal and costCoverage for complete/partial/unavailable status. A reported zero
68
+ remains zero. Cost coverage concerns recorded child executions only; root and unrecorded work are not measured.
69
+
70
+ ### Surviving guard repairs
71
+
72
+ - Treat damaged or oversized runtime/resource settings and package metadata as failures, not missing defaults.
73
+ Bounded reads reject FIFOs and malformed UTF-8; unresolved cleanup stays attached to the operation and session owner.
74
+ - Pruned handoffs carry only the active Pi branch and shared ancestry. Unavailable input is labeled incomplete.
75
+ Named file handoffs require Linux held-descriptor confinement proof and refuse when it is unavailable.
76
+ - Approval timeouts accept absent (120 seconds), literal 0 (unlimited), or canonical whole seconds 1..2147483.
77
+ Fix malformed values before requesting a new prompt; existing authority remains usable.
78
+
79
+ ## 0.43.1 — Pi-only documentation refresh (2026-09-29)
80
+
81
+ - Refresh `README.md`, `AGENTS.md`, the package README, and the ledger-record contract README against the shipped
82
+ initialization, privacy, model, outcome, workspace, executor, CLI, and compatibility behavior.
83
+ - Remove obsolete Claude-specific formatting policy and describe Pi as this repository's only supported agent
84
+ workflow; retain ignore guards against accidentally committing assistant-specific scratch state.
85
+ - Extend documentation drift checks to verify the published contract's file references and root workspace commands.
86
+ No runtime behavior or default changed.
87
+
15
88
  ## 0.43.0 — episode outcome labeling (2026-09-29)
16
89
 
17
90
  - PR #85 adds `pi-daddy outcomes`, which reads Git history for `Pi-Episode` trailers and appends `episode_outcome`
18
91
  ledger records covering survival on the default branch, reverts by name or inverse diff, CI state via `gh`,
19
92
  amendments, and operator corrections.
20
93
  - `pi-daddy report` now fills its outcome column from those records.
21
- - Ledger readers now validate every known record kind before skipping kinds they do not render, and skip unknown
22
- future kinds instead of throwing. No default changed.
94
+ - The dashboard ledger reader now validates every known record kind before skipping kinds it does not render, and
95
+ skips unknown future kinds instead of throwing. No default changed.
23
96
 
24
97
  ## 0.42.0 — model-attributed usage records (2026-09-29)
25
98
 
@@ -777,7 +850,6 @@ and test synchronization only; dependencies and runtime are unchanged.
777
850
  Rename prose/whitespace keys before calling `runNamedCheck`; invalid IDs now refuse before the executable
778
851
  or lease starts rather than failing only when a v3 receipt is appended.
779
852
 
780
-
781
853
  ## 0.19.0 — workspace routing is a capability (2026-08-23)
782
854
 
783
855
  **The four hang fixes below were staged for a 0.18.2 and are released here instead — a decision reversed
@@ -785,13 +857,13 @@ deliberately, so the reversal is recorded rather than the reason vanishing.** Th
785
857
  argued for cutting them as a patch so a fix for released code would not be gated on a breaking change. The
786
858
  counter-argument won: **R-131 — workspace routing does not attenuate — is a live escalation in published
787
859
  0.18.0 and 0.18.1**, a child routed to `staging` can route its grandchild to `prod` with a real lease and a
788
- ledger line that reads as authorised, and the fix for it *is* the breaking change. A 0.18.2 would have fixed
860
+ ledger line that reads as authorised, and the fix for it _is_ the breaking change. A 0.18.2 would have fixed
789
861
  one defect and left that one open, on a line that then needed supporting alongside this one. Shipping once
790
862
  fixes all three.
791
863
 
792
864
  - **FIX — a retained lease no longer reports a retention that did not happen (R-152).** `markRetained`
793
865
  returned `void` and `releaseDelegationWorkspace` hardcoded the ledger word, so a `workspace_lease` event
794
- said `retained` — *"the pane may still be live"* — for a helper that had already died (the fact is `lost`),
866
+ said `retained` — _"the pane may still be live"_ — for a helper that had already died (the fact is `lost`),
795
867
  for a lease already cleanly released, and for a retention whose record could not be written. It now answers
796
868
  in the release vocabulary and the caller ledgers what it says. **Breaking for direct library callers only:**
797
869
  `WorkspaceLease.markRetained` returns `Promise<LeaseReleaseOutcome>` instead of `Promise<void>`, and
@@ -818,7 +890,6 @@ fixes all three.
818
890
  explicitly rejected outcome. Measured with a `herdr` that sleeps: before, `LOCK=HELD` with no marker
819
891
  indefinitely; after, released with the marker written. Tunable via `herdrCloseTimeoutMs` (default 15s).
820
892
 
821
-
822
893
  - Ship a canonical JSON Schema draft 2020-12 contract for `ledgerVersion: 2` plus deterministic fixtures for
823
894
  all four event types, generated through the production builders. Stable package export paths let external
824
895
  harnesses pin the real contract instead of maintaining a parallel format.
@@ -877,7 +948,7 @@ and a mutation battery, and are listed because ADR-0035 claimed three of them as
877
948
  amendment). **The entries under "Present in earlier releases" below DID ship**, and an earlier draft of this section put
878
949
  them under this heading, telling operators the `tool:*` attenuation escape could not affect them. (That draft
879
950
  then said "two" while three bullets sat under the heading, one of which — the v2 enum — is the single item
880
- here that provably did *not* ship. It has moved back.)
951
+ here that provably did _not_ ship. It has moved back.)
881
952
 
882
953
  - **Routing terminated below the root instead of attenuating.** `unknownCapabilities` did not know the
883
954
  namespace, and a catalog is always present in a real session, so every requested `workspace:<id>` was
@@ -999,7 +1070,7 @@ is never a force-push, and `test/branch-guard.test.ts`, which pins it against se
999
1070
 
1000
1071
  **Why a version at all**, since nothing here changed: rule 10 says version bumps take the same path as
1001
1072
  everything else, and this one did — branch, PR, review, squash-merge. The rule's first draft was reviewed by
1002
- six independent agents across two rounds that found sixteen defects, including that *"never commit to `main`"*
1073
+ six independent agents across two rounds that found sixteen defects, including that _"never commit to `main`"_
1003
1074
  forbids the merge the rule requires, and that the guard written to fix that had reproduced the same defect in
1004
1075
  shell. `docs/03-risks.md` R-85 and the 2026-08-18 session-log entry hold the details.
1005
1076
 
@@ -1012,11 +1083,11 @@ order is now what the sentence says it is.
1012
1083
  one that removes the last reason to keep an ungoverned spawner installed alongside this one.
1013
1084
 
1014
1085
  - **The handoff is fenced, labelled and nonce-delimited.** A chain makes step N's task the output of a governed
1015
- child, which is the highest-authority text a child receives after its own `SKILL.md`. The label is *framing* — a
1086
+ child, which is the highest-authority text a child receives after its own `SKILL.md`. The label is _framing_ — a
1016
1087
  determined injection can argue with it — but the **nonce is mechanism**: minted after the producing child
1017
1088
  finished, so it cannot forge a closing delimiter. ADR-0033 records the stronger option (quarantine to a file the
1018
1089
  next step must `read`) as the prepared answer if framing proves insufficient.
1019
- - **Gated upfront: one dialog per capability *and* definition, all before the first step runs.** Approvals arrive
1090
+ - **Gated upfront: one dialog per capability _and_ definition, all before the first step runs.** Approvals arrive
1020
1091
  together instead of interrupting a running pipeline. Not one dialog for everything — an approval is keyed
1021
1092
  `capability@subject`, so a single dialog spanning several definitions would ask about one and spend the answer on
1022
1093
  the rest. ADR-0033 originally specified that, three reviewers found it was a privilege path, and the ADR carries
@@ -1031,7 +1102,7 @@ one that removes the last reason to keep an ungoverned spawner installed alongsi
1031
1102
  `PI_GRANTS_FANOUT=12` (the default is 8). At most 8 steps.
1032
1103
 
1033
1104
  **Also:** `test-integration/herdr.it.ts` now checks herdr's own contracts against a real server in an isolated
1034
- workspace — the gap that hid three shipping defects in 0.16.0, where the unit fake was a *claim* about herdr that
1105
+ workspace — the gap that hid three shipping defects in 0.16.0, where the unit fake was a _claim_ about herdr that
1035
1106
  nothing verified.
1036
1107
 
1037
1108
  ## 0.16.0 — children you can watch, in panes chosen for you
@@ -1039,17 +1110,17 @@ nothing verified.
1039
1110
  **If herdr is running, your sub-agents now run in herdr panes without you configuring anything — and the
1040
1111
  parent shows what each one is doing while it works.** Two ADRs, shipped together.
1041
1112
 
1042
- ### `PI_GRANTS_HERDR` is three-state, and unset now means *probe* (ADR-0031)
1113
+ ### `PI_GRANTS_HERDR` is three-state, and unset now means _probe_ (ADR-0031)
1043
1114
 
1044
- | Value | Behaviour |
1045
- | :--- | :--- |
1115
+ | Value | Behaviour |
1116
+ | :---- | :-------------------------------------------------------------------------------------------------------------------------------------- |
1046
1117
  | unset | Probe once at session start (`herdr tab list`, 2s bound). A server that **answers** ⇒ herdr panes; anything else ⇒ captured subprocess. |
1047
- | `1` | Demand herdr. **Every delegation refuses** if it is unreachable — no fallback. |
1048
- | `0` | Demand the captured subprocess. No probe. |
1118
+ | `1` | Demand herdr. **Every delegation refuses** if it is unreachable — no fallback. |
1119
+ | `0` | Demand the captured subprocess. No probe. |
1049
1120
 
1050
1121
  **Not a `PATH` check.** A binary with no server behind it would make every delegation fail at `tab create`, on
1051
- a path nobody chose — so only a *reachable* server counts. This reverses part of ADR-0016 point 6, which
1052
- refused auto-detection on the grounds that a run must not "silently relocate"; the answer to *silently* is that
1122
+ a path nobody chose — so only a _reachable_ server counts. This reverses part of ADR-0016 point 6, which
1123
+ refused auto-detection on the grounds that a run must not "silently relocate"; the answer to _silently_ is that
1053
1124
  the executor is now named at session start, in `/grants`, and per child in the ledger.
1054
1125
 
1055
1126
  **What to do about it:** nothing, unless you relied on an unset variable meaning subprocesses. If you did, set
@@ -1081,7 +1152,7 @@ returned.
1081
1152
 
1082
1153
  A pane used to be destroyed the instant its child settled, so a twenty-second child's pane was gone before
1083
1154
  anyone could switch to it. Panes now belong to the **agent run** and are swept at `agent_settled`, capped at 8
1084
- at once, with process `exit` as the backstop. `PI_GRANTS_HERDR_KEEP_PANE=1` still means *not even then*.
1155
+ at once, with process `exit` as the backstop. `PI_GRANTS_HERDR_KEEP_PANE=1` still means _not even then_.
1085
1156
 
1086
1157
  A child's pane also defaults to the **parent's own herdr workspace** now, so switching to one is a tab away
1087
1158
  rather than a workspace away.
@@ -1097,7 +1168,7 @@ shipping blockers, and they change what the herdr path guarantees:
1097
1168
  working with its grant after its result was reported.
1098
1169
  - **herdr binds an agent name to its tab.** With panes outliving their calls, the **second `delegate` of every
1099
1170
  turn** failed with `agent_name_taken`. Names are now unique per spawn.
1100
- - **The 8-pane cap killed live siblings**, because pi runs tool calls in parallel by default. Only *settled* panes
1171
+ - **The 8-pane cap killed live siblings**, because pi runs tool calls in parallel by default. Only _settled_ panes
1101
1172
  are reclaimable now; if they are all live the cap yields rather than enforcing.
1102
1173
  - **The pane reader amplified output 89,000×** once a pane scrolled or passed the output cap: `agent read` returns
1103
1174
  a snapshot of a bounded terminal and was being diffed as an append-only stream.
@@ -1118,7 +1189,7 @@ and coverage was added where it was simply absent — including that nothing ver
1118
1189
  ### Also
1119
1190
 
1120
1191
  - **`/grants ledger` tallies executors**, so "which children ran in panes?" no longer needs `jq`.
1121
- - **The tripwire names `delegate_all`.** It said only *"Use `delegate` instead"*, and a request for parallel
1192
+ - **The tripwire names `delegate_all`.** It said only _"Use `delegate` instead"_, and a request for parallel
1122
1193
  work was answered with a single sequential call as a result.
1123
1194
  - **The ledger records `executor` per child** — required, not optional. The executor is decided by a probe now,
1124
1195
  so nothing outside the record preserves which one ran, and the two paths do not produce the same argv.
@@ -1149,7 +1220,7 @@ pi
1149
1220
  **always wins**: it is how a child is governed and how CI is configured. `.pi/grants.env` is still written
1150
1221
  and still worth committing — it is the reviewable record, no longer what the enforcer reads. (ADR-0030)
1151
1222
  - **The dialog does not ask questions whose answers cannot matter.** `tool:bash` subsumes `write` and
1152
- `edit`, so once bash is granted those are conferred; asking anyway let an operator answer *no* to
1223
+ `edit`, so once bash is granted those are conferred; asking anyway let an operator answer _no_ to
1153
1224
  `tool:write` and then watch `build` be allowed it. It now reports them as already conferred instead.
1154
1225
  - **An unknown `/grants` subcommand is refused rather than ignored.** `/grants init` used to print the
1155
1226
  ordinary status screen with the word silently dropped, so a command that did not exist looked like it had
@@ -1173,7 +1244,7 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
1173
1244
  - **The generated grant is READ-ONLY by default** (ADR-0029). `init` grants what the copied skills declare
1174
1245
  minus anything that can change your machine — `bash`, `write`, `edit` and the universal capabilities are
1175
1246
  written **commented**, naming the definitions that need them. `init` + `source` gives a working read-only
1176
- setup; widening costs one deliberate uncomment. The reason: `PI_GRANTS_GRANT` is what *bounds* a declared
1247
+ setup; widening costs one deliberate uncomment. The reason: `PI_GRANTS_GRANT` is what _bounds_ a declared
1177
1248
  ceiling, so generating it from those ceilings would give the bound and the bounded one author, and it
1178
1249
  would not be you.
1179
1250
 
@@ -1184,14 +1255,14 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
1184
1255
  `PI_GRANTS_GRANT` string by hand — seven times for `principal-pi-skills`.
1185
1256
 
1186
1257
  **It chooses no ceiling, and that boundary is the whole design.** A skill that declares `allowed-tools` is
1187
- copied byte for byte; one that declares none is copied with a *commented* placeholder and stays
1258
+ copied byte for byte; one that declares none is copied with a _commented_ placeholder and stays
1188
1259
  unspawnable until a human fills it in. The placeholder is deliberately not a working example, so
1189
1260
  uncommenting it unedited fails loudly instead of granting something nobody decided. An existing file is
1190
1261
  **kept**, never overwritten — that edit is the capability decision, and a second `init` run is exactly
1191
1262
  when it would be destroyed. `--force` exists and says what it costs.
1192
1263
 
1193
1264
  - **Session start says how many definitions are spawnable, and names the withheld ones.** The line reported
1194
- the grant and never the definitions, so *"governance is working"* and *"did the install fail?"* looked
1265
+ the grant and never the definitions, so _"governance is working"_ and _"did the install fail?"_ looked
1195
1266
  identical:
1196
1267
 
1197
1268
  ```
@@ -1215,11 +1286,11 @@ resolution, enforcement, approvals or the ledger changed — this is the part be
1215
1286
  from a package are refused, and the assembled grant is charset-checked before the file is written at all.
1216
1287
 
1217
1288
  - **Fixed before release: `init` overwrote an operator's file and wrote through symlinks** (R-79). The
1218
- presence probe was `readFile`, which treats *unreadable* as *absent* — so a permissions-restricted
1289
+ presence probe was `readFile`, which treats _unreadable_ as _absent_ — so a permissions-restricted
1219
1290
  `SKILL.md` was replaced and its ceiling **widened**, with no `--force`. And `writeFile` follows symlinks, so
1220
1291
  a dangling link at a target path created the file outside the project while reporting an in-project path.
1221
1292
  Both are one `open(path, "wx")`. `--force` no longer regenerates `.pi/grants.env`, and `pi-daddy init
1222
- --Force` is no longer accepted as a silent no-op.
1293
+ --Force` is no longer accepted as a silent no-op.
1223
1294
 
1224
1295
  - **Fixed before release: the startup line blamed your files for a session-level refusal** (R-81). A session
1225
1296
  at its depth limit, or with a malformed `PI_GRANTS_MAX_DEPTH`, was told its `SKILL.md` files were written
@@ -1249,17 +1320,17 @@ as a user of this package:
1249
1320
  the path, not the lock this process created, so a broken stale lock cascaded: the old holder freed the new
1250
1321
  owner's lock on the way out, and the next arrival — which raced nothing — walked in beside it. Reproduced
1251
1322
  across real OS processes. Every lock now carries a token and proves ownership before deleting.
1252
- - **The ledger over-claimed human approval under concurrency.** One *Allow for this session* answered under
1323
+ - **The ledger over-claimed human approval under concurrency.** One _Allow for this session_ answered under
1253
1324
  a fan-out of eight wrote eight lines each recording `approvalSource: "prompt"`. Riders now record
1254
1325
  `session`, which is what actually happened.
1255
1326
 
1256
1327
  One breaking change, and it is a type.
1257
1328
 
1258
1329
  - **BREAKING: `revokeApproval` returns `"revoked" | "absent" | "failed" | "busy"`**, not a boolean. It had
1259
- two outcomes for four facts, and `/grants revoke` printed *"no persisted approval named X"* whenever the
1330
+ two outcomes for four facts, and `/grants revoke` printed _"no persisted approval named X"_ whenever the
1260
1331
  write failed — telling an operator that the approval they are revoking does not exist **while it is still
1261
1332
  in effect**. The most alarming outcome wore the most reassuring message. `busy` is separate because a lock
1262
- timeout happens *before* the load, so nothing was looked at and nothing may be claimed about the entry.
1333
+ timeout happens _before_ the load, so nothing was looked at and nothing may be claimed about the entry.
1263
1334
  Callers switching on the boolean must switch on the string; `"revoked"` is the only success.
1264
1335
  - **Approval writes hold a lock (R-49).** Every write is load → modify → write and none of them was
1265
1336
  serialised, so session 1 could load, session 2 could revoke, and session 1's next save would restore the
@@ -1269,10 +1340,10 @@ One breaking change, and it is a type.
1269
1340
  - **`/grants ledger` counts where each approval came from.** ADR-0020 keeps the persistence layer on an
1270
1341
  asserted fatigue argument and named the evidence that would settle it — `persisted` against `prompt` over
1271
1342
  real use. The data was already recorded and nothing read it. **Two numbers, both labelled**: raw records
1272
- are an *upper bound* on prompts avoided, because within one session only the first would have been a
1343
+ are an _upper bound_ on prompts avoided, because within one session only the first would have been a
1273
1344
  prompt and the rest come from the in-memory session cache; distinct `capability@subject` pairs are the
1274
1345
  closer estimate. Reporting records alone overstated the layer twentyfold in the obvious case (R-63).
1275
- Records written before per-capability sources existed are reported as *not counted* rather than folded in,
1346
+ Records written before per-capability sources existed are reported as _not counted_ rather than folded in,
1276
1347
  because that older scalar over-claimed `prompt`.
1277
1348
  - **A revoke is documented as taking effect at the next gate check**, not "immediately". A spawn whose gate
1278
1349
  check already passed is not retracted by a revoke arriving microseconds later — inherent to revoking
package/README.md CHANGED
@@ -1,18 +1,22 @@
1
1
  # pi-daddy
2
2
 
3
+ Stable release: **0.44.0** (tag `v0.44.0`), published to npm.
4
+
3
5
  Capability governance and coordination for [pi](https://github.com/badlogic/pi-mono)'s multi-level agent system. An
4
6
  orchestrator grants each sub-agent a deliberate subset of what it holds and withholds the rest; a sub-agent may delegate
5
7
  further, but only ever a subset of what it holds. Enforcement is pi's own `--tools` allowlist on a separate child
6
- process, with an append-only, hash-chained ledger of every grant and refusal.
8
+ process, with an optional append-only, hash-chained governance ledger.
7
9
 
8
10
  ```bash
9
11
  pi install npm:pi-daddy
10
12
  pi
11
13
  ```
12
14
 
13
- `/grants` shows the session's ceiling and spawnable definitions; `/grants init` writes `.pi/pi-daddy/settings.json`,
14
- the one reviewable file you commit. A definition is an [Agent Skills](https://agentskills.io/specification) `SKILL.md`
15
- whose `allowed-tools` is the ceiling and whose body is the child's system prompt.
15
+ `/grants` shows the session's ceiling and spawnable definitions. `/grants init` writes the review copy at
16
+ `.pi/pi-daddy/settings.json`, stores the enforced grant outside the workspace, enables the project ledger, and applies
17
+ the decisions to the running session; commit the review copy when the project's ignore rules permit it. A definition
18
+ is an [Agent Skills](https://agentskills.io/specification) `SKILL.md` whose `allowed-tools` is the ceiling and whose
19
+ body is the child's system prompt.
16
20
 
17
21
  ```
18
22
  delegate({ agent: "review-security", task: "Review the diff." })
@@ -26,7 +30,25 @@ effective = ( requested ∩ parentGrant ∩ ceiling ) \ (gated \ approved)
26
30
 
27
31
  Escalation is impossible by construction on the tool surface. It does not contain an agent holding an execution
28
32
  primitive: a child granted `bash` can start an ungoverned descendant, so `bash` is gated by default and every gate
29
- answer is recorded.
33
+ answer is recorded when a governance ledger is configured.
34
+
35
+ This candidate targets Pi 1.0.4 and captured Linux x64 execution. Qualification is limited to Ubuntu WSL2,
36
+ kernel `6.18.33.2-microsoft-standard-WSL2`, x86_64 and Node `v26.7.0`; other runtime/kernel combinations, native
37
+ Windows and WSL-to-Windows worker interop remain unqualified. Governed Herdr execution refuses until separately qualified. Select captured execution with `PI_DADDY_HERDR=0`. A final must match Pi's settled
38
+ JSON output and persisted current branch. Unknown subtree cleanup retains capacity and workspace exclusion.
39
+ `PI_DADDY_FANOUT` limits active descendants using conservative subtree reservations, with capacity returned only
40
+ after verified settlement. Complete results remain separate from optional recording failures.
41
+
42
+ The package dependency and peer requirement both pin exact Pi **1.0.4**; later Pi versions require new qualification. Use Principal **4.8.0** with this runtime's `delegate_describe` contract. Native phases use `plan`, `build`, `review`, `debug`, and `investigate` with their returned `definitionId`; independent parallel work uses one `delegate_all` batch.
43
+
44
+ Final capture preserves whitespace and concatenates text blocks without inserting separators. Tool-call terminals, empty visible finals and non-`stop` reasons are unavailable. Persisted message comparisons ignore object key order while preserving array order and every field value. The shared `final-conformance.json` table checks these semantics in both runtime and harness. Capture remains bounded: 4 MiB visible final, 32 MiB protocol line, 64 MiB persisted session, and a 3-second bounded session read. Exceeding a limit reports an unavailable final and blocks dependent handoffs; it does not imply the worker failed to settle.
45
+
46
+ Retained capacity is rechecked against the original bound ownership and settlement receipt before a new single, parallel or chain dispatch. Exact later proof refunds the reservation once; missing, malformed or mismatched proof and unbound ownership remain retained. Recovery does not rewrite the original failed/unknown outcome or mint new capacity on reload. A single delegation reserves its available subtree; use `delegate_all` to allocate independent parallel children.
47
+
48
+ The package requires Node.js 22.19.0 or newer. `pi-daddy report` joins episode usage and attribution;
49
+ `pi-daddy outcomes` adds Git, CI, amendment, and operator-correction signals for commits carrying a `Pi-Episode`
50
+ trailer. A connected dashboard can change model/thinking defaults for its owning session without changing persistent
51
+ settings or enforcement.
30
52
 
31
53
  The full product description is the repository [README](https://github.com/mojomanyana/pi-daddy#readme); the
32
54
  [CHANGELOG](./CHANGELOG.md) says what each release changed and what to do about breaking changes. The one shipped
@@ -0,0 +1,193 @@
1
+ musl as a whole is licensed under the following standard MIT license:
2
+
3
+ ----------------------------------------------------------------------
4
+ Copyright © 2005-2020 Rich Felker, et al.
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ ----------------------------------------------------------------------
25
+
26
+ Authors/contributors include:
27
+
28
+ A. Wilcox
29
+ Ada Worcester
30
+ Alex Dowad
31
+ Alex Suykov
32
+ Alexander Monakov
33
+ Andre McCurdy
34
+ Andrew Kelley
35
+ Anthony G. Basile
36
+ Aric Belsito
37
+ Arvid Picciani
38
+ Bartosz Brachaczek
39
+ Benjamin Peterson
40
+ Bobby Bingham
41
+ Boris Brezillon
42
+ Brent Cook
43
+ Chris Spiegel
44
+ Clément Vasseur
45
+ Daniel Micay
46
+ Daniel Sabogal
47
+ Daurnimator
48
+ David Carlier
49
+ David Edelsohn
50
+ Denys Vlasenko
51
+ Dmitry Ivanov
52
+ Dmitry V. Levin
53
+ Drew DeVault
54
+ Emil Renner Berthing
55
+ Fangrui Song
56
+ Felix Fietkau
57
+ Felix Janda
58
+ Gianluca Anzolin
59
+ Hauke Mehrtens
60
+ He X
61
+ Hiltjo Posthuma
62
+ Isaac Dunham
63
+ Jaydeep Patil
64
+ Jens Gustedt
65
+ Jeremy Huntwork
66
+ Jo-Philipp Wich
67
+ Joakim Sindholt
68
+ John Spencer
69
+ Julien Ramseier
70
+ Justin Cormack
71
+ Kaarle Ritvanen
72
+ Khem Raj
73
+ Kylie McClain
74
+ Leah Neukirchen
75
+ Luca Barbato
76
+ Luka Perkov
77
+ M Farkas-Dyck (Strake)
78
+ Mahesh Bodapati
79
+ Markus Wichmann
80
+ Masanori Ogino
81
+ Michael Clark
82
+ Michael Forney
83
+ Mikhail Kremnyov
84
+ Natanael Copa
85
+ Nicholas J. Kain
86
+ orc
87
+ Pascal Cuoq
88
+ Patrick Oppenlander
89
+ Petr Hosek
90
+ Petr Skocik
91
+ Pierre Carrier
92
+ Reini Urban
93
+ Rich Felker
94
+ Richard Pennington
95
+ Ryan Fairfax
96
+ Samuel Holland
97
+ Segev Finer
98
+ Shiz
99
+ sin
100
+ Solar Designer
101
+ Stefan Kristiansson
102
+ Stefan O'Rear
103
+ Szabolcs Nagy
104
+ Timo Teräs
105
+ Trutz Behn
106
+ Valentin Ochs
107
+ Will Dietz
108
+ William Haddon
109
+ William Pitcock
110
+
111
+ Portions of this software are derived from third-party works licensed
112
+ under terms compatible with the above MIT license:
113
+
114
+ The TRE regular expression implementation (src/regex/reg* and
115
+ src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
116
+ under a 2-clause BSD license (license text in the source files). The
117
+ included version has been heavily modified by Rich Felker in 2012, in
118
+ the interests of size, simplicity, and namespace cleanliness.
119
+
120
+ Much of the math library code (src/math/* and src/complex/*) is
121
+ Copyright © 1993,2004 Sun Microsystems or
122
+ Copyright © 2003-2011 David Schultz or
123
+ Copyright © 2003-2009 Steven G. Kargl or
124
+ Copyright © 2003-2009 Bruce D. Evans or
125
+ Copyright © 2008 Stephen L. Moshier or
126
+ Copyright © 2017-2018 Arm Limited
127
+ and labelled as such in comments in the individual source files. All
128
+ have been licensed under extremely permissive terms.
129
+
130
+ The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
131
+ The Android Open Source Project and is licensed under a two-clause BSD
132
+ license. It was taken from Bionic libc, used on Android.
133
+
134
+ The AArch64 memcpy and memset code (src/string/aarch64/*) are
135
+ Copyright © 1999-2019, Arm Limited.
136
+
137
+ The implementation of DES for crypt (src/crypt/crypt_des.c) is
138
+ Copyright © 1994 David Burren. It is licensed under a BSD license.
139
+
140
+ The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
141
+ originally written by Solar Designer and placed into the public
142
+ domain. The code also comes with a fallback permissive license for use
143
+ in jurisdictions that may not recognize the public domain.
144
+
145
+ The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
146
+ Valentin Ochs and is licensed under an MIT-style license.
147
+
148
+ The x86_64 port was written by Nicholas J. Kain and is licensed under
149
+ the standard MIT terms.
150
+
151
+ The mips and microblaze ports were originally written by Richard
152
+ Pennington for use in the ellcc project. The original code was adapted
153
+ by Rich Felker for build system and code conventions during upstream
154
+ integration. It is licensed under the standard MIT terms.
155
+
156
+ The mips64 port was contributed by Imagination Technologies and is
157
+ licensed under the standard MIT terms.
158
+
159
+ The powerpc port was also originally written by Richard Pennington,
160
+ and later supplemented and integrated by John Spencer. It is licensed
161
+ under the standard MIT terms.
162
+
163
+ All other files which have no copyright comments are original works
164
+ produced specifically for use as part of this library, written either
165
+ by Rich Felker, the main author of the library, or by one or more
166
+ contibutors listed above. Details on authorship of individual files
167
+ can be found in the git version control history of the project. The
168
+ omission of copyright and license comments in each file is in the
169
+ interest of source tree size.
170
+
171
+ In addition, permission is hereby granted for all public header files
172
+ (include/* and arch/*/bits/*) and crt files intended to be linked into
173
+ applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
174
+ the copyright notice and permission notice otherwise required by the
175
+ license, and to use these files without any requirement of
176
+ attribution. These files include substantial contributions from:
177
+
178
+ Bobby Bingham
179
+ John Spencer
180
+ Nicholas J. Kain
181
+ Rich Felker
182
+ Richard Pennington
183
+ Stefan Kristiansson
184
+ Szabolcs Nagy
185
+
186
+ all of whom have explicitly granted such permission.
187
+
188
+ This file previously contained text expressing a belief that most of
189
+ the files covered by the above exception were sufficiently trivial not
190
+ to be subject to copyright, resulting in confusion over whether it
191
+ negated the permissions granted in the license. In the spirit of
192
+ permissive licensing, and of not having licensing issues being an
193
+ obstacle to adoption, that text has been removed.
@@ -0,0 +1,21 @@
1
+ The MIT License (Expat)
2
+
3
+ Copyright (c) Zig contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -5,3 +5,12 @@
5
5
  `src/executors/vendor/herdr-pi-lifecycle.ts` is the unmodified official Herdr Pi lifecycle integration, copied from Herdr `v0.8.2`, blob `67bc41889abc2791d6dcdfe8279bdc24186cc6fe` (SHA-256 `9b1c41cd72520fc2abe5f2a2aec995c12a926cce844df472c7fd5fcae4f4dbfa`).
6
6
 
7
7
  It is licensed under Apache License 2.0. A copy of that license is distributed at `THIRD_PARTY_LICENSES/herdr-Apache-2.0.txt`.
8
+
9
+ ## Captured Linux x64 worker
10
+
11
+ `native/linux-x64/worker` statically links the musl libc shipped in the official Zig 0.14.1
12
+ Linux x86-64 compiler distribution. Its complete copyright/license notice is reproduced in
13
+ `THIRD_PARTY_LICENSES/musl-COPYRIGHT.txt`; Zig's runtime notice is in `THIRD_PARTY_LICENSES/zig-MIT.txt`.
14
+ These are copied directly from the SHA-256-pinned compiler archive by `scripts/build-worker.ts`.
15
+ The worker does not link glibc. `native/provenance.json` records source, compiler archive, artifact
16
+ and license hashes. See `native/README.md` to reproduce and verify the committed binary.