deadbyte-mcp 0.15.22 → 0.15.23

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 (32) hide show
  1. package/MANIFEST.SHA256 +31 -15
  2. package/PROVENANCE.json +10 -10
  3. package/README.txt +18 -7
  4. package/RELEASE.json +15 -9
  5. package/SBOM.cdx.json +3 -3
  6. package/TEST-MATRIX.json +14 -4
  7. package/package.json +3 -2
  8. package/scripts/activate-skill-creator-1.1.1.mjs +46 -0
  9. package/scripts/build-advanced-pcb-skill.mjs +208 -0
  10. package/scripts/diagnose-skill-tree.mjs +8 -0
  11. package/scripts/npm-release-r48.mjs +252 -0
  12. package/scripts/pcb-skill-src-SKILL.md.txt +67 -0
  13. package/scripts/pcb-skill-src-bringup-evidence.md.txt +22 -0
  14. package/scripts/pcb-skill-src-constraint-model.md.txt +17 -0
  15. package/scripts/pcb-skill-src-emc-mechanical-dfm.md.txt +17 -0
  16. package/scripts/pcb-skill-src-high-speed-layout.md.txt +27 -0
  17. package/scripts/pcb-skill-src-kicad-native.md.txt +30 -0
  18. package/scripts/pcb-skill-src-kicad_pcb_probe.py.txt +159 -0
  19. package/scripts/pcb-skill-src-pcb_constraint_gate.py.txt +76 -0
  20. package/scripts/pcb-skill-src-power-integrity.md.txt +15 -0
  21. package/scripts/prepare-skill-creator-1.1.1.mjs +113 -0
  22. package/scripts/test-skill-creator-semver-matrix.mjs +30 -0
  23. package/scripts/test-skill-creator-semver.mjs +22 -0
  24. package/src/deadbyte-cli.mjs +70 -15
  25. package/src/remote-live-log.mjs +189 -35
  26. package/src/tool-audit.mjs +1 -1
  27. package/src/version.mjs +1 -1
  28. package/test/full-max-catalog-r48.test.mjs +1 -1
  29. package/test/r48-release-contract.test.mjs +20 -14
  30. package/test/remote-live-log-r37.test.mjs +106 -7
  31. package/test/remote-session-cli.test.mjs +40 -0
  32. package/test/tool-audit.test.mjs +17 -0
package/MANIFEST.SHA256 CHANGED
@@ -1336,7 +1336,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
1336
1336
  f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
1337
1337
  51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
1338
1338
  3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
1339
- 3d59a1f0e8e53505617243d45dec97154b11456f824f35ba841cdae1ba3f98cf package.json
1339
+ bb11323f54c778749710551a125f70462889234e6c70d6a754e98d5e0f0d14e4 package.json
1340
1340
  872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
1341
1341
  2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
1342
1342
  2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
@@ -1400,7 +1400,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
1400
1400
  bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
1401
1401
  2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
1402
1402
  f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
1403
- 4c3a55be602fc629c7f4f3e46c010da1c4a8e06097e0ae63568691fcd79dc700 PROVENANCE.json
1403
+ 67db4e9b1190ef49d90b785cd48fbcafed80580c67272ecf7026e825bd9982fe PROVENANCE.json
1404
1404
  27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
1405
1405
  0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
1406
1406
  bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
@@ -1408,14 +1408,16 @@ bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.jso
1408
1408
  f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.json
1409
1409
  731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
1410
1410
  d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
1411
- 50402a094a0fdccf45ffb7d3613fbb712a9039311868718d1dc804ad7cb7a289 README.txt
1412
- a4e135f2260b4762429a5ffa4b995e29b0c4941bd1c62400341d53841d2b8fb5 RELEASE.json
1413
- 8924ee06d44721cc6fcc214e3e439a08eb2e0bde934c0a8086bb49400519f2f4 SBOM.cdx.json
1411
+ fa1506b4d59a29d865229be242e7e94c2b71eaca617f3741647c2ba0361e6b71 README.txt
1412
+ 8dda5c857bdf0c91e30446401d7679e0d4aa63f9e9d19a8e78fb0c0e7ba9fe22 RELEASE.json
1413
+ d3f8aee77f036e59951d56ab95fda98a050017fba7be8cf178761eb3236383a4 SBOM.cdx.json
1414
+ 7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
1414
1415
  bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
1415
1416
  8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
1416
1417
  1d4e9dee6f0669bd825334a6a72e13ee85ee29ab430dcef21d893ffd744774b5 scripts/autonomous-benchmark.mjs
1417
1418
  34f9318b6f4afb29948fdc5ab973edca4dfc4fbd63c9a5105478b5e95812dabf scripts/autonomous-build.ps1
1418
1419
  075acd7616740135973497d676dcd0431f0437bdba87e4eedba4751cb148ff02 scripts/autonomous-tests.ps1
1420
+ 7c3f2a157f64aef9e605b5fe84d75fbdd88312f09d0ad89effb33de82aa39ab8 scripts/build-advanced-pcb-skill.mjs
1419
1421
  70bccc3572de7e26ac91154b9d87185feab0c2dbfc4cbd40f89660e5769f53b0 scripts/build-combined-skill.mjs
1420
1422
  92f23292ce358af88e6c42e126791c57b25d2b0689c538940d8c0745b7447d4e scripts/build-containment.ps1
1421
1423
  f29c45250e58c5bfbf60089c17317845b6d8e3ef4a4874a37b7ed28538072ca7 scripts/build-desktop-r40.ps1
@@ -1448,6 +1450,7 @@ d4710039ceff7380f3b6a0040ad118a81eabdda2706c459f9b81f8e08978fba4 scripts/deferr
1448
1450
  2cc7a37231f8836a48c3bf4024887f38c10bfc89296ac483e4b98b3f18281933 scripts/derive-r45-parent.mjs
1449
1451
  67221c5619019a9d19611432d4361c99c365f14e89483e4c8f78451839960176 scripts/derive-r45-release.mjs
1450
1452
  87c6acc0df96a6e8bb6692bc7b12e8b386196a80cba554d9b214ff8bb12147fe scripts/derive-r45-tests.mjs
1453
+ 1c6b06cc64d04af7337f769e6a021570799312f68158321e82cbcb07663cf494 scripts/diagnose-skill-tree.mjs
1451
1454
  899de2ec448597d2a7432f4c25a2c2b7002e19a9297af42acc8a90cb6d37a72b scripts/disarm-host-for-update-r47.mjs
1452
1455
  a66155921f249a960d83ba1c79b2ab255b6e8b148197498a1d184644818a0e77 scripts/extract-r46-failures.mjs
1453
1456
  69e3beb55573b5fc3ba30a220fabf9e3585e7757430fb3264caf27e41254b789 scripts/final-closure-r36.mjs
@@ -1506,6 +1509,17 @@ de6142bd5693cf4edb8725c9c43fc77e9bdc12f5b398a757006d778d3ee3f8ed scripts/inspec
1506
1509
  7ea8cf6bf094a1612603bc716228a3753e5f06fca8a0684d2da15a04d0710c64 scripts/list-source-zips.mjs
1507
1510
  9d12d15f7c83ddf272834072ed37d618a232bd8a3fd36c339761fe08bb9380d8 scripts/npm-publish-r47.ps1
1508
1511
  4f1a6e0f8d23bd24b066b3a2df0cae1d47822c16c754122fde78dc509d0752f8 scripts/npm-release-r47.mjs
1512
+ 53f6a7ff102ea1252cd1f855bfe4649f1b55f693b69ebe7429b1c466ceca4927 scripts/npm-release-r48.mjs
1513
+ 31bc0af20f7eecddda5f845da023f1d1750c70627ce872a885a3b06596c0c07f scripts/pcb-skill-src-bringup-evidence.md.txt
1514
+ 75d59f8e8d25fefb1f3afa7bd37f17287f277a7bcd09a04813daa9dea9d629fd scripts/pcb-skill-src-constraint-model.md.txt
1515
+ eb350a6f70b822afaeedbf944ce017b4cc351edac599173b352d8b685207686e scripts/pcb-skill-src-emc-mechanical-dfm.md.txt
1516
+ 5498f77b84534234f0423bf6d1fe55d937adafce733a149b943db2b0407f5f9c scripts/pcb-skill-src-high-speed-layout.md.txt
1517
+ 271317b8ff2b0a44c0d21805d2967156269a1b46d3c5a9cd9122e58f7b710776 scripts/pcb-skill-src-kicad_pcb_probe.py.txt
1518
+ 5bea60ea45e101669f1f6b14eac8a7319dee93fe24f3fc541fa1cadae611f69f scripts/pcb-skill-src-kicad-native.md.txt
1519
+ 6fee41a163848455a9c25836c51da078afcb09baca2d632b6f8ab9a847d71b1a scripts/pcb-skill-src-pcb_constraint_gate.py.txt
1520
+ 3c6fbfcca22cd92c269bb28888f89ceaee269795555d8dc57a1f9ea51684cc4e scripts/pcb-skill-src-power-integrity.md.txt
1521
+ 395fff4e0e6fb8fedf89e400be8e3f42e631e04568c06445651beb8f9866f608 scripts/pcb-skill-src-SKILL.md.txt
1522
+ 822045f2dac3d8cd675ccfc95b48fadaa4dc73e5ffdf94360bcd6e99104634d0 scripts/prepare-skill-creator-1.1.1.mjs
1509
1523
  453dd636b452f4343a36f31a93a763e97f58ed5d6c9df3d2ba05b236934a3a1f scripts/probe-source-zips.mjs
1510
1524
  8f9d97a4d23e9d05e7cadfb6a519b1ddb9da04894bca98bdc293fc3797e8423c scripts/probe-zips.mjs
1511
1525
  15682482e4ad44f0d297174f5ccebb1c4e6eff21555941425f5be4e39e464fb0 scripts/promote-local-c-generation.ps1
@@ -1549,6 +1563,8 @@ b0cc75c38e0163dbcf7fb1b0d21f2dc34c71f2d0e2a156a53e570ff84afc64e6 scripts/semant
1549
1563
  bf54d2dfa2a77c2c13cc0b8a9ac2eb926132ecd331ad56ebbf88cc5cc4280a96 scripts/sign-adaptive-skill.mjs
1550
1564
  3df15bb574df6f10ec159f6c3cfdb6c3d692e02abcaecf92e637d79eebd90b25 scripts/test-r48-post-bump.ps1
1551
1565
  f5fb0103cf7a77478976ba97166e49c443ec29533fa4b75edea13450e290ed6d scripts/test-r48-windows-observation.ps1
1566
+ f104a679ded20e1ee008182984fdab152120c051ee4a8962e08a591de7b35402 scripts/test-skill-creator-semver-matrix.mjs
1567
+ 36cb4d39553a8c516ff2ca0893c0b61f96fe2222a05c5a21edc4809424ac673c scripts/test-skill-creator-semver.mjs
1552
1568
  0a115aa9829576c86cc247f754cae69ae09ba146b637d3a1c9fbc16420d20a5d scripts/tool-surface-snapshot.mjs
1553
1569
  f8d9c6718cbe20e02e517297e8f35f51c7dcd51b62b8b4a483630a9cd3b1f788 scripts/verify-memory-r41.mjs
1554
1570
  e552634ca1f8673f5daaaf5e45302d2a7fc4b1a1eac256f60bed2c9136bafa05 scripts/verify-package.ps1
@@ -1637,7 +1653,7 @@ dcd4c9784e88e253e91ddad3c24b38cb0b36906ed737f6d7bee7712360f66f7a src/containmen
1637
1653
  fe1761b98738e1aea1d25ddf3a0ba56ccad95a43d45104a89b8665197c7c9e18 src/containment-result.mjs
1638
1654
  705a89cb12fedb993d55dfed32a5870d33e10db26422c944d1e52223566c096c src/containment-smoke.mjs
1639
1655
  63a1d4d6a53f9eb7e02197b4e42158b867da8c042c2e61848d8a36cd398b8bd8 src/context-provenance.mjs
1640
- a8ba320b3e000828ca7bc75acf6d53bbb1c9cbefe48247cc1289e7e802afe908 src/deadbyte-cli.mjs
1656
+ e5a951612b9514baf8bea4b6500e1f1d6c7c072352a1b46a34209a6729222647 src/deadbyte-cli.mjs
1641
1657
  9e9766d64dcc9e2c8d23c2c0a5e9dcb87b7213e8de668f79f593ad48daf15acd src/deadline-cancellation.mjs
1642
1658
  fe7a8f8611c33552b3da466a9b866ce79a737bfd5b9a78a953269b30cce16274 src/desktop-contract.mjs
1643
1659
  f97352e510c659910c2d4a874d15be028e1291d685c6c1a7be53bdf1a335c2d8 src/desktop-input-r40.mjs
@@ -1712,7 +1728,7 @@ a1a0ac13b2d23fa7e0cbe1c093052b68ff3498982d9abeb27dba4dec404a8908 src/release-ge
1712
1728
  0f0d0ff4f1b517a5cfbc13dd96e09a3672ff223b9fbb75d082bee101cc8eed80 src/release-slot.mjs
1713
1729
  3f41fa32ddeed403b5431a338821b62e0c1946a9d808f06d0edb2d9341ca0121 src/remote-console.mjs
1714
1730
  ce6ec7ec794d1603f95311eac4712a0f8b26e7e96bc3617f88fba4297cc8b376 src/remote-device-r44.mjs
1715
- 123a157a5149992a3eee85ffa2ea4ef420efc67e9f6bb394b87fbe164dd56db2 src/remote-live-log.mjs
1731
+ 84f571351fa0f3b84ec084409e01509beb6a929bcbe174916bcff4322eb61c0e src/remote-live-log.mjs
1716
1732
  6131fda046bf7a751ffc99d922e8f14bdbc3accff9ee81b4f5ebef5b7b2f9b98 src/remote-mcp-autonomous-smoke-client.mjs
1717
1733
  ebff2982142263632a40b9f144e802b9cb0c86c798bb6c591de7f175ba50b660 src/remote-mcp-coding-smoke-client.mjs
1718
1734
  03c5dfe0b1cb55d84a0217cd59aca799e17c69b248549af2b3f2dc80d52bf315 src/remote-mcp-desktop-r40-smoke-client.mjs
@@ -1741,7 +1757,7 @@ a14cb827602d74f7c9822098815add8bf1ab6b27598d22b44880c8c98e754c1b src/semantic-l
1741
1757
  3640e91254d3ed000ba32c41d3582de8af492915c6ee23f284e36f3873519616 src/skill-plane-r44.mjs
1742
1758
  3dc2102335cd1e86ee52a11950f80ff6e1771f4291325d4f95a8ea2b849617cc src/stdio-console-guard.mjs
1743
1759
  6dccdb538be9783276399a5ad2cce54b1f0d8cc305fd58bee9f0f46d6a412af6 src/text-policy.mjs
1744
- 257db0d0e38367e5c7a7a7f5e45b7f0e4b28b2abde2d4c47ae84ddffeb9dee24 src/tool-audit.mjs
1760
+ fbc50dcd21c87814191ddc235da7d425ffbb1bcfe4446dda1a7fae1d5ae9ce14 src/tool-audit.mjs
1745
1761
  ac7394cf2c353dfab645937ab7bfb6eed7e42f345c1d46185f37f9d65772104c src/tool-surface-ledger.mjs
1746
1762
  bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init.mjs
1747
1763
  1325b75abd94c44ea53278e2763448d3065d7cce979581f223dd186e05e3234e src/trust.mjs
@@ -1749,11 +1765,11 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
1749
1765
  aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
1750
1766
  642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
1751
1767
  8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
1752
- cf96fe6342757666f05f3c0a58eb28765a32f428051ed58494923ef6d3c5edf8 src/version.mjs
1768
+ 4be74d98025e9c75d47c56e63959a58648caec445ed2180bbc4d93921b3e0efb src/version.mjs
1753
1769
  7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
1754
1770
  76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
1755
1771
  4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
1756
- 3b4808a7684f858fc910a4e1bd9340bbb705ff792d1e0496c60fccedfb9faf6f TEST-MATRIX.json
1772
+ 9d07810c705bd06b0fcb45dc8d3c5228432aed891708a5aa6aa8525e4abb2a34 TEST-MATRIX.json
1757
1773
  e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
1758
1774
  2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
1759
1775
  d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
@@ -1921,7 +1937,7 @@ f95c920ee2b24d5ec940a9bae277771562ce275556bd89f0071f183b13c154b8 test/fixtures/
1921
1937
  161cbd9839cad5623348c989bb2b8564df233e01c903de246112d8e6dc0ae9f4 test/full-max-catalog-r45.test.mjs
1922
1938
  2d4224bce83aad63d70f87d55cf13e06074b2867d627cdeb48c0a73ec53d3489 test/full-max-catalog-r46.test.mjs
1923
1939
  1a5941d5105e970174dc5400fb6341c18211ffad01352e6c7994eb1dd905432d test/full-max-catalog-r47.test.mjs
1924
- b103cd1aef57b847f1e11e1c7df68b2a55d2fde7cdd7f51ab0f2cf90134c2dfe test/full-max-catalog-r48.test.mjs
1940
+ 97e86d898361c7b11a7c11a92549617e28e51a2bd6ce115dbbe59d096ab0e8bf test/full-max-catalog-r48.test.mjs
1925
1941
  3cecf2bb61027d210f6bdf65a140ce1d5bedf2d4135e02f94edfeb2ef89ae6ae test/fuzzy-search-r46.test.mjs
1926
1942
  506e5437ed41da3955d006294d81230c25825ff898b266fa2758ffd885ee3d07 test/hardware-observation-r45.test.mjs
1927
1943
  2efdac248a608fe84588de8e9223f39ee32d4a483f71594ab05f20f1110be0c9 test/helpers/autonomous-r34-fixture.mjs
@@ -1991,7 +2007,7 @@ d8f544bbcdfff61f7abb7705ad7e5e1f17998f5fde3c114fb33915fc66d1408f test/r41-final
1991
2007
  2c5f2093b945c267c8d09cd2da0875c7f45911a7c01aa02a50cd64c2c1a7ccdc test/r45-autonomous-quick-test.test.mjs
1992
2008
  532075c86893caf68a2d0ea09171bee4c7d60892c1892011285376a2c186ed92 test/r45-finalization.test.mjs
1993
2009
  25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
1994
- 99389a30594efd52699f9f7cf67fd592255c7d8a954e644f5b65ee40eb703f49 test/r48-release-contract.test.mjs
2010
+ 4fed46e370f50ec096d1d63b86158fc3c17b9300ac2000d89052951ee9426fae test/r48-release-contract.test.mjs
1995
2011
  e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
1996
2012
  85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
1997
2013
  bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
@@ -2001,11 +2017,11 @@ aa93286ac9887413d890e14e5f448cca327bd1361017cda24e1bdd9f383edacb test/release-v
2001
2017
  c270a4e2d1384071e7c406f4ec8c8c1da56228844bf64362cffa03558be3cc49 test/remote-console-r40.test.mjs
2002
2018
  ba122b4a7a6953b9fc8187a531a3e8b0f5f8519da602c551b32df8c88c85e879 test/remote-device-r44.test.mjs
2003
2019
  3d26a0550a22c69990567d998c28e4ba0978c71429741c10c7c47f261653fbe2 test/remote-live-log-r36.test.mjs
2004
- c8fa27647e9ca5b6265a6abfc5ef9ccd9dbce2c9099014689ddf268119b743c7 test/remote-live-log-r37.test.mjs
2020
+ daf7d33e31d9fbd78e8b6c5165c7f0b7df0cb0fcf6b8c02677c53395b39f2c71 test/remote-live-log-r37.test.mjs
2005
2021
  02ad827dc46e3dacf1ef2cfd861f583a44c471b1411cc674f4d61cd421418ad3 test/remote-live-log-recovery-r36.test.mjs
2006
2022
  e7417da0df95b624d7a65fc21d6cde943cbe657644e1b9da8b32136c55a5228f test/remote-r24-catalog.test.mjs
2007
2023
  08e0a98e665783a1a4489534e3021d398d81df00c6974e6b957723445e92bad4 test/remote-result-journal.test.mjs
2008
- 0271d803a841b8b100e7253dcf08dd74ef920137422e53268c033d3af98625cb test/remote-session-cli.test.mjs
2024
+ 23963b84df0644c04c0a6a07b1c357465adfe9dbc7d3a7918215a3d8ca96e4e4 test/remote-session-cli.test.mjs
2009
2025
  ef8aa55479acc923d3fee89a463096d003826cfffc356fffa4ab0ef371345070 test/runtime-host-bootstrap-r45.test.mjs
2010
2026
  6cd3ea90399a4b7c4055d3ad5a159f14cb28454922966c80e1aeb783e519d81a test/runtime-self-update.test.mjs
2011
2027
  b131611ec56e83d5db05d40b9be9b029396a177bca1ddacac9bf13086d370897 test/semantic-backend-registry.test.mjs
@@ -2023,7 +2039,7 @@ abfbc97af4a3337694f2362c00da24fd2a06b526ba324e04d0d0816197c75595 test/semantic-
2023
2039
  ce8c503863544f36d101c079187d5f02ff5868c526c36f05cf5bea4a7ba2c015 test/skill-plane-r44.test.mjs
2024
2040
  a98537d1136988251572f424b29ff8f798356dcfd9a7a1d4238a9c7e943e6a52 test/standing-grants.test.mjs
2025
2041
  2c8ad3d273965fa6f7ba2f3aa1ee50791a28f4dcf6dfc8cd8d73510f2577f9f9 test/task-contract-r42.test.mjs
2026
- 6ecc712b7bcb2abdb934e7d40232ed97ac355f3f47665f557c2168b04d113b41 test/tool-audit.test.mjs
2042
+ 4803d1be25f608a55e8fa89857e359277c408dd644d463338b0ceeb6e518100e test/tool-audit.test.mjs
2027
2043
  1ffc13c7ae2010d5c29b02fcb6b2226f52152ce3dd8064fce6d321701f919952 test/tool-surface-ledger.test.mjs
2028
2044
  be2f1dcbcba6cadc6bcfcb9e2ad94c078a1ac285e93295991fbfbdcf98eee65e test/tool-surface-snapshot.test.mjs
2029
2045
  197bd6664f4a8e8d3769c058d693b363ed5a9ad2e69aec8ee37ffb289c6d03c4 test/tracer-bullet.test.mjs
package/PROVENANCE.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "schema": "deadbyte.provenance.v1",
3
- "version": "0.15.22",
4
- "builder": "deadbyte-r48-native-windows-observation-machine-fs-resilience",
5
- "source_model": "development-root -> native Win32 observation + per-entry filesystem fault isolation -> bounded R48 regression -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
3
+ "version": "0.15.23",
4
+ "builder": "deadbyte-r48-human-livelog-trace-visual-opcode",
5
+ "source_model": "development-root -> visual-opcode human livelog + absolute policy-root paths + trace/span hierarchy + presentation filters + TTY in-place result rewrite + expanded session statistics -> bounded R48 regression -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
6
6
  "signing": "ed25519",
7
- "parent_release_id": "v0.15.21-7c2735e0b1c6cc8d",
8
- "parent_manifest_sha256": "7c2735e0b1c6cc8dac6581c47b6b557d8d0157a324b67efd4df058e67cdb289f",
9
- "parent_generation_manifest_sha256": "b376e7fc450f44edddb0d0e1d596014c463f603e4917c56a68906b7f66f99dc7",
10
- "source_predecessor_version": "0.15.21",
11
- "source_predecessor_tarball_sha256": "3439f5f4435632e4cde385a6937e3e3d2ffcfb777295dd56aafbf3b036be7493",
12
- "source_predecessor_manifest_file_sha256": "7c2735e0b1c6cc8dac6581c47b6b557d8d0157a324b67efd4df058e67cdb289f",
7
+ "parent_release_id": "v0.15.22-ed178d33bf883f68",
8
+ "parent_manifest_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
9
+ "parent_generation_manifest_sha256": "029b177dc1838388ddec154be38cb597a4dcfa0711b2297196d5a9e7cb8dbe18",
10
+ "source_predecessor_version": "0.15.22",
11
+ "source_predecessor_tarball_sha256": "fda51e06fa16116179d9c48f1466432886c10e62807482326d2dc5ccb7b66eac",
12
+ "source_predecessor_manifest_file_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
13
13
  "commander_reference_version": "0.2.51",
14
14
  "commander_reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
15
15
  "commander_reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140",
16
- "reproducibility": "manifest-bound package bytes; exact 0.15.21 predecessor digest; native Win32 observer built /W4 /WX and exercised across seven typed Windows queries; machine-fs per-entry EINVAL isolation covered by deterministic RED/GREEN test; signed machine truth after activation"
16
+ "reproducibility": "manifest-bound package bytes; exact 0.15.22 registry predecessor SHA-256; deterministic visual-opcode/trace/filter renderer tests; remote-session journal preservation under presentation filtering; TTY rewrite contract; bounded R48 regression; signed machine truth after activation"
17
17
  }
package/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- DEADBYTE MCP V0.15.22 / R48 NATIVE WINDOWS OBSERVATION + MACHINE FS RESILIENCE
1
+ DEADBYTE MCP V0.15.23 / R48 HUMAN LIVELOG TRACE + VISUAL OPCODE BASELINE
2
2
  =========================
3
3
 
4
4
  AUTHENTICATED MACHINE TRUTH + DURABLE AGENT + CODING + AUTONOMOUS PRODUCTION ENGINE
@@ -7,12 +7,12 @@ NPX PRIMARY OPERATOR UX
7
7
  ------------------------
8
8
  Use the npm CLI entry point instead of the legacy CMD convenience wrapper:
9
9
 
10
- npx -y deadbyte-mcp@0.15.22 mcp
11
- npx -y deadbyte-mcp@0.15.22 remote
12
- npx -y deadbyte-mcp@0.15.22 remote status
13
- npx -y deadbyte-mcp@0.15.22 remote restart
14
- npx -y deadbyte-mcp@0.15.22 audit status
15
- npx -y deadbyte-mcp@0.15.22 audit verify
10
+ npx -y deadbyte-mcp@0.15.23 mcp
11
+ npx -y deadbyte-mcp@0.15.23 remote
12
+ npx -y deadbyte-mcp@0.15.23 remote status
13
+ npx -y deadbyte-mcp@0.15.23 remote restart
14
+ npx -y deadbyte-mcp@0.15.23 audit status
15
+ npx -y deadbyte-mcp@0.15.23 audit verify
16
16
 
17
17
  The `mcp` command is the quiet stdio server entry for local MCP clients; stdout is reserved for MCP.
18
18
  The remote CLI invokes the stable active-release PowerShell launcher directly with shell=false.
@@ -29,6 +29,17 @@ and a random 256-bit session nonce, prevents concurrent foreground sessions, and
29
29
  recover only a dead, unguarded stale owner. Explicit subcommands such as `remote status` remain
30
30
  one-shot controller operations.
31
31
 
32
+ R48 HUMAN LIVELOG TRACE + VISUAL OPCODES
33
+ ----------------------------------------
34
+ The foreground remote console treats emoji as visual opcodes rather than decoration. File reads, writes,
35
+ edits, searches, commands, verification, desktop, autonomous, policy-denial, and unknown-side-effect states
36
+ use stable semantic glyphs with deterministic ASCII fallback. Policy root ids resolve to absolute host paths
37
+ in the human projection while the root id remains visible. `remote --trace` adds trace/span/parent identity
38
+ without exposing payload bytes. `remote --filter` filters presentation only; the durable result journal and
39
+ audit stream retain every event. Interactive TTY output rewrites a matching RUNNING line in place only when
40
+ the terminal result belongs to the same request; unrelated output forces a newline first. Session summaries
41
+ report outcome classes, mutation count, p50/p95 latency, slowest tool, heartbeat folding, and top tools.
42
+
32
43
  The legacy CMD file remains only as an R33 compatibility artifact until activation/rollback/restore
33
44
  proof confirms the npx path; it is not the primary operator interface. Audit data lives under the
34
45
  stable mutable state root and never inside immutable release slots.
package/RELEASE.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "schema": "deadbyte.release.v1",
3
3
  "name": "deadbyte-mcp",
4
- "version": "0.15.22",
4
+ "version": "0.15.23",
5
5
  "train": "R48",
6
- "label": "NATIVE WINDOWS OBSERVATION + MACHINE FS RESILIENCE",
6
+ "label": "HUMAN LIVELOG TRACE + VISUAL OPCODE BASELINE",
7
7
  "protocol_revision": "2026-07-28",
8
8
  "parent": {
9
- "release_id": "v0.15.21-7c2735e0b1c6cc8d",
10
- "manifest_sha256": "7c2735e0b1c6cc8dac6581c47b6b557d8d0157a324b67efd4df058e67cdb289f",
11
- "generation_manifest_sha256": "b376e7fc450f44edddb0d0e1d596014c463f603e4917c56a68906b7f66f99dc7"
9
+ "release_id": "v0.15.22-ed178d33bf883f68",
10
+ "manifest_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
11
+ "generation_manifest_sha256": "029b177dc1838388ddec154be38cb597a4dcfa0711b2297196d5a9e7cb8dbe18"
12
12
  },
13
13
  "source_predecessor": {
14
- "version": "0.15.21",
15
- "tarball_sha256": "3439f5f4435632e4cde385a6937e3e3d2ffcfb777295dd56aafbf3b036be7493",
16
- "manifest_file_sha256": "7c2735e0b1c6cc8dac6581c47b6b557d8d0157a324b67efd4df058e67cdb289f",
14
+ "version": "0.15.22",
15
+ "tarball_sha256": "fda51e06fa16116179d9c48f1466432886c10e62807482326d2dc5ccb7b66eac",
16
+ "manifest_file_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
17
17
  "reference_package": "@wonderwhy-er/desktop-commander@0.2.51",
18
18
  "reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
19
19
  "reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
@@ -87,6 +87,12 @@
87
87
  ],
88
88
  "machine_fs_list_entry_fault_isolation": true,
89
89
  "native_windows_observation": true,
90
- "native_windows_observer_sha256": "c9b46fc497b55b8f0ad1564c8e15f9c1cdf2a07f206b3c8fa7966c892058e920"
90
+ "native_windows_observer_sha256": "c9b46fc497b55b8f0ad1564c8e15f9c1cdf2a07f206b3c8fa7966c892058e920",
91
+ "human_livelog_visual_opcode": true,
92
+ "human_livelog_absolute_root_paths": true,
93
+ "human_livelog_trace_span": true,
94
+ "human_livelog_presentation_filter": true,
95
+ "human_livelog_tty_in_place_rewrite": true,
96
+ "human_livelog_expanded_summary": true
91
97
  }
92
98
  }
package/SBOM.cdx.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:cdx:deadbyte-mcp:r48:0.15.22",
4
+ "serialNumber": "urn:cdx:deadbyte-mcp:r48:0.15.23",
5
5
  "version": 1,
6
6
  "metadata": {
7
7
  "component": {
8
8
  "type": "application",
9
9
  "name": "deadbyte-mcp",
10
- "version": "0.15.22"
10
+ "version": "0.15.23"
11
11
  }
12
12
  },
13
13
  "components": [
@@ -34,7 +34,7 @@
34
34
  {
35
35
  "type": "file",
36
36
  "name": "deadbyte-hardware-observer-r45.exe",
37
- "version": "0.15.22",
37
+ "version": "0.15.23",
38
38
  "hashes": [
39
39
  {
40
40
  "alg": "SHA-256",
package/TEST-MATRIX.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "deadbyte.test-matrix.v1",
3
- "version": "0.15.22",
3
+ "version": "0.15.23",
4
4
  "train": "R48",
5
5
  "primary_platform": "win32-x64",
6
6
  "reference": {
@@ -50,6 +50,16 @@
50
50
  "command": "npm run r48:release:test",
51
51
  "expected": "PASS"
52
52
  },
53
+ {
54
+ "id": "human-livelog",
55
+ "command": "node --test test/remote-live-log-r37.test.mjs",
56
+ "expected": "PASS visual opcode, absolute-root, trace/span, filter, TTY rewrite, expanded summary"
57
+ },
58
+ {
59
+ "id": "remote-livelog-integration",
60
+ "command": "node --test test/remote-session-cli.test.mjs",
61
+ "expected": "PASS trace/filter presentation with complete durable result journal"
62
+ },
53
63
  {
54
64
  "id": "full-regression",
55
65
  "command": "npm run r48:full:test",
@@ -77,13 +87,13 @@
77
87
  },
78
88
  {
79
89
  "id": "activation",
80
- "command": "npx -y deadbyte-mcp@0.15.22 remote status",
81
- "expected": "active runtime 0.15.22 with no VERSION SKEW"
90
+ "command": "npx -y deadbyte-mcp@0.15.23 remote status",
91
+ "expected": "active runtime 0.15.23 with no VERSION SKEW"
82
92
  },
83
93
  {
84
94
  "id": "machine-truth",
85
95
  "command": "signed machine_ping",
86
- "expected": "release_id and manifests bind activated 0.15.22 generation"
96
+ "expected": "release_id and manifests bind activated 0.15.23 generation"
87
97
  },
88
98
  {
89
99
  "id": "live-capability-truth",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-mcp",
3
- "version": "0.15.22",
3
+ "version": "0.15.23",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Authenticated MCP agentic runtime with signed skills, persistent model backends, identity-bound remote devices, durable job supervision, immutable release slots, and separately revocable machine authority.",
@@ -71,7 +71,8 @@
71
71
  "r47:hardening:test": "node scripts/commander-hardening-gate-r47.mjs",
72
72
  "r48:full:test": "node scripts/full-regression-r48.mjs",
73
73
  "r48:release:test": "node --test --test-concurrency=1 test/r48-release-contract.test.mjs test/commander-reference-contract-r48.test.mjs test/commander-extended-wire-r48.test.mjs test/commander-external-process-r48.test.mjs test/commander-office-reader-r48.test.mjs test/commander-pdf-r48.test.mjs test/commander-url-reader-r48.test.mjs test/commander-wire-contract-r47.test.mjs",
74
- "r48:catalog:test": "node --test --test-concurrency=1 test/full-max-catalog-r48.test.mjs"
74
+ "r48:catalog:test": "node --test --test-concurrency=1 test/full-max-catalog-r48.test.mjs",
75
+ "release:npm": "node scripts/npm-release-r48.mjs"
75
76
  },
76
77
  "bundleDependencies": [
77
78
  "@modelcontextprotocol/server",
@@ -0,0 +1,46 @@
1
+ import { readFile, rename, rm, mkdir } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import os from "node:os";
4
+ import { createSkillPlane } from "../src/skill-plane-r44.mjs";
5
+
6
+ const stateDir=path.join(os.homedir(),".deadbyte-mcp");
7
+ const skillsRoot=path.join(stateDir,"skills");
8
+ const active=path.join(skillsRoot,"skill-creator");
9
+ const stageParent=path.join(stateDir,"skill-staging","skill-creator-1.1.1");
10
+ const candidate=path.join(stageParent,"skill-creator");
11
+ const expectedOld="f34b3953db176c8ae9a5e08e7702b39f12b60b013edcd2f4d63a6268af9ba432";
12
+ const expectedNew="e39960cab9eab44512fa38703fc8255b8be8e8b4f6565b4255b94604eded5359";
13
+
14
+ const oldEnv=JSON.parse(await readFile(path.join(active,"skill.json"),"utf8"));
15
+ const newEnv=JSON.parse(await readFile(path.join(candidate,"skill.json"),"utf8"));
16
+ if(oldEnv.manifest_sha256!==expectedOld||oldEnv.body.version!=="1.1.0") throw new Error("active precondition failed");
17
+ if(newEnv.manifest_sha256!==expectedNew||newEnv.body.version!=="1.1.1") throw new Error("candidate precondition failed");
18
+
19
+ const stagePlane=await createSkillPlane({root:stageParent,verifyKeyPath:path.join(stateDir,"trust","ed25519-public.pem")});
20
+ const staged=await stagePlane.load({name:"skill-creator"});
21
+ if(!staged.verified||staged.version!=="1.1.1") throw new Error("candidate signature verification failed");
22
+
23
+ const swapRoot=path.join(stateDir,"skill-staging","swap");
24
+ await mkdir(swapRoot,{recursive:true});
25
+ const oldSwap=path.join(swapRoot,"skill-creator-1.1.0-"+expectedOld);
26
+ await rm(oldSwap,{recursive:true,force:true});
27
+
28
+ let movedOld=false,movedNew=false;
29
+ try{
30
+ await rename(active,oldSwap); movedOld=true;
31
+ await rename(candidate,active); movedNew=true;
32
+ const livePlane=await createSkillPlane({root:skillsRoot,verifyKeyPath:path.join(stateDir,"trust","ed25519-public.pem")});
33
+ const live=await livePlane.load({name:"skill-creator"});
34
+ if(!live.verified||live.version!=="1.1.1"||live.manifest_sha256!==expectedNew) throw new Error("live verification failed after swap");
35
+ await rm(oldSwap,{recursive:true,force:true});
36
+ await rm(stageParent,{recursive:true,force:true});
37
+ console.log(JSON.stringify({status:"ACTIVATED",version:live.version,manifest_sha256:live.manifest_sha256,verified:live.verified},null,2));
38
+ }catch(e){
39
+ try{
40
+ if(movedNew) await rename(active,candidate);
41
+ if(movedOld) await rename(oldSwap,active);
42
+ }catch(rollbackError){
43
+ e.message += "; rollback_failed="+rollbackError.message;
44
+ }
45
+ throw e;
46
+ }
@@ -0,0 +1,208 @@
1
+ import { readFile, writeFile, mkdir, rm, mkdtemp } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import os from "node:os";
4
+ import { fileURLToPath } from "node:url";
5
+ import { promisify } from "node:util";
6
+ import { execFile } from "node:child_process";
7
+ import { createHash, createPrivateKey, createPublicKey, sign } from "node:crypto";
8
+ import { createSkillPlane } from "../src/skill-plane-r44.mjs";
9
+
10
+ const ex = promisify(execFile);
11
+ const here = path.dirname(fileURLToPath(import.meta.url));
12
+ const home = os.homedir();
13
+ const stateDir = path.join(home, ".deadbyte-mcp");
14
+ const skillsRoot = path.join(stateDir, "skills");
15
+ const creatorDir = path.join(skillsRoot, "skill-creator");
16
+ const name = "deadbyte-advanced-pcb-engineering";
17
+ const version = "1.0.0";
18
+ const out = path.join(skillsRoot, name);
19
+ const description = "Evidence-driven advanced PCB engineering workflow for schematic review, constraint capture, stackup-aware placement and routing, power and signal integrity, EMC, DFM/DFT, KiCad verification, manufacturing release, and hardware bring-up.";
20
+ const creatorManifest = "e39960cab9eab44512fa38703fc8255b8be8e8b4f6565b4255b94604eded5359";
21
+
22
+ const sha = b => createHash("sha256").update(b).digest("hex");
23
+ const canonical = v => Array.isArray(v) ? v.map(canonical) : v && typeof v === "object"
24
+ ? Object.fromEntries(Object.keys(v).sort((a,b)=>a.localeCompare(b,"en")).map(k=>[k,canonical(v[k])]))
25
+ : v;
26
+
27
+ const sources = [
28
+ ["SKILL.md", "pcb-skill-src-SKILL.md.txt", "skill"],
29
+ ["references/bringup-evidence.md", "pcb-skill-src-bringup-evidence.md.txt", "reference"],
30
+ ["references/constraint-model.md", "pcb-skill-src-constraint-model.md.txt", "reference"],
31
+ ["references/emc-mechanical-dfm.md", "pcb-skill-src-emc-mechanical-dfm.md.txt", "reference"],
32
+ ["references/high-speed-layout.md", "pcb-skill-src-high-speed-layout.md.txt", "reference"],
33
+ ["references/kicad-native.md", "pcb-skill-src-kicad-native.md.txt", "reference"],
34
+ ["references/power-integrity.md", "pcb-skill-src-power-integrity.md.txt", "reference"],
35
+ ["scripts/kicad_pcb_probe.py", "pcb-skill-src-kicad_pcb_probe.py.txt", "script"],
36
+ ["scripts/pcb_constraint_gate.py", "pcb-skill-src-pcb_constraint_gate.py.txt", "script"]
37
+ ];
38
+
39
+ await rm(out, { recursive: true, force: true });
40
+ const scaffold = await ex(process.execPath, [path.join(creatorDir, "scripts", "create-skill.mjs"), skillsRoot, name, version], { maxBuffer: 1024 * 1024 });
41
+
42
+ for (const [target, src] of sources) {
43
+ const data = await readFile(path.join(here, src));
44
+ const dst = path.join(out, ...target.split("/"));
45
+ await mkdir(path.dirname(dst), { recursive: true });
46
+ await writeFile(dst, data);
47
+ }
48
+
49
+ const resources = [];
50
+ for (const [target,, kind] of sources) {
51
+ if (target === "SKILL.md") continue;
52
+ const bytes = await readFile(path.join(out, ...target.split("/")));
53
+ resources.push({ path: target, sha256: sha(bytes), kind });
54
+ }
55
+ resources.sort((a,b)=>a.path.localeCompare(b.path,"en"));
56
+
57
+ const body = {
58
+ schema: "deadbyte.skill-manifest.v1",
59
+ name,
60
+ version,
61
+ description,
62
+ audience: "agent",
63
+ skill_md_sha256: sha(await readFile(path.join(out, "SKILL.md"))),
64
+ resources,
65
+ required_capabilities: [],
66
+ authority_planes: ["coding"],
67
+ provenance: {
68
+ source: "skill-creator",
69
+ origin_url: null,
70
+ source_revision: "local-draft-2026-09-27-pcb-v1"
71
+ }
72
+ };
73
+
74
+ const bodyBytes = Buffer.from(JSON.stringify(canonical(body)), "utf8");
75
+ const body_sha256 = sha(bodyBytes);
76
+ const priv = createPrivateKey(await readFile(path.join(stateDir, "trust", "ed25519-private.pem")));
77
+ const pub = createPublicKey(priv);
78
+ const keyId = sha(pub.export({ type: "spki", format: "der" }));
79
+ const attestation = {
80
+ algorithm: "ed25519",
81
+ domain: "DEADBYTE-SKILL-MANIFEST-V1",
82
+ key_id: keyId,
83
+ signature_base64: sign(null, Buffer.concat([Buffer.from("DEADBYTE-SKILL-MANIFEST-V1\0", "utf8"), bodyBytes]), priv).toString("base64")
84
+ };
85
+ const unsigned = { body, body_sha256, attestation };
86
+ const envelope = {
87
+ ...unsigned,
88
+ manifest_sha256: sha(Buffer.from(JSON.stringify(canonical(unsigned)), "utf8"))
89
+ };
90
+ await writeFile(path.join(out, "skill.json"), JSON.stringify(envelope, null, 2), "utf8");
91
+
92
+ const validator = await ex(process.execPath, [path.join(creatorDir, "scripts", "validate-skill.mjs"), out], { maxBuffer: 1024 * 1024 });
93
+
94
+ const plane = await createSkillPlane({
95
+ root: skillsRoot,
96
+ verifyKeyPath: path.join(stateDir, "trust", "ed25519-public.pem")
97
+ });
98
+ const loaded = await plane.load({ name });
99
+ if (!loaded.verified) throw new Error("skill plane returned verified=false");
100
+
101
+ let python = null;
102
+ for (const candidate of ["python", "py"]) {
103
+ try {
104
+ await ex(candidate, ["--version"], { timeout: 10000, maxBuffer: 1024 * 1024 });
105
+ python = candidate;
106
+ break;
107
+ } catch {}
108
+ }
109
+
110
+ let selfTest = { status: "SKIPPED", reason: "python_not_found" };
111
+ if (python) {
112
+ const tmp = await mkdtemp(path.join(os.tmpdir(), "deadbyte-pcb-skill-"));
113
+ try {
114
+ const fixture = [
115
+ "(kicad_pcb",
116
+ " (version 20240108)",
117
+ " (generator pcbnew)",
118
+ " (layers",
119
+ " (0 \"F.Cu\" signal)",
120
+ " (31 \"B.Cu\" signal)",
121
+ " )",
122
+ " (net 0 \"\")",
123
+ " (net 1 \"GND\")",
124
+ " (footprint \"TEST\" (layer \"F.Cu\"))",
125
+ " (segment (start 0 0) (end 1 0) (width 0.2) (layer \"F.Cu\") (net 1))",
126
+ " (via (at 1 0) (size 0.6) (drill 0.3) (layers \"F.Cu\" \"B.Cu\") (net 1))",
127
+ " (zone (net 1) (net_name \"GND\") (layer \"B.Cu\"))",
128
+ ")",
129
+ ""
130
+ ].join("\n");
131
+ const fixturePath = path.join(tmp, "fixture.kicad_pcb");
132
+ const probePath = path.join(tmp, "probe.json");
133
+ const contractPath = path.join(tmp, "contract.json");
134
+ await writeFile(fixturePath, fixture, "utf8");
135
+
136
+ const probeScript = path.join(out, "scripts", "kicad_pcb_probe.py");
137
+ const gateScript = path.join(out, "scripts", "pcb_constraint_gate.py");
138
+ const probeRun = await ex(python, [probeScript, fixturePath, "--pretty"], { timeout: 30000, maxBuffer: 1024 * 1024 });
139
+ const probe = JSON.parse(probeRun.stdout);
140
+ if (probe.copper_layer_count !== 2 || probe.counts.footprints !== 1 || probe.counts.segments !== 1 || probe.counts.vias !== 1 || probe.track_width_mm.min !== 0.2 || probe.via_drill_mm.min !== 0.3) {
141
+ throw new Error("probe self-test observation mismatch");
142
+ }
143
+ await writeFile(probePath, probeRun.stdout, "utf8");
144
+
145
+ const passContract = {
146
+ required_layers: ["F.Cu", "B.Cu"],
147
+ min_copper_layers: 2,
148
+ min_track_width_mm: 0.15,
149
+ min_via_diameter_mm: 0.45,
150
+ min_via_drill_mm: 0.20,
151
+ required_nets: ["GND"],
152
+ min_footprints: 1,
153
+ min_segments: 1,
154
+ min_vias: 1,
155
+ min_zones: 1
156
+ };
157
+ await writeFile(contractPath, JSON.stringify(passContract, null, 2), "utf8");
158
+ const passRun = await ex(python, [gateScript, probePath, contractPath], { timeout: 30000, maxBuffer: 1024 * 1024 });
159
+ const passResult = JSON.parse(passRun.stdout);
160
+ if (passResult.status !== "PASS") throw new Error("positive gate self-test did not pass");
161
+
162
+ const failContract = { min_track_width_mm: 0.25 };
163
+ await writeFile(contractPath, JSON.stringify(failContract, null, 2), "utf8");
164
+ let negativeCaught = false;
165
+ try {
166
+ await ex(python, [gateScript, probePath, contractPath], { timeout: 30000, maxBuffer: 1024 * 1024 });
167
+ } catch (e) {
168
+ const parsed = e.stdout ? JSON.parse(e.stdout) : null;
169
+ if (e.code === 2 && parsed && parsed.status === "FAIL") negativeCaught = true;
170
+ }
171
+ if (!negativeCaught) throw new Error("negative gate self-test did not fail closed");
172
+
173
+ selfTest = {
174
+ status: "PASS",
175
+ python,
176
+ fixture_probe: {
177
+ copper_layers: probe.copper_layer_count,
178
+ footprints: probe.counts.footprints,
179
+ segments: probe.counts.segments,
180
+ vias: probe.counts.vias,
181
+ zones: probe.counts.zones,
182
+ min_track_width_mm: probe.track_width_mm.min,
183
+ min_via_diameter_mm: probe.via_diameter_mm.min,
184
+ min_via_drill_mm: probe.via_drill_mm.min
185
+ },
186
+ positive_gate: "PASS",
187
+ negative_gate: "FAIL_EXIT_2"
188
+ };
189
+ } finally {
190
+ await rm(tmp, { recursive: true, force: true });
191
+ }
192
+ }
193
+
194
+ console.log(JSON.stringify({
195
+ status: "built",
196
+ name,
197
+ version,
198
+ out,
199
+ creator_manifest: creatorManifest,
200
+ scaffold_stdout: scaffold.stdout.trim(),
201
+ manifest_sha256: envelope.manifest_sha256,
202
+ body_sha256,
203
+ resource_count: resources.length,
204
+ verify_key_id: keyId,
205
+ validator_stdout: validator.stdout.trim(),
206
+ skill_plane_verified: loaded.verified,
207
+ self_test: selfTest
208
+ }, null, 2));
@@ -0,0 +1,8 @@
1
+ import { readFile, readdir } from "node:fs/promises";
2
+ import path from "node:path";
3
+ const root=process.argv[2];
4
+ async function walk(d,r=""){let out=[];for(const e of (await readdir(d,{withFileTypes:true})).sort((a,b)=>a.name.localeCompare(b.name,"en"))){const p=path.join(d,e.name),q=r?r+"/"+e.name:e.name;if(e.isDirectory())out.push(...await walk(p,q));else if(e.isFile())out.push(q)}return out}
5
+ const env=JSON.parse(await readFile(path.join(root,"skill.json"),"utf8"));
6
+ const actual=(await walk(root)).sort((a,b)=>a.localeCompare(b,"en"));
7
+ const expected=["SKILL.md","skill.json",...env.body.resources.map(x=>x.path)].sort((a,b)=>a.localeCompare(b,"en"));
8
+ console.log(JSON.stringify({actual,expected,extra:actual.filter(x=>!expected.includes(x)),missing:expected.filter(x=>!actual.includes(x))},null,2));