microduck-cli 0.9.4__tar.gz → 0.9.6__tar.gz

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 (205) hide show
  1. microduck_cli-0.9.6/.devague/current +1 -0
  2. microduck_cli-0.9.6/.devague/current_plan +1 -0
  3. microduck_cli-0.9.6/.devague/deliveries/jetson-retest-and-ai-lab-tutorial.json +424 -0
  4. microduck_cli-0.9.6/.devague/frames/jetson-retest-and-ai-lab-tutorial.json +978 -0
  5. microduck_cli-0.9.6/.devague/plans/jetson-retest-and-ai-lab-tutorial.json +574 -0
  6. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.eidetic/memory/microduck-cli__public.jsonl +2 -1
  7. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/CHANGELOG.md +32 -0
  8. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/PKG-INFO +2 -1
  9. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/README.md +1 -0
  10. microduck_cli-0.9.6/docs/deliveries/2026-09-07-jetson-retest-and-ai-lab-tutorial.md +113 -0
  11. microduck_cli-0.9.6/docs/plans/2026-09-07-jetson-retest-and-ai-lab-tutorial.md +89 -0
  12. microduck_cli-0.9.6/docs/specs/2026-09-07-jetson-retest-and-ai-lab-tutorial.md +159 -0
  13. microduck_cli-0.9.6/docs/tools/check_tutorial.py +422 -0
  14. microduck_cli-0.9.6/docs/verification/2026-09-07-spark-retest.md +383 -0
  15. microduck_cli-0.9.6/docs/verification/2026-09-08-thor-orin-tutorial-run.md +106 -0
  16. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/doctor.py +18 -8
  17. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/env/doctor.py +41 -9
  18. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/env/hosts.py +3 -2
  19. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/pyproject.toml +1 -1
  20. microduck_cli-0.9.6/tests/test_check_tutorial.py +297 -0
  21. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_env_doctor.py +59 -0
  22. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_hosts.py +1 -0
  23. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/uv.lock +1 -1
  24. microduck_cli-0.9.4/.devague/current +0 -1
  25. microduck_cli-0.9.4/.devague/current_plan +0 -1
  26. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/agent-config/SKILL.md +0 -0
  27. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  28. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/agent-config/scripts/show.sh +0 -0
  29. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/ask-colleague/SKILL.md +0 -0
  30. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  31. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  32. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  33. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  34. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  35. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  36. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/challenge/SKILL.md +0 -0
  37. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/cicd/SKILL.md +0 -0
  38. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  39. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  40. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  41. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  42. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  43. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/communicate/SKILL.md +0 -0
  44. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  45. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  46. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  47. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  48. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  49. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  50. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/deviate/SKILL.md +0 -0
  51. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  52. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  53. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/operate-microduck/SKILL.md +0 -0
  54. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  55. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  56. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/recall/SKILL.md +0 -0
  57. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/recall/scripts/recall.sh +0 -0
  58. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/remember/SKILL.md +0 -0
  59. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/remember/scripts/remember.sh +0 -0
  60. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/run-tests/SKILL.md +0 -0
  61. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/run-tests/scripts/test.sh +0 -0
  62. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/scope/SKILL.md +0 -0
  63. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/sonarclaude/SKILL.md +0 -0
  64. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  65. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  66. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  67. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  68. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/think/SKILL.md +0 -0
  69. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/think/scripts/think.sh +0 -0
  70. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/validate-delivery/SKILL.md +0 -0
  71. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/version-bump/SKILL.md +0 -0
  72. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills/version-bump/scripts/bump.py +0 -0
  73. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.claude/skills.local.yaml.example +0 -0
  74. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/deliveries/microduck-cli-env-teach-operate-rules.json +0 -0
  75. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/deliveries/orin-sanity.json +0 -0
  76. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/deliveries/readme-as-proof.json +0 -0
  77. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/deliveries/thor-sanity.json +0 -0
  78. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/frames/microduck-cli-env-teach-operate-rules.json +0 -0
  79. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/frames/orin-sanity.json +0 -0
  80. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/frames/readme-as-proof.json +0 -0
  81. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/frames/thor-sanity.json +0 -0
  82. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/plans/microduck-cli-env-teach-operate-rules.json +0 -0
  83. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/plans/orin-sanity.json +0 -0
  84. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/plans/readme-as-proof.json +0 -0
  85. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.devague/plans/thor-sanity.json +0 -0
  86. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.flake8 +0 -0
  87. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.github/workflows/publish.yml +0 -0
  88. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.github/workflows/tests.yml +0 -0
  89. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.gitignore +0 -0
  90. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/.markdownlint-cli2.yaml +0 -0
  91. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/AGENTS.colleague.md +0 -0
  92. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/CLAUDE.md +0 -0
  93. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/LICENSE +0 -0
  94. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/culture.yaml +0 -0
  95. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/deliveries/2026-09-03-microduck-cli-env-teach-operate-rules.md +0 -0
  96. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/deliveries/2026-09-04-orin-sanity.md +0 -0
  97. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/deliveries/2026-09-04-readme-as-proof.md +0 -0
  98. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/operating-the-duck.md +0 -0
  99. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/plans/2026-09-03-microduck-cli-env-teach-operate-rules.md +0 -0
  100. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/plans/2026-09-04-orin-sanity.md +0 -0
  101. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/plans/2026-09-04-thor-sanity.md +0 -0
  102. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/skill-sources.md +0 -0
  103. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/specs/2026-09-03-microduck-cli-env-teach-operate-rules.md +0 -0
  104. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/specs/2026-09-04-orin-sanity.md +0 -0
  105. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/specs/2026-09-04-readme-as-proof.md +0 -0
  106. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/specs/2026-09-04-thor-sanity.md +0 -0
  107. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/upstream-pins.md +0 -0
  108. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/verification/2026-09-04-orin-sanity.md +0 -0
  109. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/verification/2026-09-04-sim-bringup.md +0 -0
  110. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/docs/verification/2026-09-04-thor-sanity.md +0 -0
  111. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/__init__.py +0 -0
  112. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/__main__.py +0 -0
  113. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/__init__.py +0 -0
  114. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/compose.py +0 -0
  115. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/default_rules.toml +0 -0
  116. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/defaults.py +0 -0
  117. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/engine.py +0 -0
  118. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/human_gate.py +0 -0
  119. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/idle.py +0 -0
  120. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/intents.py +0 -0
  121. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/liveness.py +0 -0
  122. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/model.py +0 -0
  123. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/release.py +0 -0
  124. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/replay.py +0 -0
  125. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/rule_engine.py +0 -0
  126. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/rules.py +0 -0
  127. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/sense.py +0 -0
  128. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/senselog.py +0 -0
  129. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/sink.py +0 -0
  130. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/behavior/skills.py +0 -0
  131. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/__init__.py +0 -0
  132. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/__init__.py +0 -0
  133. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/cli.py +0 -0
  134. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/duck.py +0 -0
  135. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/env.py +0 -0
  136. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/explain.py +0 -0
  137. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/learn.py +0 -0
  138. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/overview.py +0 -0
  139. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/policy.py +0 -0
  140. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/rules.py +0 -0
  141. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_commands/whoami.py +0 -0
  142. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_errors.py +0 -0
  143. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/cli/_output.py +0 -0
  144. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/duck/__init__.py +0 -0
  145. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/duck/addressing.py +0 -0
  146. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/duck/gate.py +0 -0
  147. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/duck/record.py +0 -0
  148. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/env/__init__.py +0 -0
  149. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/env/params.py +0 -0
  150. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/env/stack.py +0 -0
  151. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/explain/__init__.py +0 -0
  152. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/explain/catalog.py +0 -0
  153. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/explain/duck.py +0 -0
  154. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/explain/env.py +0 -0
  155. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/explain/policy.py +0 -0
  156. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/explain/rules.py +0 -0
  157. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/ipc/__init__.py +0 -0
  158. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/ipc/client.py +0 -0
  159. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/ipc/proto.py +0 -0
  160. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/train/__init__.py +0 -0
  161. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/train/artifacts.py +0 -0
  162. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/microduck_cli/train/lane.py +0 -0
  163. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/sonar-project.properties +0 -0
  164. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/__init__.py +0 -0
  165. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/fake_robotd.py +0 -0
  166. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/fixtures/duck_ipc_proto.json +0 -0
  167. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/live/__init__.py +0 -0
  168. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/live/test_live_cli.py +0 -0
  169. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_addressing.py +0 -0
  170. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_cli.py +0 -0
  171. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_cli_introspection.py +0 -0
  172. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_client.py +0 -0
  173. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_default_rules.py +0 -0
  174. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_duck.py +0 -0
  175. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_engine.py +0 -0
  176. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_env.py +0 -0
  177. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_fake_robotd.py +0 -0
  178. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_gate.py +0 -0
  179. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_human_gate.py +0 -0
  180. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_idle.py +0 -0
  181. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_intents.py +0 -0
  182. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_lane.py +0 -0
  183. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_learn_skill.py +0 -0
  184. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_links.py +0 -0
  185. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_liveness.py +0 -0
  186. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_lockstep.py +0 -0
  187. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_model.py +0 -0
  188. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_no_config_writes.py +0 -0
  189. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_no_hardware_paths.py +0 -0
  190. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_no_secrets_in_output.py +0 -0
  191. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_params.py +0 -0
  192. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_policy.py +0 -0
  193. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_proto.py +0 -0
  194. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_record.py +0 -0
  195. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_release.py +0 -0
  196. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_replay.py +0 -0
  197. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_rule_engine.py +0 -0
  198. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_rules.py +0 -0
  199. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_rules_cli.py +0 -0
  200. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_sense.py +0 -0
  201. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_senselog.py +0 -0
  202. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_sink.py +0 -0
  203. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_skills.py +0 -0
  204. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_stack.py +0 -0
  205. {microduck_cli-0.9.4 → microduck_cli-0.9.6}/tests/test_zero_deps.py +0 -0
@@ -0,0 +1 @@
1
+ jetson-retest-and-ai-lab-tutorial
@@ -0,0 +1 @@
1
+ jetson-retest-and-ai-lab-tutorial
@@ -0,0 +1,424 @@
1
+ {
2
+ "plan_slug": "jetson-retest-and-ai-lab-tutorial",
3
+ "schema_version": 2,
4
+ "created": "2026-09-07T03:46:16Z",
5
+ "updated": "2026-09-07T03:56:39Z",
6
+ "deviations": [
7
+ {
8
+ "id": "d1",
9
+ "what": "Validate-delivery and summarize-delivery run after t5 and BEFORE any PR (t6, t7), with t8/t9 pending as operator work; the plan had the delivery legs after the merges",
10
+ "task_ref": "t6",
11
+ "reason": "user direction 2026-09-07: 'when Tutorial is done, and before any PR'; Thor/Orin operator runs count as the tutorial's validation afterwards",
12
+ "affects": [
13
+ "t6",
14
+ "t7"
15
+ ],
16
+ "origin": "user",
17
+ "status": "approved",
18
+ "classification": "acceptable",
19
+ "seq": 1
20
+ },
21
+ {
22
+ "id": "d2",
23
+ "what": "The Spark training smoke needed model-gear-vllm-primary stopped for 4.5 min (06:34:22-06:38:55+03:00) and restarted healthy; beside it Warp saw 0 GiB and failed OOM",
24
+ "task_ref": "t4",
25
+ "reason": "plan risk r4 materialised; operator chose 'stop vllm-primary for the smoke, restart after'",
26
+ "affects": [
27
+ "t4"
28
+ ],
29
+ "origin": "user",
30
+ "status": "approved",
31
+ "classification": "acceptable",
32
+ "seq": 2
33
+ },
34
+ {
35
+ "id": "d3",
36
+ "what": "For the windowed run the Spark desktop session was unlocked and idle-delay/lock-enabled set to 0/false, then restored to 300/true at 06:40:04; the first attempt died when the session locked",
37
+ "task_ref": "t4",
38
+ "reason": "GNOME lock closed the viewer and the body exited; the tutorial now warns about it",
39
+ "affects": [
40
+ "t4"
41
+ ],
42
+ "origin": "llm",
43
+ "status": "approved",
44
+ "classification": "acceptable",
45
+ "seq": 3
46
+ },
47
+ {
48
+ "id": "d4",
49
+ "what": "The jetson-ai-lab fork already existed as OriNachum/jetson-generative-ai-playground (upstream renamed); it was cloned to ../jetson-ai-lab instead of creating a new fork",
50
+ "task_ref": "t3",
51
+ "reason": "gh repo fork reported the existing fork; a second fork is impossible",
52
+ "affects": [
53
+ "t3",
54
+ "t7"
55
+ ],
56
+ "origin": "llm",
57
+ "status": "approved",
58
+ "classification": "acceptable",
59
+ "seq": 4
60
+ },
61
+ {
62
+ "id": "d5",
63
+ "what": "CLI defect found by the dry-run, deferred to its own PR per spec c10: env doctor on a wheel install reads docs/upstream-pins.md from a path the wheel does not ship, prints [FAIL] for two warning-severity pin checks under a healthy verdict",
64
+ "task_ref": "t4",
65
+ "reason": "tutorial step 5 documents the symptom; fixing it changes CLI code, outside this plan's docs-only scope",
66
+ "affects": [
67
+ "t6"
68
+ ],
69
+ "origin": "llm",
70
+ "status": "approved",
71
+ "classification": "needs-follow-up",
72
+ "seq": 5
73
+ },
74
+ {
75
+ "id": "d6",
76
+ "what": "Steps 2-4 of the tutorial (git clone, cargo build, uv sync) were not re-run on Spark; clones, daemons and venv pre-existed at the pins and were verified by result",
77
+ "task_ref": "t4",
78
+ "reason": "re-running would have cost an hour for no new evidence; Thor/Orin operator runs exercise them from scratch",
79
+ "affects": [
80
+ "t4"
81
+ ],
82
+ "origin": "llm",
83
+ "status": "approved",
84
+ "classification": "acceptable",
85
+ "seq": 6
86
+ }
87
+ ],
88
+ "evidence": [
89
+ {
90
+ "id": "e1",
91
+ "obligation_ref": "o1",
92
+ "test_ref": "docs/tools/check_tutorial.py --record docs/verification/*.md docs/operating-the-duck.md SKILL.md README.md",
93
+ "behavior_text": "30 checked bash lines, 30 hit, 0 miss; 6 nocheck fences (provisioning/placeholders) listed in the record",
94
+ "contract_text": "each tab's commands are quoted from that box's record (h7)",
95
+ "evidence_type": "automated",
96
+ "strength": "execution",
97
+ "strength_basis": "checker ran at 7495769, exit 0; totals commands=30 hit=30 miss=0",
98
+ "outcome": "pass",
99
+ "run": {
100
+ "timestamp": "2026-09-07T06:45:00+03:00",
101
+ "commit": "7495769"
102
+ },
103
+ "origin": "llm",
104
+ "status": "approved",
105
+ "superseded": false,
106
+ "seq": 7
107
+ },
108
+ {
109
+ "id": "e2",
110
+ "obligation_ref": "o2",
111
+ "test_ref": "grep 'uv tool install microduck-cli==' tutorial; grep 0.9.4 record",
112
+ "behavior_text": "install line is microduck-cli==0.9.4; the Spark record names 0.9.4 five times; PyPI wheel 0.9.4 installed and answered --version",
113
+ "contract_text": "the install command names an exact version that appears as the CLI version in all three 2026-09-07 records (h18)",
114
+ "evidence_type": "manual",
115
+ "strength": "execution",
116
+ "strength_basis": "Thor/Orin 2026-09-07 records do not exist yet (operator); Spark record and the 2026-09-04 records agree on 0.9.4",
117
+ "outcome": "pass",
118
+ "run": {
119
+ "timestamp": "2026-09-07T06:45:00+03:00",
120
+ "commit": "7495769"
121
+ },
122
+ "origin": "llm",
123
+ "status": "approved",
124
+ "superseded": false,
125
+ "seq": 8
126
+ },
127
+ {
128
+ "id": "e3",
129
+ "obligation_ref": "o3",
130
+ "test_ref": "grep counts on the tutorial",
131
+ "behavior_text": "Python 3.12 x5, 'uv python install 3.12' x1, rustup x3, 'source ~/.cargo/env' x3, JetPack 6 x1 marked 'not tested'",
132
+ "contract_text": "prerequisites list Python 3.12, rustup + source, the cargo build, tested L4T/JetPack per box; JetPack 6 untested (h19)",
133
+ "evidence_type": "automated",
134
+ "strength": "coverage",
135
+ "strength_basis": "string presence only; wording reviewed by hand",
136
+ "outcome": "pass",
137
+ "run": {
138
+ "timestamp": "2026-09-07T06:45:00+03:00",
139
+ "commit": "7495769"
140
+ },
141
+ "origin": "llm",
142
+ "status": "approved",
143
+ "superseded": false,
144
+ "seq": 9
145
+ },
146
+ {
147
+ "id": "e4",
148
+ "obligation_ref": "o4",
149
+ "test_ref": "grep '<Warning title=' + link counts",
150
+ "behavior_text": "8 Warning blocks incl. the five required (no walk, Thor fork branch until #39, Orin no training, --apply dry-run, relax falls) plus three from the dry-run (lock screen, GPU must be free, no training on Orin); 7 evidence links to records/PR",
151
+ "contract_text": "each of the five caveats names the record or upstream issue it comes from (h6)",
152
+ "evidence_type": "manual",
153
+ "strength": "fidelity",
154
+ "strength_basis": "read each block against its record",
155
+ "outcome": "pass",
156
+ "run": {
157
+ "timestamp": "2026-09-07T06:45:00+03:00",
158
+ "commit": "7495769"
159
+ },
160
+ "origin": "llm",
161
+ "status": "approved",
162
+ "superseded": false,
163
+ "seq": 10
164
+ },
165
+ {
166
+ "id": "e5",
167
+ "obligation_ref": "o5",
168
+ "test_ref": "grep of both shas across tutorial, record, upstream-pins; grep xfail record",
169
+ "behavior_text": "both shas present in tutorial (2 each), record (2 each), upstream-pins; record quotes XFAIL 3 times; upstream heads unchanged per gh api on 2026-09-07",
170
+ "contract_text": "the record's pins table matches docs/upstream-pins.md; walk sentinel quoted xfail (h2)",
171
+ "evidence_type": "automated",
172
+ "strength": "execution",
173
+ "strength_basis": "live suite windowed: 12 passed, 1 xfailed at 61a564c",
174
+ "outcome": "pass",
175
+ "run": {
176
+ "timestamp": "2026-09-07T06:45:00+03:00",
177
+ "commit": "7495769"
178
+ },
179
+ "origin": "llm",
180
+ "status": "approved",
181
+ "superseded": false,
182
+ "seq": 11
183
+ },
184
+ {
185
+ "id": "e6",
186
+ "obligation_ref": "o6",
187
+ "test_ref": "docs/verification/2026-09-07-spark-retest.md + scratchpad logs 00-10",
188
+ "behavior_text": "record names 11 log files, CLI 0.9.4 wheel + repo 61a564c, two window PNGs 1468x1026, 'What was NOT verified'; markdownlint 0 errors",
189
+ "contract_text": "every quoted line traces to a kept log; record names the CLI commit (h3)",
190
+ "evidence_type": "manual",
191
+ "strength": "fidelity",
192
+ "strength_basis": "lines pasted from the logs by the author of both",
193
+ "outcome": "pass",
194
+ "run": {
195
+ "timestamp": "2026-09-07T06:45:00+03:00",
196
+ "commit": "7495769"
197
+ },
198
+ "origin": "llm",
199
+ "status": "approved",
200
+ "superseded": false,
201
+ "seq": 12
202
+ },
203
+ {
204
+ "id": "e7",
205
+ "obligation_ref": "o7",
206
+ "test_ref": "uv run pytest tests/test_hosts.py; git diff 61a564c HEAD -- microduck_cli/env/hosts.py",
207
+ "behavior_text": "17 passed; diff touches only the _GB10_VERIFIED string (0 changed lines mention torch_source_applies or remediation)",
208
+ "contract_text": "tests/test_hosts.py passes with the new verified strings and no HostInfo verdict changes (h16)",
209
+ "evidence_type": "automated",
210
+ "strength": "execution",
211
+ "strength_basis": "pytest green at 7495769",
212
+ "outcome": "pass",
213
+ "run": {
214
+ "timestamp": "2026-09-07T06:45:00+03:00",
215
+ "commit": "7495769"
216
+ },
217
+ "origin": "llm",
218
+ "status": "approved",
219
+ "superseded": false,
220
+ "seq": 13
221
+ },
222
+ {
223
+ "id": "e8",
224
+ "obligation_ref": "o8",
225
+ "test_ref": "npm run build in ../jetson-ai-lab @31c2bad",
226
+ "behavior_text": "exit 0; dist/tutorials/microduck-on-jetson/index.html emitted; 'nocheck' marker absent from the HTML; both PNGs referenced",
227
+ "contract_text": "npm run build exits 0 at the PR head and the page renders (h5)",
228
+ "evidence_type": "automated",
229
+ "strength": "execution",
230
+ "strength_basis": "build log 09-npm-build.txt",
231
+ "outcome": "pass",
232
+ "run": {
233
+ "timestamp": "2026-09-07T06:45:00+03:00",
234
+ "commit": "7495769"
235
+ },
236
+ "origin": "llm",
237
+ "status": "approved",
238
+ "superseded": false,
239
+ "seq": 14
240
+ },
241
+ {
242
+ "id": "e9",
243
+ "obligation_ref": "o9",
244
+ "test_ref": "visual review of microduck-spark-stand-1.png and -2.png",
245
+ "behavior_text": "both 1468x1026 captures show the 'MuJoCo : scene' window only, duck standing in the same place; identity scan of names 0 hits",
246
+ "contract_text": "every PNG shows a single MuJoCo viewer window; no terminal/hostname/other window (h20)",
247
+ "evidence_type": "manual",
248
+ "strength": "fidelity",
249
+ "strength_basis": "images viewed by the agent; a reviewer should look too",
250
+ "outcome": "pass",
251
+ "run": {
252
+ "timestamp": "2026-09-07T06:45:00+03:00",
253
+ "commit": "7495769"
254
+ },
255
+ "origin": "llm",
256
+ "status": "approved",
257
+ "superseded": false,
258
+ "seq": 15
259
+ },
260
+ {
261
+ "id": "e10",
262
+ "obligation_ref": "o10",
263
+ "test_ref": "read of the Orin tab in Step 4 and Step 10",
264
+ "behavior_text": "Orin Step-10 tab contains only the 'No training step on Orin' warning; Orin Step-4 tab has UV_INDEX uv sync only",
265
+ "contract_text": "no policy smoke or train invocation in the Orin path (h4, tutorial half)",
266
+ "evidence_type": "manual",
267
+ "strength": "coverage",
268
+ "strength_basis": "the Orin record half is the operator's run (t8)",
269
+ "outcome": "pass",
270
+ "run": {
271
+ "timestamp": "2026-09-07T06:45:00+03:00",
272
+ "commit": "7495769"
273
+ },
274
+ "origin": "llm",
275
+ "status": "approved",
276
+ "superseded": false,
277
+ "seq": 16
278
+ },
279
+ {
280
+ "id": "e11",
281
+ "obligation_ref": "o11",
282
+ "test_ref": "microduck env doctor on the uv tool install (02-steps2-5.txt)",
283
+ "behavior_text": "prints 'healthy' exit 0 but two '[FAIL] \u2026 pinned commit \u2026 unknown (docs/upstream-pins.md unreadable)' lines: the wheel lacks the pins file; the original tutorial text promised thirteen ok checks",
284
+ "contract_text": "the tutorial's prerequisites/steps name only what the records cover (h9)",
285
+ "evidence_type": "observation",
286
+ "strength": "execution",
287
+ "strength_basis": "reproduced on Spark; CLI defect deferred to its own PR (d5)",
288
+ "outcome": "fail",
289
+ "run": {
290
+ "timestamp": "2026-09-07T06:45:00+03:00",
291
+ "commit": "7495769"
292
+ },
293
+ "origin": "llm",
294
+ "status": "approved",
295
+ "superseded": false,
296
+ "seq": 17
297
+ },
298
+ {
299
+ "id": "e12",
300
+ "obligation_ref": "o12",
301
+ "test_ref": "gh pr list (none opened yet); git branch state",
302
+ "behavior_text": "no PR exists on either repo by design (d1: validate/summarize before any PR); Thor/Orin records do not exist yet (t8)",
303
+ "contract_text": "done when all three records are on main, Thor's seat0 session is thor-owned, and the jetson-ai-lab PR URL exists (h8)",
304
+ "evidence_type": "observation",
305
+ "strength": "coverage",
306
+ "strength_basis": "not yet checkable; reported unmet, not pending-as-pass",
307
+ "outcome": "fail",
308
+ "run": {
309
+ "timestamp": "2026-09-07T06:45:00+03:00",
310
+ "commit": "7495769"
311
+ },
312
+ "origin": "llm",
313
+ "status": "approved",
314
+ "superseded": false,
315
+ "seq": 18
316
+ },
317
+ {
318
+ "id": "e13",
319
+ "obligation_ref": "o2",
320
+ "test_ref": "existence of docs/verification/2026-09-07-{thor,orin}-retest.md",
321
+ "behavior_text": "the Thor and Orin 2026-09-07 records do not exist yet, so the 'all three 2026-09-07 records name 0.9.4' half of h18 cannot be checked; e2 covers the Spark record and the PyPI install only",
322
+ "contract_text": "the install command names an exact version that appears as the CLI version in all three 2026-09-07 records (h18)",
323
+ "evidence_type": "observation",
324
+ "strength": "coverage",
325
+ "strength_basis": "Qodo review on PR #8 (comment 3946429053): e2's pass overstated the three-record obligation; filed as the unmet half, pending operator task t8",
326
+ "outcome": "fail",
327
+ "run": {
328
+ "timestamp": "2026-09-07T07:20:00+03:00",
329
+ "commit": "5e18435"
330
+ },
331
+ "origin": "llm",
332
+ "status": "proposed",
333
+ "superseded": false,
334
+ "seq": 19
335
+ }
336
+ ],
337
+ "deltas": [
338
+ {
339
+ "id": "b1",
340
+ "kind": "amended",
341
+ "behavior_text": "Spark training tab cites 16 s on a warm cache beside the 58.6 s cold figure and names the out-of-memory signature beside a resident GPU tenant",
342
+ "caused_by": [
343
+ "d2"
344
+ ],
345
+ "evidence_refs": [
346
+ "e6"
347
+ ],
348
+ "origin": "llm",
349
+ "status": "approved",
350
+ "superseded": false
351
+ },
352
+ {
353
+ "id": "b2",
354
+ "kind": "added",
355
+ "behavior_text": "docs/tools/check_tutorial.py: fenced-command vs record checker with nocheck fences, identity scan, image listing; 11 tests",
356
+ "caused_by": [
357
+ "c24"
358
+ ],
359
+ "evidence_refs": [
360
+ "e1"
361
+ ],
362
+ "origin": "llm",
363
+ "status": "approved",
364
+ "superseded": false
365
+ },
366
+ {
367
+ "id": "b3",
368
+ "kind": "amended",
369
+ "behavior_text": "Step 9's sample output replaced with the CLI's real stderr lines and JSON metrics summary; Step 8 documents record's two expected record-source-absent drops",
370
+ "caused_by": [
371
+ "c21"
372
+ ],
373
+ "evidence_refs": [
374
+ "e6"
375
+ ],
376
+ "origin": "llm",
377
+ "status": "approved",
378
+ "superseded": false
379
+ },
380
+ {
381
+ "id": "b4",
382
+ "kind": "removed",
383
+ "behavior_text": "Two env up variant lines lost their trailing # comments so they match the records verbatim",
384
+ "caused_by": [
385
+ "c27"
386
+ ],
387
+ "evidence_refs": [
388
+ "e1"
389
+ ],
390
+ "origin": "llm",
391
+ "status": "approved",
392
+ "superseded": false
393
+ },
394
+ {
395
+ "id": "b5",
396
+ "kind": "amended",
397
+ "behavior_text": "Tutorial Step 5 documents the wheel doctor's two [FAIL] pin lines under a healthy verdict instead of promising thirteen ok checks",
398
+ "caused_by": [
399
+ "d5"
400
+ ],
401
+ "evidence_refs": [
402
+ "e11"
403
+ ],
404
+ "origin": "llm",
405
+ "status": "proposed",
406
+ "superseded": false
407
+ },
408
+ {
409
+ "id": "b6",
410
+ "kind": "added",
411
+ "behavior_text": "Tutorial warns that a locking desktop session kills the simulator body, tells readers env up returns before the IMU is ready, and adds two troubleshooting entries (monitor hang / bus write failed; smoke OOM)",
412
+ "caused_by": [
413
+ "d3"
414
+ ],
415
+ "evidence_refs": [
416
+ "e6"
417
+ ],
418
+ "origin": "llm",
419
+ "status": "proposed",
420
+ "superseded": false
421
+ }
422
+ ],
423
+ "supersessions": []
424
+ }