microphone-cli 0.8.0__tar.gz → 0.9.0__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 (184) hide show
  1. microphone_cli-0.9.0/.devague/current +1 -0
  2. microphone_cli-0.9.0/.devague/current_plan +1 -0
  3. microphone_cli-0.9.0/.devague/deliveries/microphone-domain.json +39 -0
  4. microphone_cli-0.9.0/.devague/frames/microphone-domain.json +1027 -0
  5. microphone_cli-0.9.0/.devague/plans/microphone-domain.json +682 -0
  6. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.gitignore +5 -0
  7. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/CHANGELOG.md +40 -0
  8. microphone_cli-0.9.0/CLAUDE.md +263 -0
  9. microphone_cli-0.9.0/PKG-INFO +239 -0
  10. microphone_cli-0.9.0/README.md +222 -0
  11. microphone_cli-0.9.0/docs/acceptance-microphone-domain.md +152 -0
  12. microphone_cli-0.9.0/docs/plans/2026-09-06-microphone-domain-split.md +183 -0
  13. microphone_cli-0.9.0/docs/plans/2026-09-06-microphone-domain.md +131 -0
  14. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/docs/skill-sources.md +2 -0
  15. microphone_cli-0.9.0/docs/specs/2026-09-06-microphone-domain.md +173 -0
  16. microphone_cli-0.9.0/docs/xvf3800-parameters.md +86 -0
  17. microphone_cli-0.9.0/microphone_cli/__init__.py +19 -0
  18. microphone_cli-0.9.0/microphone_cli/access.py +387 -0
  19. microphone_cli-0.9.0/microphone_cli/activation.py +266 -0
  20. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/cli/__init__.py +58 -13
  21. microphone_cli-0.9.0/microphone_cli/cli/_commands/__init__.py +5 -0
  22. microphone_cli-0.9.0/microphone_cli/cli/_commands/array.py +563 -0
  23. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/cli/_commands/cli.py +5 -5
  24. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/cli/_commands/doctor.py +6 -3
  25. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/cli/_commands/explain.py +2 -2
  26. microphone_cli-0.9.0/microphone_cli/cli/_commands/gain.py +348 -0
  27. microphone_cli-0.9.0/microphone_cli/cli/_commands/inspect.py +245 -0
  28. microphone_cli-0.9.0/microphone_cli/cli/_commands/learn.py +307 -0
  29. microphone_cli-0.9.0/microphone_cli/cli/_commands/list_devices.py +144 -0
  30. microphone_cli-0.9.0/microphone_cli/cli/_commands/overview.py +178 -0
  31. microphone_cli-0.9.0/microphone_cli/cli/_commands/param.py +367 -0
  32. microphone_cli-0.9.0/microphone_cli/cli/_commands/record.py +743 -0
  33. microphone_cli-0.9.0/microphone_cli/cli/_commands/stream.py +820 -0
  34. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/cli/_commands/whoami.py +4 -3
  35. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/cli/_errors.py +3 -1
  36. microphone_cli-0.9.0/microphone_cli/devices.py +530 -0
  37. microphone_cli-0.9.0/microphone_cli/engine.py +427 -0
  38. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/explain/__init__.py +1 -1
  39. microphone_cli-0.9.0/microphone_cli/explain/catalog.py +769 -0
  40. microphone_cli-0.9.0/microphone_cli/mixer.py +289 -0
  41. microphone_cli-0.9.0/microphone_cli/usbctl.py +273 -0
  42. microphone_cli-0.9.0/microphone_cli/xvf3800.py +554 -0
  43. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/pyproject.toml +1 -1
  44. microphone_cli-0.9.0/scripts/acceptance/blind-consumer.sh +77 -0
  45. microphone_cli-0.9.0/scripts/acceptance/run.sh +117 -0
  46. microphone_cli-0.9.0/tests/fixtures/host-baseline/proc/asound/card0/pcm3p/info +11 -0
  47. microphone_cli-0.9.0/tests/fixtures/host-baseline/proc/asound/card1/pcm0c/info +11 -0
  48. microphone_cli-0.9.0/tests/fixtures/host-baseline/proc/asound/card1/pcm0p/info +11 -0
  49. microphone_cli-0.9.0/tests/fixtures/host-baseline/proc/asound/card1/stream0 +19 -0
  50. microphone_cli-0.9.0/tests/fixtures/host-baseline/proc/asound/cards +4 -0
  51. microphone_cli-0.9.0/tests/fixtures/host-baseline/run/user/1000/pipewire-0 +0 -0
  52. microphone_cli-0.9.0/tests/fixtures/host-baseline/sys/class/sound/card0/id +1 -0
  53. microphone_cli-0.9.0/tests/fixtures/host-baseline/sys/class/sound/card1/id +1 -0
  54. microphone_cli-0.9.0/tests/fixtures/host-baseline/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/idProduct +1 -0
  55. microphone_cli-0.9.0/tests/fixtures/host-baseline/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/idVendor +1 -0
  56. microphone_cli-0.9.0/tests/fixtures/host-baseline/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/manufacturer +1 -0
  57. microphone_cli-0.9.0/tests/fixtures/host-baseline/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/product +1 -0
  58. microphone_cli-0.9.0/tests/fixtures/host-baseline/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/serial +1 -0
  59. microphone_cli-0.9.0/tests/fixtures/host-renumbered/proc/asound/card0/pcm3p/info +11 -0
  60. microphone_cli-0.9.0/tests/fixtures/host-renumbered/proc/asound/card2/pcm0c/info +11 -0
  61. microphone_cli-0.9.0/tests/fixtures/host-renumbered/proc/asound/card2/pcm0p/info +11 -0
  62. microphone_cli-0.9.0/tests/fixtures/host-renumbered/proc/asound/card2/stream0 +19 -0
  63. microphone_cli-0.9.0/tests/fixtures/host-renumbered/proc/asound/cards +4 -0
  64. microphone_cli-0.9.0/tests/fixtures/host-renumbered/run/user/1000/pipewire-0 +0 -0
  65. microphone_cli-0.9.0/tests/fixtures/host-renumbered/sys/class/sound/card0/id +1 -0
  66. microphone_cli-0.9.0/tests/fixtures/host-renumbered/sys/class/sound/card2/id +1 -0
  67. microphone_cli-0.9.0/tests/fixtures/host-renumbered/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/idProduct +1 -0
  68. microphone_cli-0.9.0/tests/fixtures/host-renumbered/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/idVendor +1 -0
  69. microphone_cli-0.9.0/tests/fixtures/host-renumbered/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/manufacturer +1 -0
  70. microphone_cli-0.9.0/tests/fixtures/host-renumbered/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/product +1 -0
  71. microphone_cli-0.9.0/tests/fixtures/host-renumbered/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/serial +1 -0
  72. microphone_cli-0.9.0/tests/fixtures/respeaker/proc/asound/card0/pcm0c/info +11 -0
  73. microphone_cli-0.9.0/tests/fixtures/respeaker/proc/asound/cards +2 -0
  74. microphone_cli-0.9.0/tests/fixtures/respeaker/sys/class/sound/card0/id +1 -0
  75. microphone_cli-0.9.0/tests/fixtures/respeaker/sys/devices/platform/NVDA8000:01/usb3/3-1/idProduct +1 -0
  76. microphone_cli-0.9.0/tests/fixtures/respeaker/sys/devices/platform/NVDA8000:01/usb3/3-1/idVendor +1 -0
  77. microphone_cli-0.9.0/tests/fixtures/two-arrays/proc/asound/card0/pcm0c/info +11 -0
  78. microphone_cli-0.9.0/tests/fixtures/two-arrays/proc/asound/card0/stream0 +19 -0
  79. microphone_cli-0.9.0/tests/fixtures/two-arrays/proc/asound/card1/pcm0c/info +11 -0
  80. microphone_cli-0.9.0/tests/fixtures/two-arrays/proc/asound/card1/stream0 +19 -0
  81. microphone_cli-0.9.0/tests/fixtures/two-arrays/proc/asound/cards +4 -0
  82. microphone_cli-0.9.0/tests/fixtures/two-arrays/run/user/1000/pipewire-0 +0 -0
  83. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/class/sound/card0/id +1 -0
  84. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/class/sound/card1/id +1 -0
  85. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/idProduct +1 -0
  86. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/idVendor +1 -0
  87. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/manufacturer +1 -0
  88. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/product +1 -0
  89. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.1/serial +1 -0
  90. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/idProduct +1 -0
  91. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/idVendor +1 -0
  92. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/manufacturer +1 -0
  93. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/product +1 -0
  94. microphone_cli-0.9.0/tests/fixtures/two-arrays/sys/devices/platform/NVDA8000:02/usb5/5-1/5-1.3/serial +1 -0
  95. microphone_cli-0.9.0/tests/test_access.py +255 -0
  96. microphone_cli-0.9.0/tests/test_activation.py +361 -0
  97. microphone_cli-0.9.0/tests/test_array.py +585 -0
  98. microphone_cli-0.9.0/tests/test_cli.py +363 -0
  99. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/tests/test_cli_introspection.py +5 -5
  100. microphone_cli-0.9.0/tests/test_devices.py +215 -0
  101. microphone_cli-0.9.0/tests/test_engine.py +425 -0
  102. microphone_cli-0.9.0/tests/test_gain.py +480 -0
  103. microphone_cli-0.9.0/tests/test_inspect.py +246 -0
  104. microphone_cli-0.9.0/tests/test_list.py +117 -0
  105. microphone_cli-0.9.0/tests/test_param.py +428 -0
  106. microphone_cli-0.9.0/tests/test_record.py +589 -0
  107. microphone_cli-0.9.0/tests/test_repo_hygiene.py +47 -0
  108. microphone_cli-0.9.0/tests/test_stream.py +511 -0
  109. microphone_cli-0.9.0/tests/test_usbctl.py +215 -0
  110. microphone_cli-0.9.0/tests/test_xvf3800.py +396 -0
  111. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/uv.lock +31 -31
  112. microphone_cli-0.8.0/CLAUDE.md +0 -28
  113. microphone_cli-0.8.0/PKG-INFO +0 -76
  114. microphone_cli-0.8.0/README.md +0 -59
  115. microphone_cli-0.8.0/microphone_cli/__init__.py +0 -13
  116. microphone_cli-0.8.0/microphone_cli/cli/_commands/__init__.py +0 -1
  117. microphone_cli-0.8.0/microphone_cli/cli/_commands/learn.py +0 -88
  118. microphone_cli-0.8.0/microphone_cli/cli/_commands/overview.py +0 -112
  119. microphone_cli-0.8.0/microphone_cli/explain/catalog.py +0 -130
  120. microphone_cli-0.8.0/tests/test_cli.py +0 -115
  121. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/agent-config/SKILL.md +0 -0
  122. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  123. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/agent-config/scripts/show.sh +0 -0
  124. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/ask-colleague/SKILL.md +0 -0
  125. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  126. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  127. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  128. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  129. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  130. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  131. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/challenge/SKILL.md +0 -0
  132. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/challenge/scripts/challenge.sh +0 -0
  133. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/cicd/SKILL.md +0 -0
  134. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  135. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  136. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  137. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  138. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  139. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/communicate/SKILL.md +0 -0
  140. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  141. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  142. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  143. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  144. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  145. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  146. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/deviate/SKILL.md +0 -0
  147. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/deviate/scripts/deviate.sh +0 -0
  148. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  149. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  150. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  151. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  152. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/recall/SKILL.md +0 -0
  153. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/recall/scripts/recall.sh +0 -0
  154. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/remember/SKILL.md +0 -0
  155. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/remember/scripts/remember.sh +0 -0
  156. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/run-tests/SKILL.md +0 -0
  157. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
  158. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/scope/SKILL.md +0 -0
  159. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/scope/scripts/scope.sh +0 -0
  160. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
  161. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  162. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  163. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  164. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  165. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/summarize-delivery/scripts/summarize-delivery.sh +0 -0
  166. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/think/SKILL.md +0 -0
  167. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/think/scripts/think.sh +0 -0
  168. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/validate-delivery/SKILL.md +0 -0
  169. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/validate-delivery/scripts/validate-delivery.sh +0 -0
  170. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/version-bump/SKILL.md +0 -0
  171. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
  172. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.claude/skills.local.yaml.example +0 -0
  173. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.flake8 +0 -0
  174. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.github/workflows/publish.yml +0 -0
  175. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.github/workflows/tests.yml +0 -0
  176. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/.markdownlint-cli2.yaml +0 -0
  177. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/AGENTS.colleague.md +0 -0
  178. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/LICENSE +0 -0
  179. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/culture.yaml +0 -0
  180. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/docs/steward/steward-suggestions.md +0 -0
  181. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/__main__.py +0 -0
  182. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/microphone_cli/cli/_output.py +0 -0
  183. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/sonar-project.properties +0 -0
  184. {microphone_cli-0.8.0 → microphone_cli-0.9.0}/tests/__init__.py +0 -0
@@ -0,0 +1 @@
1
+ microphone-domain
@@ -0,0 +1 @@
1
+ microphone-domain
@@ -0,0 +1,39 @@
1
+ {
2
+ "plan_slug": "microphone-domain",
3
+ "schema_version": 2,
4
+ "created": "2026-09-06T19:58:21Z",
5
+ "updated": "2026-09-06T20:07:24Z",
6
+ "deviations": [
7
+ {
8
+ "id": "d1",
9
+ "what": "Wave-4 acceptance target is a Seeed ReSpeaker XVF3800 (XIAO variant) on the dev host, id 2886:001a serial 114993702263100642, reflashed from I2S to USB firmware v2.1.0 via dfu-util, instead of the Reachy Mini Lite (38fb:1001) the plan named; the Reachy Mini's array is on its own Pi at 192.168.1.162 and was never reachable from this host",
10
+ "task_ref": "t13",
11
+ "reason": "the connected robot's USB-C is a host port (Reachy Mini, not Lite); the user chose to bring up a separate ReSpeaker board and asked for the firmware update; issue #4 tracks CLI support for the DFU path",
12
+ "affects": [
13
+ "t13"
14
+ ],
15
+ "origin": "llm",
16
+ "status": "approved",
17
+ "classification": "acceptable",
18
+ "seq": 1
19
+ },
20
+ {
21
+ "id": "d2",
22
+ "what": "Seeed's USB firmware v2.1.0 on the 2886:001a board does not implement DOA_VALUE_RADIANS (resid 20 cmd 19) and its DOA_VALUE (20/18) is two uint16 values (degrees 0-359, speech flag), not two uint32; 'array doa' fails with firmware status 66 while every other probed parameter (VERSION, BLD_*, AEC_*, AUDIO_MGR_MIC_GAIN, LED/GPO) reads correctly through the stdlib usbdevfs path",
23
+ "task_ref": "t13",
24
+ "reason": "the vendored PARAMETERS table is reachy_mini's 38fb:1001 map; the spec parked this exact unknown (v4) and hardware now answers it: the map is firmware-specific. Needs a uint16 type and a per-firmware DoA source before array doa can pass acceptance on this board",
25
+ "affects": [
26
+ "t13",
27
+ "t7",
28
+ "t3"
29
+ ],
30
+ "origin": "llm",
31
+ "status": "approved",
32
+ "classification": "needs-follow-up",
33
+ "seq": 2
34
+ }
35
+ ],
36
+ "evidence": [],
37
+ "deltas": [],
38
+ "supersessions": []
39
+ }