lobes-cli 0.69.2__tar.gz → 0.71.2__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 (782) hide show
  1. lobes_cli-0.71.2/.devague/current +1 -0
  2. lobes_cli-0.71.2/.devague/current_plan +1 -0
  3. lobes_cli-0.71.2/.devague/frames/peer-only-replica-pools.json +617 -0
  4. lobes_cli-0.71.2/.devague/plans/peer-only-replica-pools.json +475 -0
  5. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/CHANGELOG.md +52 -0
  6. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/CLAUDE.md +46 -0
  7. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/PKG-INFO +1 -1
  8. lobes_cli-0.71.2/docs/deliveries/2026-08-30-peer-only-replica-pools.md +158 -0
  9. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deployment-shapes.md +8 -1
  10. lobes_cli-0.71.2/docs/evidence/2026-08-30-accept-peer-only-pool-orin.txt +311 -0
  11. lobes_cli-0.71.2/docs/evidence/2026-08-30-baseline-orin-cortex-pinned.txt +126 -0
  12. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/gateway-fleet.md +93 -0
  13. lobes_cli-0.71.2/docs/plans/2026-08-30-peer-only-replica-pools.md +107 -0
  14. lobes_cli-0.71.2/docs/specs/2026-08-30-peer-only-replica-pools.md +139 -0
  15. lobes_cli-0.71.2/lobes/cli/_commands/_role_probe.py +320 -0
  16. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/capabilities.py +15 -1
  17. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/doctor.py +73 -0
  18. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_replicas.py +119 -3
  19. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_routing.py +36 -7
  20. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/server.py +375 -12
  21. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/shapes.py +6 -4
  22. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/roles.py +87 -5
  23. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/pyproject.toml +1 -1
  24. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/no-pool-gateway.json +3 -3
  25. lobes_cli-0.71.2/tests/test_doctor_role_command.py +110 -0
  26. lobes_cli-0.71.2/tests/test_doctor_role_probe.py +245 -0
  27. lobes_cli-0.71.2/tests/test_gateway_peer_only_pool.py +938 -0
  28. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_proxy_integration.py +4 -4
  29. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_roles.py +68 -3
  30. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/uv.lock +11 -11
  31. lobes_cli-0.69.2/.devague/current +0 -1
  32. lobes_cli-0.69.2/.devague/current_plan +0 -1
  33. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.agex/data/pr/events.jsonl +0 -0
  34. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/ask-colleague/SKILL.md +0 -0
  35. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  36. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  37. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  38. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  39. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  40. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  41. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/challenge/SKILL.md +0 -0
  42. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/cicd/SKILL.md +0 -0
  43. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  44. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  45. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  46. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  47. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  48. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/communicate/SKILL.md +0 -0
  49. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  50. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  51. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  52. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  53. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  54. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/deviate/SKILL.md +0 -0
  55. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  56. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  57. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/model-runner/SKILL.md +0 -0
  58. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/model-runner/scripts/model-runner.sh +0 -0
  59. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/recall/SKILL.md +0 -0
  60. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/recall/scripts/recall.sh +0 -0
  61. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/remember/SKILL.md +0 -0
  62. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/remember/scripts/remember.sh +0 -0
  63. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/run-tests/SKILL.md +0 -0
  64. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
  65. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/scope/SKILL.md +0 -0
  66. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
  67. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  68. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  69. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  70. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  71. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/think/SKILL.md +0 -0
  72. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/think/scripts/think.sh +0 -0
  73. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/version-bump/SKILL.md +0 -0
  74. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
  75. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.claude/skills.local.yaml.example +0 -0
  76. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/capacity-relative-pool-routing.json +0 -0
  77. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/cortex-replica-pool-199.json +0 -0
  78. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/deployment-lock-per-box.json +0 -0
  79. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/dspark-speculation-on-the-spark-cortex.json +0 -0
  80. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  81. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/hand-lobe-lfm2-5-1-2b.json +0 -0
  82. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/lightning-on-orin.json +0 -0
  83. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  84. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/nemotron-lightning-worker.json +0 -0
  85. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/qwen3-8-gguf-llamacpp.json +0 -0
  86. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  87. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/thor-cortex-speculation.json +0 -0
  88. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/deliveries/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  89. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/capacity-relative-pool-routing.json +0 -0
  90. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/chatterbox-on-thor-sm-110.json +0 -0
  91. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/compose-chain-unification-init-repair-doctor-stale.json +0 -0
  92. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/cortex-replica-pool-199.json +0 -0
  93. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/deployment-lock-per-box.json +0 -0
  94. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/dspark-speculation-on-the-spark-cortex.json +0 -0
  95. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  96. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/flash-next-on-vllm.json +0 -0
  97. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/hand-lobe-lfm2-5-1-2b.json +0 -0
  98. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lightning-on-orin.json +0 -0
  99. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  100. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  101. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  102. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  103. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  104. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  105. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  106. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  107. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  108. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  109. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  110. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  111. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  112. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  113. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  114. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  115. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  116. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe.json +0 -0
  117. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  118. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/nemotron-lightning-worker.json +0 -0
  119. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/proxy-lobes-pairwise-auth.json +0 -0
  120. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/qwen3-8-27b-gguf-on-the-spark.json +0 -0
  121. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/qwen3-8-cortex-upgrade.json +0 -0
  122. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/qwen3-8-flash-next-gguf-candidate.json +0 -0
  123. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/qwen3-8-gguf-llamacpp.json +0 -0
  124. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  125. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/realtime-ws-server-vad-149.json +0 -0
  126. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/stt-readiness-truth-155.json +0 -0
  127. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/targeted-ops-and-honest-streams.json +0 -0
  128. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  129. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/thor-cortex-speculation.json +0 -0
  130. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
  131. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  132. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/frames/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  133. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/capacity-relative-pool-routing.json +0 -0
  134. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/compose-chain-unification-init-repair-doctor-stale.json +0 -0
  135. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/cortex-replica-pool-199.json +0 -0
  136. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/deployment-lock-per-box.json +0 -0
  137. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/dspark-speculation-on-the-spark-cortex.json +0 -0
  138. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
  139. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/hand-lobe-lfm2-5-1-2b.json +0 -0
  140. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lightning-on-orin.json +0 -0
  141. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  142. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
  143. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  144. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  145. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  146. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  147. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  148. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  149. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  150. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  151. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  152. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  153. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  154. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  155. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  156. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  157. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  158. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  159. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/nemotron-lightning-worker.json +0 -0
  160. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/proxy-lobes-pairwise-auth.json +0 -0
  161. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/qwen3-8-cortex-upgrade.json +0 -0
  162. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/qwen3-8-flash-next-gguf-candidate.json +0 -0
  163. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/qwen3-8-gguf-llamacpp.json +0 -0
  164. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/realtime-voice-to-voice-astro-test-site-151.json +0 -0
  165. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/realtime-ws-server-vad-149.json +0 -0
  166. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/stt-readiness-truth-155.json +0 -0
  167. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  168. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/thor-cortex-speculation.json +0 -0
  169. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
  170. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  171. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.devague/plans/unsloth-qat-senses-first-class-orin-variation.json +0 -0
  172. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.eidetic/memory/colleague__public.jsonl +0 -0
  173. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.eidetic/memory/default__public.jsonl +0 -0
  174. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.eidetic/memory/lobes__public.jsonl +0 -0
  175. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.flake8 +0 -0
  176. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.github/workflows/publish.yml +0 -0
  177. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.github/workflows/tests.yml +0 -0
  178. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.gitignore +0 -0
  179. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/.markdownlint-cli2.yaml +0 -0
  180. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/AGENTS.md +0 -0
  181. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/LICENSE +0 -0
  182. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/README.md +0 -0
  183. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/culture.yaml +0 -0
  184. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/deployments/README.md +0 -0
  185. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/deployments/VARIATION.template.md +0 -0
  186. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/chatterbox-tts.md +0 -0
  187. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/colleague-stack.md +0 -0
  188. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  189. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  190. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  191. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
  192. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-20-nemotron-lightning-worker.md +0 -0
  193. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  194. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-23-qwen3-8-gguf-llamacpp-deviation-ledger.md +0 -0
  195. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  196. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-25-cortex-replica-pool-199.md +0 -0
  197. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-25-lightning-on-orin.md +0 -0
  198. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-25-thor-cortex-speculation.md +0 -0
  199. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deliveries/2026-08-29-deployment-lock-per-box.md +0 -0
  200. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/deployment-lock.md +0 -0
  201. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/dspark-speculation.md +0 -0
  202. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/durable-logs.md +0 -0
  203. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-14-accept-referral-thor.txt +0 -0
  204. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-14-accept-spark-lobe-gb10.txt +0 -0
  205. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-14-accept-thor-lobe-live-referral-thor.txt +0 -0
  206. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-14-accept-thor-lobe-thor.txt +0 -0
  207. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-14-strict-tools-spark-lobe-spark.txt +0 -0
  208. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-16-proxy-lobes-live-spark-thor.txt +0 -0
  209. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-17-accept-muse-tool-calling-thor.txt +0 -0
  210. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-20-accept-embed-deep-gb10.txt +0 -0
  211. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-21-accept-realtime-spark.txt +0 -0
  212. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-21-accept-voice-loop-spark.txt +0 -0
  213. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-22-accept-realtime-voice-to-voice-spark.txt +0 -0
  214. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-25-accept-by-proxy-spark-f8a9.txt +0 -0
  215. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-31-accept-multimodal-cortex-spark.txt +0 -0
  216. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-31-accept-worker-proxy-spark.txt +0 -0
  217. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-07-31-accept-worker-thor.txt +0 -0
  218. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-04-accept-senses-unsloth-orin.txt +0 -0
  219. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-10-hand-lobe-budget-derivation.txt +0 -0
  220. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-10-partial-hand-orin.txt +0 -0
  221. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-10-partial-hand-spark.txt +0 -0
  222. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-19-accept-qwen38-1m-spark.txt +0 -0
  223. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-19-baseline-qwen3.6-cortex-spark.txt +0 -0
  224. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-19-spike-qwen3.8-official-nightly-spark.txt +0 -0
  225. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-accept-cortex-local-thor.txt +0 -0
  226. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-accept-cortex-repoint-orin.txt +0 -0
  227. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-accept-cortex-repoint-thor.txt +0 -0
  228. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-accept-dual-cortex-mesh.txt +0 -0
  229. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-accept-hand-spark.txt +0 -0
  230. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-accept-worker-hand-spark.txt +0 -0
  231. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-baseline-worker-qwen35b-thor.txt +0 -0
  232. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-hand-thor-blocked-reattributed.txt +0 -0
  233. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-spike-lightning-thor-no-go.txt +0 -0
  234. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-20-spike-nightly-sm110-thor.txt +0 -0
  235. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-21-measure-reasoning-effort-cortex-spark.txt +0 -0
  236. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-23-spike-qwen38-gguf-llamacpp-orin.txt +0 -0
  237. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-24-spike-dspark-cortex-spark.txt +0 -0
  238. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-accept-cortex-replica-pool-spark-thor.txt +0 -0
  239. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-accept-spark-lobe-dspark-render.txt +0 -0
  240. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-baseline-cortex-single-owner.txt +0 -0
  241. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-measure-associate-budget-orin.txt +0 -0
  242. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-orin-board-state-lightning-spikes.txt +0 -0
  243. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-spike-lightning-llamacpp-orin.txt +0 -0
  244. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-spike-lightning-vllm-orin.txt +0 -0
  245. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-25-spike-thor-cortex-speculation.txt +0 -0
  246. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-26-accept-orin-associate.txt +0 -0
  247. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-26-associate-gateway-auth-front.txt +0 -0
  248. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/2026-08-28-accept-capacity-relative-pool-thor-spark.txt +0 -0
  249. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/README-dspark-arms.md +0 -0
  250. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/README-realtime-acceptance.md +0 -0
  251. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-a16-dspark-262k.json +0 -0
  252. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-a16-none-262k.json +0 -0
  253. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-dspark-262k.json +0 -0
  254. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-dspark-768k.json +0 -0
  255. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-mtp-n2-262k.json +0 -0
  256. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-mtp-n2-768k.json +0 -0
  257. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-mtp-n2.json +0 -0
  258. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-none-262k.json +0 -0
  259. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/evidence/arm-none-768k.json +0 -0
  260. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/experiments/README.md +0 -0
  261. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/experiments/qwen3.8-flash-next-gguf-llamacpp-vllm.md +0 -0
  262. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/gemma-4-12b-nvfp4.md +0 -0
  263. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/gemma-4-12b-qat-w4a16.md +0 -0
  264. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/gemma-4-31b-nvfp4.md +0 -0
  265. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/gemma4-mtp-draft.md +0 -0
  266. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/image-ledger.md +0 -0
  267. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/lfm2.5-1.2b-hand.md +0 -0
  268. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/machine-profiles.md +0 -0
  269. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/measuring-lane-performance.md +0 -0
  270. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/mistral-small-3.2-24b-nvfp4.md +0 -0
  271. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/model-switch-playbook.md +0 -0
  272. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/nemotron-3.5-lightning-30b-a3b-nvfp4.md +0 -0
  273. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/openai-api.md +0 -0
  274. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/orin-associate-deployment.md +0 -0
  275. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/orin-profiles.md +0 -0
  276. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/parakeet-stt.md +0 -0
  277. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  278. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  279. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  280. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  281. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  282. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  283. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  284. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  285. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  286. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  287. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  288. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  289. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  290. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  291. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  292. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  293. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  294. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  295. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  296. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  297. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
  298. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  299. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-21-realtime-ws-server-vad-149.md +0 -0
  300. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-24-stt-readiness-truth-155.md +0 -0
  301. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
  302. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
  303. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
  304. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  305. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
  306. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
  307. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-20-nemotron-lightning-worker.md +0 -0
  308. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  309. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  310. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-25-cortex-replica-pool-199.md +0 -0
  311. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-25-lightning-on-orin.md +0 -0
  312. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-25-thor-cortex-speculation.md +0 -0
  313. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-27-capacity-relative-pool-routing.md +0 -0
  314. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/plans/2026-08-29-deployment-lock-per-box.md +0 -0
  315. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3-14b-nvfp4.md +0 -0
  316. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3-32b-nvfp4.md +0 -0
  317. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3-embedding-0.6b.md +0 -0
  318. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3-embedding-4b.md +0 -0
  319. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3-reranker-0.6b.md +0 -0
  320. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3.5-4b-minor.md +0 -0
  321. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3.6-27b-nvfp4-multimodal.md +0 -0
  322. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3.6-27b-nvfp4.md +0 -0
  323. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3.6-27b-text-nvfp4-mtp.md +0 -0
  324. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3.6-35b-a3b-nvfp4.md +0 -0
  325. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3.8-27b-gguf-llamacpp.md +0 -0
  326. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen3.8-27b-nvfp4.md +0 -0
  327. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/qwen38-rollout-notes.md +0 -0
  328. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/realtime-pipeline.md +0 -0
  329. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/secret-rotation.md +0 -0
  330. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/skill-sources.md +0 -0
  331. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  332. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  333. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  334. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  335. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  336. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  337. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  338. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  339. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  340. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  341. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  342. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  343. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  344. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  345. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  346. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  347. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  348. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  349. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  350. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  351. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
  352. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
  353. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-21-realtime-ws-server-vad-149.md +0 -0
  354. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-24-stt-readiness-truth-155.md +0 -0
  355. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
  356. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
  357. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
  358. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
  359. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-09-hand-lobe-lfm2-5-1-2b.md +0 -0
  360. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
  361. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-20-nemotron-lightning-worker.md +0 -0
  362. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
  363. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
  364. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-25-cortex-replica-pool-199.md +0 -0
  365. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-25-lightning-on-orin.md +0 -0
  366. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-25-thor-cortex-speculation.md +0 -0
  367. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-27-capacity-relative-pool-routing.md +0 -0
  368. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-27-flash-next-on-vllm.md +0 -0
  369. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-27-qwen3-8-flash-next-gguf-candidate.md +0 -0
  370. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/specs/2026-08-29-deployment-lock-per-box.md +0 -0
  371. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/superpowers/plans/2026-05-22-scaffold-cli-sibling.md +0 -0
  372. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/superpowers/specs/2026-05-22-scaffold-cli-sibling-design.md +0 -0
  373. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/tensorrt-llm-investigation.md +0 -0
  374. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/tuning-profiles.md +0 -0
  375. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/validate-tiers.md +0 -0
  376. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/vllm-nightly-migration.md +0 -0
  377. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/docs/worker-lightning-rollout-notes.md +0 -0
  378. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/examples/minor-evals/smoke.jsonl +0 -0
  379. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/__init__.py +0 -0
  380. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/__main__.py +0 -0
  381. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/_metrics.py +0 -0
  382. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/assess.py +0 -0
  383. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/bench/__init__.py +0 -0
  384. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/bench/cat_probe.py +0 -0
  385. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/bench/cat_score.py +0 -0
  386. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/bench/compare.py +0 -0
  387. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/bench/report.py +0 -0
  388. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/catalog.py +0 -0
  389. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/__init__.py +0 -0
  390. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/__init__.py +0 -0
  391. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/assess.py +0 -0
  392. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/benchmark.py +0 -0
  393. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/calibrate.py +0 -0
  394. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/cli.py +0 -0
  395. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/eval.py +0 -0
  396. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/explain.py +0 -0
  397. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/fleet.py +0 -0
  398. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/init.py +0 -0
  399. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/learn.py +0 -0
  400. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/logs.py +0 -0
  401. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/measure.py +0 -0
  402. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/overview.py +0 -0
  403. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/route.py +0 -0
  404. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/run.py +0 -0
  405. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/serve.py +0 -0
  406. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/status.py +0 -0
  407. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/stop.py +0 -0
  408. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/switch.py +0 -0
  409. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/tunnel.py +0 -0
  410. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/up.py +0 -0
  411. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_commands/whoami.py +0 -0
  412. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_errors.py +0 -0
  413. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_live.py +0 -0
  414. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_output.py +0 -0
  415. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/cli/_runtime_ops.py +0 -0
  416. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/explain/__init__.py +0 -0
  417. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/explain/catalog.py +0 -0
  418. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/__init__.py +0 -0
  419. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/__main__.py +0 -0
  420. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_authlog.py +0 -0
  421. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_config.py +0 -0
  422. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_pressure_policy.py +0 -0
  423. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_readiness.py +0 -0
  424. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_realtime.py +0 -0
  425. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_selection.py +0 -0
  426. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/gateway/_tier_request.py +0 -0
  427. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/__init__.py +0 -0
  428. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/_registry.py +0 -0
  429. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/_strategy.py +0 -0
  430. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/_traits.py +0 -0
  431. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/blackwell.py +0 -0
  432. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/generic.py +0 -0
  433. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/orin.py +0 -0
  434. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/spark.py +0 -0
  435. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/machines/thor.py +0 -0
  436. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/minor/__init__.py +0 -0
  437. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/minor/_client.py +0 -0
  438. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/minor/governance.py +0 -0
  439. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/__init__.py +0 -0
  440. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin/__init__.py +0 -0
  441. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin/base.toml +0 -0
  442. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin/orin.toml +0 -0
  443. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin/spark.toml +0 -0
  444. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin/thor.toml +0 -0
  445. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/__init__.py +0 -0
  446. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/machine-as-brain.toml +0 -0
  447. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/orin-associate.toml +0 -0
  448. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/orin-cortex.toml +0 -0
  449. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/orin-lobe.toml +0 -0
  450. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/orin-small.toml +0 -0
  451. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/spark-lobe.toml +0 -0
  452. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/thor-lobe.toml +0 -0
  453. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/thor-muse.toml +0 -0
  454. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/builtin_shapes/thor-worker.toml +0 -0
  455. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/loader.py +0 -0
  456. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/render.py +0 -0
  457. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/schema.py +0 -0
  458. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/profiles/shape_render.py +0 -0
  459. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/__init__.py +0 -0
  460. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/__main__.py +0 -0
  461. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_conversation.py +0 -0
  462. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_floor.py +0 -0
  463. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_pcm.py +0 -0
  464. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_readiness.py +0 -0
  465. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_segmenter.py +0 -0
  466. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_session.py +0 -0
  467. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_settings.py +0 -0
  468. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_turn.py +0 -0
  469. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/_wire.py +0 -0
  470. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/app.py +0 -0
  471. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/audio_facade.py +0 -0
  472. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/chatterbox_server.py +0 -0
  473. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/protocol.py +0 -0
  474. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/realtime/tts_client.py +0 -0
  475. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/roles_measure.py +0 -0
  476. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/__init__.py +0 -0
  477. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_buildability.py +0 -0
  478. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_compose.py +0 -0
  479. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_detect.py +0 -0
  480. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_env.py +0 -0
  481. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_health.py +0 -0
  482. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_lock.py +0 -0
  483. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_parser.py +0 -0
  484. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_pressure.py +0 -0
  485. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/runtime/_tunnel.py +0 -0
  486. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/__init__.py +0 -0
  487. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/cf-tunnel.env.example +0 -0
  488. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/docker-compose.yml +0 -0
  489. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/env.example +0 -0
  490. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/Dockerfile.chatterbox +0 -0
  491. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/Dockerfile.gateway +0 -0
  492. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/Dockerfile.parakeet +0 -0
  493. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/Dockerfile.realtime +0 -0
  494. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/Dockerfile.vllm-gemma4 +0 -0
  495. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/__init__.py +0 -0
  496. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/_readiness.py +0 -0
  497. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/docker-compose.audio.yml +0 -0
  498. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/docker-compose.yml +0 -0
  499. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/env.audio.example +0 -0
  500. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/env.example +0 -0
  501. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/fleet/listen_server.py +0 -0
  502. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/templates/mg-logwrap.sh +0 -0
  503. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/variation.py +0 -0
  504. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/variation_catalog.py +0 -0
  505. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/vllm_plugins/__init__.py +0 -0
  506. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/lobes/vllm_plugins/qwen3_thinking_tool_parser.py +0 -0
  507. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/packaging/model-gear/README.md +0 -0
  508. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/packaging/model-gear/pyproject.toml +0 -0
  509. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/accept-by-proxy.sh +0 -0
  510. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/accept-shape.sh +0 -0
  511. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/audio-smoke.py +0 -0
  512. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/gen-api-key.py +0 -0
  513. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/live-check.sh +0 -0
  514. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/prefill-depth-curve.py +0 -0
  515. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/realtime-smoke.py +0 -0
  516. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/realtime-voice-loop.py +0 -0
  517. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/scan_deployment_secrets.py +0 -0
  518. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/spec-arms.py +0 -0
  519. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/spike-preflight.sh +0 -0
  520. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/scripts/validate-tiers.sh +0 -0
  521. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/.env.example +0 -0
  522. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/.gitignore +0 -0
  523. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/.nvmrc +0 -0
  524. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/README.md +0 -0
  525. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/astro.config.mjs +0 -0
  526. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/package-lock.json +0 -0
  527. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/package.json +0 -0
  528. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/proxy/gateway-proxy.mjs +0 -0
  529. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/public/favicon.svg +0 -0
  530. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/public/worklets/pcm-capture-processor.js +0 -0
  531. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/components/ConnectionPanel.astro +0 -0
  532. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/components/EventStream.astro +0 -0
  533. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/components/Footer.astro +0 -0
  534. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/components/Header.astro +0 -0
  535. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/components/MicIsland.astro +0 -0
  536. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/components/SignalMesh.astro +0 -0
  537. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/layouts/Layout.astro +0 -0
  538. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/pages/dev-connection.astro +0 -0
  539. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/pages/dev-events.astro +0 -0
  540. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/pages/dev-mic.astro +0 -0
  541. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/pages/index.astro +0 -0
  542. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/audio-graph.ts +0 -0
  543. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/audio-playback.test.ts +0 -0
  544. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/audio-playback.ts +0 -0
  545. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/audio-test-doubles.ts +0 -0
  546. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/connection-panel.ts +0 -0
  547. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/dev-mic-harness.ts +0 -0
  548. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/event-fixtures.ts +0 -0
  549. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/event-icons.ts +0 -0
  550. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/event-log.test.ts +0 -0
  551. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/event-log.ts +0 -0
  552. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/mic-capture.test.ts +0 -0
  553. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/mic-capture.ts +0 -0
  554. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/mic-island.test.ts +0 -0
  555. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/mic-island.ts +0 -0
  556. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/no-mic-mute.test.ts +0 -0
  557. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/pcm-wire.test.ts +0 -0
  558. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/pcm-wire.ts +0 -0
  559. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/realtime-connection.ts +0 -0
  560. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/scripts/realtime-events.ts +0 -0
  561. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/src/styles/global.css +0 -0
  562. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/test/connection-panel.test.ts +0 -0
  563. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/test/gateway-proxy.test.ts +0 -0
  564. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/test/realtime-connection.test.ts +0 -0
  565. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/tsconfig.json +0 -0
  566. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/site/vitest.config.ts +0 -0
  567. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/sonar-project.properties +0 -0
  568. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/__init__.py +0 -0
  569. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/conftest.py +0 -0
  570. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card/Dockerfile.gateway +0 -0
  571. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card/VARIATION.md +0 -0
  572. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card/deployment.lock.toml +0 -0
  573. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card/docker-compose.override.yml +0 -0
  574. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card/docker-compose.yml +0 -0
  575. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card__fixture-shape/VARIATION.md +0 -0
  576. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card__fixture-shape/deployment.lock.toml +0 -0
  577. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.override.yml +0 -0
  578. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.shape.yml +0 -0
  579. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.yml +0 -0
  580. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/upgrade_compat/README.md +0 -0
  581. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/upgrade_compat/fleet/docker-compose.yml +0 -0
  582. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/upgrade_compat/fleet/env.example +0 -0
  583. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/upgrade_compat/single/docker-compose.yml +0 -0
  584. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/fixtures/upgrade_compat/single/env.example +0 -0
  585. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/README.md +0 -0
  586. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/__init__.py +0 -0
  587. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/base.env +0 -0
  588. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/orin.env +0 -0
  589. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/regen.py +0 -0
  590. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-associate__base.env +0 -0
  591. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-associate__orin.env +0 -0
  592. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-associate__spark.env +0 -0
  593. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-associate__thor.env +0 -0
  594. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-cortex__base.env +0 -0
  595. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-cortex__orin.env +0 -0
  596. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-cortex__spark.env +0 -0
  597. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-cortex__thor.env +0 -0
  598. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-lobe__base.env +0 -0
  599. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-lobe__orin.env +0 -0
  600. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-lobe__spark.env +0 -0
  601. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-lobe__thor.env +0 -0
  602. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-small__base.env +0 -0
  603. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-small__orin.env +0 -0
  604. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-small__spark.env +0 -0
  605. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/orin-small__thor.env +0 -0
  606. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/spark-lobe__base.env +0 -0
  607. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/spark-lobe__orin.env +0 -0
  608. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/spark-lobe__spark.env +0 -0
  609. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/spark-lobe__thor.env +0 -0
  610. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-lobe__base.env +0 -0
  611. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-lobe__orin.env +0 -0
  612. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-lobe__spark.env +0 -0
  613. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-lobe__thor.env +0 -0
  614. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-muse__base.env +0 -0
  615. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-muse__orin.env +0 -0
  616. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-muse__spark.env +0 -0
  617. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-muse__thor.env +0 -0
  618. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-worker__base.env +0 -0
  619. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-worker__orin.env +0 -0
  620. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-worker__spark.env +0 -0
  621. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/shapes/thor-worker__thor.env +0 -0
  622. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/spark.env +0 -0
  623. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/switch-plans.txt +0 -0
  624. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/template-defaults.env +0 -0
  625. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/goldens/thor.env +0 -0
  626. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_assess.py +0 -0
  627. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_assess_perf.py +0 -0
  628. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_associate_compose.py +0 -0
  629. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_associate_exposure.py +0 -0
  630. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_associate_gateway_boundaries.py +0 -0
  631. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_associate_role.py +0 -0
  632. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_bench_compare.py +0 -0
  633. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_bench_report.py +0 -0
  634. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_benchmark_all_lobes.py +0 -0
  635. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_boundary_serves_only.py +0 -0
  636. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_buildability_guard.py +0 -0
  637. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_calibration_knee.py +0 -0
  638. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cat_probe.py +0 -0
  639. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cat_score.py +0 -0
  640. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_catalog.py +0 -0
  641. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_catalog_tiers.py +0 -0
  642. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_chatterbox_pcm16.py +0 -0
  643. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_chatterbox_readiness.py +0 -0
  644. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli.py +0 -0
  645. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_benchmark_profiles.py +0 -0
  646. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_calibrate.py +0 -0
  647. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_capabilities.py +0 -0
  648. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_capabilities_replicas.py +0 -0
  649. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_eval.py +0 -0
  650. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_eval_cat.py +0 -0
  651. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_fleet.py +0 -0
  652. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_gateway_auth.py +0 -0
  653. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_introspection.py +0 -0
  654. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_logs.py +0 -0
  655. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_measure.py +0 -0
  656. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_route.py +0 -0
  657. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_run.py +0 -0
  658. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_runtime.py +0 -0
  659. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_tunnel.py +0 -0
  660. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_up.py +0 -0
  661. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_cli_wiring.py +0 -0
  662. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_client_reasoning_roundtrip.py +0 -0
  663. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_colleague_contract.py +0 -0
  664. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_compose_chain.py +0 -0
  665. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_deployment_lock.py +0 -0
  666. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_deployment_lock_doc.py +0 -0
  667. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_detect.py +0 -0
  668. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_doctor.py +0 -0
  669. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_doctor_fix.py +0 -0
  670. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_doctor_machine_profile.py +0 -0
  671. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_doctor_passthrough.py +0 -0
  672. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_dropped_lobe_honesty.py +0 -0
  673. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_fleet_audio_vad_env.py +0 -0
  674. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_fleet_minor.py +0 -0
  675. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_fleet_per_machine_knobs.py +0 -0
  676. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_fleet_secrets_env_file.py +0 -0
  677. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_fleet_template_gateway_env.py +0 -0
  678. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_audio_peer.py +0 -0
  679. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_audio_routing.py +0 -0
  680. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_auth.py +0 -0
  681. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_auth_rejection_log.py +0 -0
  682. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_busy_e2e.py +0 -0
  683. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_capabilities.py +0 -0
  684. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_config_proxy.py +0 -0
  685. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_config_replicas.py +0 -0
  686. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_config_wiring.py +0 -0
  687. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_embed_deep.py +0 -0
  688. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_env_passthrough_guard.py +0 -0
  689. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_feasibility.py +0 -0
  690. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_fleet_doc.py +0 -0
  691. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_force_strict.py +0 -0
  692. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_hand_adapters.py +0 -0
  693. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_peer_advert.py +0 -0
  694. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_pool.py +0 -0
  695. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_pool_capacity_wiring.py +0 -0
  696. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_pool_pressure.py +0 -0
  697. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_pool_saturation.py +0 -0
  698. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_proxy.py +0 -0
  699. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_readiness.py +0 -0
  700. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_realtime_ws.py +0 -0
  701. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_replicas.py +0 -0
  702. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_routing.py +0 -0
  703. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_selection.py +0 -0
  704. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_server.py +0 -0
  705. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_status.py +0 -0
  706. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_stream_termination.py +0 -0
  707. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gateway_tiers.py +0 -0
  708. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gemma4_compose.py +0 -0
  709. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gemma4_dockerfile.py +0 -0
  710. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gen_api_key.py +0 -0
  711. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_gitignore_convention.py +0 -0
  712. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_init.py +0 -0
  713. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_init_coresidency.py +0 -0
  714. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_init_from_lock.py +0 -0
  715. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_init_gpu_access.py +0 -0
  716. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_init_profile.py +0 -0
  717. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_init_shape.py +0 -0
  718. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_live_capabilities.py +0 -0
  719. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_lock_drift.py +0 -0
  720. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_machines.py +0 -0
  721. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_minor_client.py +0 -0
  722. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_minor_governance.py +0 -0
  723. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_minor_integration.py +0 -0
  724. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_minor_logprobs.py +0 -0
  725. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_nightly_migration_doc.py +0 -0
  726. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_no_config_byte_identity.py +0 -0
  727. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_orin_associate_shape.py +0 -0
  728. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_orin_cortex_shape.py +0 -0
  729. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_orin_lobe_shape.py +0 -0
  730. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_overview_live.py +0 -0
  731. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_parser.py +0 -0
  732. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_peer_referral.py +0 -0
  733. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_preserve_thinking_diagnostic.py +0 -0
  734. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_pressure.py +0 -0
  735. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_pressure_policy.py +0 -0
  736. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_profile_goldens.py +0 -0
  737. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_profile_render.py +0 -0
  738. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_profile_schema.py +0 -0
  739. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_profiles.py +0 -0
  740. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_readiness_peer_probe.py +0 -0
  741. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_audio_env_coverage.py +0 -0
  742. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_audio_facade.py +0 -0
  743. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_conversation.py +0 -0
  744. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_floor.py +0 -0
  745. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_imports.py +0 -0
  746. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_pcm.py +0 -0
  747. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_protocol.py +0 -0
  748. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_readiness.py +0 -0
  749. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_segmenter.py +0 -0
  750. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_session.py +0 -0
  751. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_settings.py +0 -0
  752. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_smoke_helpers.py +0 -0
  753. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_tts_gate.py +0 -0
  754. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_turn.py +0 -0
  755. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_realtime_wire.py +0 -0
  756. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_role_probes.py +0 -0
  757. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_roles_proxied.py +0 -0
  758. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_roles_replicas.py +0 -0
  759. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_scan_deployment_secrets.py +0 -0
  760. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_senses_speculative_config.py +0 -0
  761. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_shape_budgets.py +0 -0
  762. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_shape_contract_matrix.py +0 -0
  763. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_shape_goldens.py +0 -0
  764. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_shapes.py +0 -0
  765. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_smoke_duo.py +0 -0
  766. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_spec_arms.py +0 -0
  767. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_spike_preflight.py +0 -0
  768. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_status_fleet.py +0 -0
  769. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_status_pressure.py +0 -0
  770. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_switch_bf16.py +0 -0
  771. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_switch_plan_goldens.py +0 -0
  772. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_templates_preserve_thinking.py +0 -0
  773. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_tier_request.py +0 -0
  774. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_tool_parser_plugin.py +0 -0
  775. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_tts_pause_and_truncation.py +0 -0
  776. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_up_no_deps_isolation.py +0 -0
  777. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_upgrade_compat.py +0 -0
  778. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_variation.py +0 -0
  779. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_variation_catalog.py +0 -0
  780. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_vllm_plugin_thinking.py +0 -0
  781. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_wheel_excludes_deployments.py +0 -0
  782. {lobes_cli-0.69.2 → lobes_cli-0.71.2}/tests/test_worker_compose.py +0 -0
@@ -0,0 +1 @@
1
+ peer-only-replica-pools
@@ -0,0 +1 @@
1
+ peer-only-replica-pools
@@ -0,0 +1,617 @@
1
+ {
2
+ "slug": "peer-only-replica-pools",
3
+ "title": "peer-only replica pools",
4
+ "schema_version": 5,
5
+ "status": "exported",
6
+ "created": "2026-08-30T08:05:41Z",
7
+ "updated": "2026-08-30T08:25:47Z",
8
+ "claims": [
9
+ {
10
+ "id": "c1",
11
+ "kind": "announcement",
12
+ "text": "A box that hosts none of a role still spreads that role's traffic across every declared replica of it.",
13
+ "origin": "user",
14
+ "status": "confirmed",
15
+ "honesty_conditions": [
16
+ {
17
+ "id": "h10",
18
+ "text": "The claim is literal: after this ships, a box hosting NO replica of a role still distributes that role's requests across every declared replica \u2014 demonstrated by a live run where one box's requests are answered by two different peers, not by a config that merely permits it.",
19
+ "status": "confirmed",
20
+ "instruction": ""
21
+ }
22
+ ],
23
+ "hard_questions": [],
24
+ "links": [],
25
+ "instruction": "Ship as a gateway-only change: lobes/gateway/{server,_replicas}.py plus tests and docs; no new env knobs, no template or profile changes.",
26
+ "revisions": []
27
+ },
28
+ {
29
+ "id": "c2",
30
+ "kind": "requirement",
31
+ "text": "build_replica_caches skips every backend in table.infeasible (lobes/gateway/server.py:3752, 'a dropped lane has no local replica to probe or publish'), so a non-hosted role gets no ReplicaCache at all today; that skip is the change point \u2014 a role with declared <PREFIX>_PEER_ORIGINS must get a peer-only cache.",
32
+ "origin": "llm",
33
+ "status": "confirmed",
34
+ "honesty_conditions": [
35
+ {
36
+ "id": "h1",
37
+ "text": "With no *_PEER_ORIGINS declared for an infeasible backend, build_replica_caches still returns no cache for it \u2014 proven by a test asserting the pre-change cache map for a referral-only and a proxy deployment.",
38
+ "status": "confirmed",
39
+ "instruction": ""
40
+ }
41
+ ],
42
+ "hard_questions": [],
43
+ "links": [],
44
+ "instruction": "In build_replica_caches (lobes/gateway/server.py:3752) replace the unconditional infeasible skip with: skip only when the backend has no declared replica origins; otherwise build a cache with local=None and the declared peers.",
45
+ "revisions": []
46
+ },
47
+ {
48
+ "id": "c3",
49
+ "kind": "requirement",
50
+ "text": "A peer-only pool needs a compatibility REFERENCE that is not the local lane: compare_fingerprints(local=None, peer) returns (False, 'fingerprint: unknown (local replica not probed)') at lobes/gateway/_replicas.py:598, so with no local lane every peer is marked incompatible and selection would pick nothing.",
51
+ "origin": "llm",
52
+ "status": "confirmed",
53
+ "honesty_conditions": [
54
+ {
55
+ "id": "h2",
56
+ "text": "A peer whose fingerprint disagrees with the chosen reference is excluded with a reason naming the differing field, and a pool whose peers do not agree with each other selects nothing rather than guessing \u2014 no unknown ever pools silently (#199 h11 restated for the lane-less case).",
57
+ "status": "confirmed",
58
+ "instruction": ""
59
+ }
60
+ ],
61
+ "hard_questions": [],
62
+ "links": [],
63
+ "instruction": "Add a reference-fingerprint path to ReplicaCache._refresh_peers: when local is None, probe peers first, take the first READY peer in declaration order as the reference, then run compare_fingerprints(reference, peer) for the rest. Publish which peer supplied the reference.",
64
+ "revisions": []
65
+ },
66
+ {
67
+ "id": "c4",
68
+ "kind": "requirement",
69
+ "text": "Precedence must change: handle_post calls _proxied_owner and forwards to the SINGULAR <PREFIX>_PEER_ORIGIN (lobes/gateway/server.py:2456) before the feasibility 404 and before _pool_selection (server.py:1550), so a pooled non-hosted role has to be placed ahead of the singular proxy branch or the one declared origin always wins.",
70
+ "origin": "llm",
71
+ "status": "confirmed",
72
+ "honesty_conditions": [
73
+ {
74
+ "id": "h3",
75
+ "text": "A pooled non-hosted role never produces more than one forward per request: placement happens once, the chosen peer is stamped X-Lobes-Proxied, and a pre-dispatch failure retries at most once per remaining replica (the #199 t8 semantics) \u2014 verified by a test that counts upstream opens.",
76
+ "status": "confirmed",
77
+ "instruction": ""
78
+ }
79
+ ],
80
+ "hard_questions": [],
81
+ "links": [],
82
+ "instruction": "In handle_post, run peer-only placement BEFORE the _proxied_owner branch (server.py:2456) and gate it on 'this backend is pooled': plural origins declared and at least one compatible ready replica. On no selectable replica, fall through to the existing singular-proxy forward unchanged.",
83
+ "revisions": []
84
+ },
85
+ {
86
+ "id": "c5",
87
+ "kind": "assumption",
88
+ "text": "The substrate already supports a lane-less pool: ReplicaCache.__init__ takes local: LocalLane | None (lobes/gateway/_replicas.py:686), seeds no local state when it is None, and _refresh_local returns early on a None lane (line 1247) \u2014 so no new local-optional plumbing is needed inside the cache.",
89
+ "origin": "llm",
90
+ "status": "confirmed",
91
+ "honesty_conditions": [],
92
+ "hard_questions": [],
93
+ "links": [],
94
+ "instruction": "",
95
+ "revisions": []
96
+ },
97
+ {
98
+ "id": "c6",
99
+ "kind": "assumption",
100
+ "text": "select_replica already contemplates a peer-only candidate set: lobes/gateway/_selection.py lines 63-66 document 'no local candidate in the input at all, i.e. a peer-only view' returning reason peer-less-loaded \u2014 so ranking needs no new reason vocabulary.",
101
+ "origin": "llm",
102
+ "status": "confirmed",
103
+ "honesty_conditions": [],
104
+ "hard_questions": [],
105
+ "links": [],
106
+ "instruction": "",
107
+ "revisions": []
108
+ },
109
+ {
110
+ "id": "c7",
111
+ "kind": "boundary",
112
+ "text": "The single-hop guard is untouched: _proxy_to_peer stamps X-Lobes-Proxied (lobes/gateway/server.py:1253) and a marked arrival skips selection and is served locally (_pool_selection, server.py:1578). This work adds fan-out at the ORIGINATING box only \u2014 never a second hop, never a peer re-forwarding.",
113
+ "origin": "llm",
114
+ "status": "confirmed",
115
+ "honesty_conditions": [
116
+ {
117
+ "id": "h4",
118
+ "text": "A request arriving at this box already marked X-Lobes-Proxied is never placed across peers: with no local replica it still answers 508 proxy_loop, exactly as the pre-change _proxied_owner path does.",
119
+ "status": "confirmed",
120
+ "instruction": ""
121
+ }
122
+ ],
123
+ "hard_questions": [],
124
+ "links": [],
125
+ "instruction": "Assert in tests that an inbound X-Lobes-Proxied request to a peer-only pooled box still answers 508 proxy_loop and never enters placement.",
126
+ "revisions": []
127
+ },
128
+ {
129
+ "id": "c8",
130
+ "kind": "boundary",
131
+ "text": "Config parsing and doctor are already generic and stay unchanged: _replica_origins/_replica_api_keys (lobes/gateway/_config.py:439/473) are keyed by backend name with no feasibility check, and doctor passes PEER_ORIGINS/PEER_API_KEYS through for every role prefix (lobes/cli/_commands/doctor.py:269).",
132
+ "origin": "llm",
133
+ "status": "confirmed",
134
+ "honesty_conditions": [
135
+ {
136
+ "id": "h11",
137
+ "text": "No change lands in lobes/gateway/_config.py's origin/key parsing or in doctor's pass-through suffix tables \u2014 proven by those files being untouched in the diff, with the existing config and doctor tests passing unchanged.",
138
+ "status": "confirmed",
139
+ "instruction": ""
140
+ }
141
+ ],
142
+ "hard_questions": [],
143
+ "links": [],
144
+ "instruction": "Leave lobes/gateway/_config.py and lobes/cli/_commands/doctor.py untouched; verify by diff.",
145
+ "revisions": []
146
+ },
147
+ {
148
+ "id": "c9",
149
+ "kind": "non_goal",
150
+ "text": "Pooling does not make a box a host: feasible stays false for a non-hosted role (lobes/roles.py:1104) and hosted_by/proxied/ready remain the honest usability fields \u2014 no role is promoted to feasible by having replicas.",
151
+ "origin": "llm",
152
+ "status": "confirmed",
153
+ "honesty_conditions": [],
154
+ "hard_questions": [],
155
+ "links": [],
156
+ "instruction": "",
157
+ "revisions": []
158
+ },
159
+ {
160
+ "id": "c10",
161
+ "kind": "non_goal",
162
+ "text": "No behaviour change for any deployment that declares no *_PEER_ORIGINS (h1 of #199): with no plural origins the peer-only path must not construct a cache, place a request, or alter one byte of the referral 404 or the singular proxy forward.",
163
+ "origin": "llm",
164
+ "status": "confirmed",
165
+ "honesty_conditions": [
166
+ {
167
+ "id": "h5",
168
+ "text": "The existing no-config byte-identity suite (tests/test_no_config_byte_identity.py) passes unchanged, and a referral-only deployment's 404 role_infeasible body plus a singular-proxy deployment's forward are byte-identical before and after.",
169
+ "status": "confirmed",
170
+ "instruction": ""
171
+ }
172
+ ],
173
+ "hard_questions": [],
174
+ "links": [],
175
+ "instruction": "",
176
+ "revisions": []
177
+ },
178
+ {
179
+ "id": "c11",
180
+ "kind": "audience",
181
+ "text": "Operators of a mesh box that hosts none of a heavy role but declares peers for it \u2014 the Jetson AGX Orin today; any future gear-only or edge box tomorrow \u2014 plus every caller that addresses that box's gateway by role name.",
182
+ "origin": "llm",
183
+ "status": "confirmed",
184
+ "honesty_conditions": [
185
+ {
186
+ "id": "h12",
187
+ "text": "The behaviour is generic across all ten role prefixes, not special-cased to cortex or to the Orin: the peer-only path keys off PEER_ORIGINS_ENV's existing mapping, and a test exercises it on a second, non-cortex prefix.",
188
+ "status": "confirmed",
189
+ "instruction": ""
190
+ }
191
+ ],
192
+ "hard_questions": [],
193
+ "links": [],
194
+ "instruction": "Exercise the peer-only path in tests on a non-cortex prefix (e.g. senses/multimodal) to prove it is generic.",
195
+ "revisions": []
196
+ },
197
+ {
198
+ "id": "c12",
199
+ "kind": "after_state",
200
+ "text": "A box with no local replica of a role places each request across all declared <PREFIX>_PEER_ORIGINS by live-probed load, stamping X-Lobes-Proxied-By and X-Lobes-Route-Reason, instead of pinning every request to the singular <PREFIX>_PEER_ORIGIN.",
201
+ "origin": "llm",
202
+ "status": "confirmed",
203
+ "honesty_conditions": [
204
+ {
205
+ "id": "h6",
206
+ "text": "The placement is observable: every answer carries X-Lobes-Proxied-By naming the serving peer and X-Lobes-Route-Reason from the existing closed vocabulary \u2014 no new reason string is invented for the peer-only case (peer-less-loaded already covers it, _selection.py l.63-66).",
207
+ "status": "confirmed",
208
+ "instruction": ""
209
+ }
210
+ ],
211
+ "hard_questions": [],
212
+ "links": [],
213
+ "instruction": "Stamp X-Lobes-Proxied-By with the chosen peer origin and X-Lobes-Route-Reason from the existing vocabulary on every peer-only placed answer; add no new reason string.",
214
+ "revisions": []
215
+ },
216
+ {
217
+ "id": "c13",
218
+ "kind": "before_state",
219
+ "text": "Today the Orin's gateway forwards every cortex request to one declared origin (measured 2026-08-30: 200 with X-Lobes-Proxied-By = the Spark, always), even though the Spark and Thor each publish two compatible ready cortex replicas \u2014 so the Orin's traffic cannot use the pool that already exists.",
220
+ "origin": "llm",
221
+ "status": "confirmed",
222
+ "honesty_conditions": [
223
+ {
224
+ "id": "h13",
225
+ "text": "The before-state is measured, not asserted: the 2026-08-30 probe on the physical Orin (200, X-Lobes-Proxied-By = the Spark on every request, both peers publishing two compatible ready cortex replicas) is filed as the baseline transcript under docs/evidence/ before the change lands.",
226
+ "status": "confirmed",
227
+ "instruction": ""
228
+ }
229
+ ],
230
+ "hard_questions": [],
231
+ "links": [],
232
+ "instruction": "Before merging, file the 2026-08-30 Orin baseline probe (200 + X-Lobes-Proxied-By pinned to the Spark on every request; both peers publishing two compatible ready cortex replicas) as docs/evidence/2026-08-30-baseline-orin-cortex-pinned.txt.",
233
+ "revisions": []
234
+ },
235
+ {
236
+ "id": "c14",
237
+ "kind": "why_it_matters",
238
+ "text": "Capacity the mesh already has is unreachable from the boxes most likely to need it: a gear-only box is exactly the one that hosts no heavy lobe, and pinning its traffic to one peer wastes half the fleet's cortex capacity and makes that one peer a single point of failure for it.",
239
+ "origin": "llm",
240
+ "status": "confirmed",
241
+ "honesty_conditions": [
242
+ {
243
+ "id": "h14",
244
+ "text": "The capacity claim is quantified against the baseline rather than assumed: the acceptance run reports aggregate throughput for concurrent Orin-originated cortex requests before and after, in the same shape as the #199 single-owner baseline.",
245
+ "status": "confirmed",
246
+ "instruction": ""
247
+ }
248
+ ],
249
+ "hard_questions": [],
250
+ "links": [],
251
+ "instruction": "Report aggregate tok/s for N concurrent Orin-originated cortex requests before and after, in the same shape as docs/evidence/2026-08-25-baseline-cortex-single-owner.txt.",
252
+ "revisions": []
253
+ },
254
+ {
255
+ "id": "c15",
256
+ "kind": "success_signal",
257
+ "text": "A live cross-box transcript from the Orin under load: concurrent cortex requests answered by BOTH the Spark and the Thor (distinct X-Lobes-Proxied-By values with X-Lobes-Route-Reason), a peer taken down still served by the other, and a deployment with no *_PEER_ORIGINS byte-identical to today.",
258
+ "origin": "llm",
259
+ "status": "confirmed",
260
+ "honesty_conditions": [
261
+ {
262
+ "id": "h7",
263
+ "text": "The acceptance transcript is a LIVE cross-box run on the physical Orin against the Spark and Thor, filed under docs/evidence/ per the #108 rule \u2014 declared-only data may not be described as validated anywhere in docs, CLAUDE.md, or lobes capabilities.",
264
+ "status": "confirmed",
265
+ "instruction": ""
266
+ },
267
+ {
268
+ "id": "h20",
269
+ "text": "The measurable targets in the new success_signal claim are reported as raw numbers in the transcript, not as a summary judgement.",
270
+ "status": "confirmed",
271
+ "instruction": ""
272
+ }
273
+ ],
274
+ "hard_questions": [],
275
+ "links": [],
276
+ "instruction": "Acceptance run on the physical Orin: at least 4 concurrent cortex requests must yield BOTH peer origins in X-Lobes-Proxied-By, aggregate throughput must exceed the pinned-to-one-peer baseline, and stopping one peer's gateway must still serve 200 from the other.",
277
+ "revisions": []
278
+ },
279
+ {
280
+ "id": "c16",
281
+ "kind": "decision",
282
+ "text": "Compatibility reference for a lane-less pool (q1): the first READY peer in declaration order supplies the reference fingerprint and every other declared peer is compared against it \u2014 peers agree with each other, no operator-declared expectation and no ungated trust. Disagreement excludes the peer with a reason naming the field; total disagreement (or no ready peer) means nothing is selectable and the request falls back to the existing singular-proxy forward.",
283
+ "origin": "llm",
284
+ "status": "confirmed",
285
+ "honesty_conditions": [
286
+ {
287
+ "id": "h8",
288
+ "text": "The reference is honest about its own provenance: the published replicas array names which peer supplied the reference, and a peer excluded for disagreeing carries the same field-naming reason string a local-lane mismatch produces today (compare_fingerprints, _replicas.py:587).",
289
+ "status": "confirmed",
290
+ "instruction": ""
291
+ }
292
+ ],
293
+ "hard_questions": [],
294
+ "links": [],
295
+ "instruction": "",
296
+ "revisions": []
297
+ },
298
+ {
299
+ "id": "c17",
300
+ "kind": "decision",
301
+ "text": "GET /v1/models lists a pooled non-hosted role (q2): a role with declared plural origins and at least one compatible ready replica re-enters the models payload that order_backends currently filters (lobes/gateway/_routing.py:504), so plain OpenAI clients that never read /capabilities can discover it.",
302
+ "origin": "llm",
303
+ "status": "confirmed",
304
+ "honesty_conditions": [
305
+ {
306
+ "id": "h9",
307
+ "text": "A pooled role's /v1/models entry is proven to appear ONLY with plural origins and a compatible ready replica: tests assert the payload is unchanged for referral-only and singular-proxy deployments, and that the entry disappears again when every peer goes unready.",
308
+ "status": "confirmed",
309
+ "instruction": ""
310
+ }
311
+ ],
312
+ "hard_questions": [],
313
+ "links": [],
314
+ "instruction": "",
315
+ "revisions": []
316
+ },
317
+ {
318
+ "id": "c18",
319
+ "kind": "boundary",
320
+ "text": "The /v1/models change is scoped to POOLED roles only: a referral-only role (hosted_by, no proxy) and a singular-proxy role (PEER_ORIGIN + PEER_PROXY, no plural origins) keep today's payload byte for byte \u2014 listing is gated on the same 'is this role pooled' predicate the placement path uses, never on infeasible-plus-a-peer-origin.",
321
+ "origin": "llm",
322
+ "status": "confirmed",
323
+ "honesty_conditions": [
324
+ {
325
+ "id": "h15",
326
+ "text": "A referral-only and a singular-proxy deployment's GET /v1/models payloads are asserted byte-identical before and after, and the pooled listing is driven by the same predicate the placement path uses \u2014 a single source of truth, not two independent conditions that can drift.",
327
+ "status": "confirmed",
328
+ "instruction": ""
329
+ }
330
+ ],
331
+ "hard_questions": [],
332
+ "links": [],
333
+ "instruction": "Drive the /v1/models listing from the same 'is pooled' predicate the placement path uses; assert unchanged payloads for referral-only and singular-proxy deployments.",
334
+ "revisions": []
335
+ },
336
+ {
337
+ "id": "c19",
338
+ "kind": "requirement",
339
+ "text": "Credential blind spot: the plural channel is positional and INDEPENDENT of the singular one \u2014 _replica_api_keys (lobes/gateway/_config.py:473) returns no entry when <PREFIX>_PEER_API_KEYS is unset, so _replica_api_key yields \"\" and the forward carries no Authorization. On the exact target deployment (the Orin declares only the singular PRIMARY_PEER_API_KEY, and the Spark runs an inbound gate) every pooled forward would 401. The change must either inherit the singular key for an origin equal to <PREFIX>_PEER_ORIGIN, or refuse to arm the pool with a named config error \u2014 never silently 401.",
340
+ "origin": "llm",
341
+ "status": "confirmed",
342
+ "honesty_conditions": [
343
+ {
344
+ "id": "h16",
345
+ "text": "A pooled deployment whose plural origins have no matching key slot is caught at startup or by an inherited key \u2014 proven by a test that arms a pool with only the singular PEER_API_KEY set and asserts the forward carries the same Authorization the singular proxy path would have sent.",
346
+ "status": "confirmed",
347
+ "instruction": ""
348
+ }
349
+ ],
350
+ "hard_questions": [],
351
+ "links": [],
352
+ "instruction": "Decide the inherit-vs-refuse behaviour explicitly and test both: origin == PEER_ORIGIN inherits PEER_API_KEY; an origin with neither a key slot nor a singular match is a named ReplicaConfigError at startup.",
353
+ "revisions": []
354
+ },
355
+ {
356
+ "id": "c20",
357
+ "kind": "requirement",
358
+ "text": "A pooled non-hosted role's advertised ready must be the OR across its compatible replicas, and its context the fingerprint-agreed max_model_len: probe_peer_ready (lobes/gateway/_readiness.py:212) and the #220 relay are built for ONE peer origin, so with N replicas the capabilities surface has no defined answer today.",
359
+ "origin": "llm",
360
+ "status": "confirmed",
361
+ "honesty_conditions": [
362
+ {
363
+ "id": "h17",
364
+ "text": "With two ready replicas the role advertises ready:true and the agreed context; with every replica unready it advertises ready:false and never fabricates a context from the catalog (the #220 lesson: a role this box does not host has no <PREFIX>_MAX_MODEL_LEN to read).",
365
+ "status": "confirmed",
366
+ "instruction": ""
367
+ }
368
+ ],
369
+ "hard_questions": [],
370
+ "links": [],
371
+ "instruction": "Extend the peer-ready/peer-context relay to fold across the replica set: ready = any(compatible and ready), context = the fingerprint-agreed max_model_len, absent when the set is empty.",
372
+ "revisions": []
373
+ },
374
+ {
375
+ "id": "c21",
376
+ "kind": "boundary",
377
+ "text": "Local pressure must not shed a peer-only pooled request: handle_post's proxy branch deliberately runs BEFORE pressure shedding (lobes/gateway/server.py:2417 \u2014 'pressure describes THIS box's load; the model runs on the peer'), and placing the pool ahead of that branch must preserve the bypass, not re-gate a role this box cannot serve on its own swap/iowait.",
378
+ "origin": "llm",
379
+ "status": "confirmed",
380
+ "honesty_conditions": [
381
+ {
382
+ "id": "h18",
383
+ "text": "A test drives a peer-only pooled box under simulated swap/iowait pressure and asserts the pooled role is still forwarded, never shed 429.",
384
+ "status": "confirmed",
385
+ "instruction": ""
386
+ }
387
+ ],
388
+ "hard_questions": [],
389
+ "links": [],
390
+ "instruction": "Place the peer-only branch ahead of _proxied_owner but on the same side of the pressure gate as the existing proxy branch.",
391
+ "revisions": []
392
+ },
393
+ {
394
+ "id": "c22",
395
+ "kind": "requirement",
396
+ "text": "A down or slow peer must never delay or fail the gateway's bind: build_replica_caches refreshes every cache SYNCHRONOUSLY before serve() binds (lobes/gateway/server.py:3775), so adding peer-only caches puts cross-box probes of roles this box does not host on the boot path \u2014 the peer probe timeout must bound it and an unreachable peer must leave the gateway serving every other role normally.",
397
+ "origin": "llm",
398
+ "status": "confirmed",
399
+ "honesty_conditions": [
400
+ {
401
+ "id": "h19",
402
+ "text": "A test constructs a peer-only cache whose every peer refuses the connection and asserts serve() still binds within the probe timeout and that the role reports ready:false rather than the gateway failing to start.",
403
+ "status": "confirmed",
404
+ "instruction": ""
405
+ }
406
+ ],
407
+ "hard_questions": [],
408
+ "links": [],
409
+ "instruction": "Keep the synchronous pre-bind refresh but bound it by the existing peer probe timeout; never let a peer-only cache raise out of build_replica_caches.",
410
+ "revisions": []
411
+ },
412
+ {
413
+ "id": "c23",
414
+ "kind": "success_signal",
415
+ "text": "Measurable target for the acceptance run on the physical Orin: at least 4 concurrent cortex requests produce BOTH declared peer origins in X-Lobes-Proxied-By (neither peer serving 0 and neither serving 100%), aggregate tok/s is at least 40% above the pinned-to-one-peer baseline, and with one peer's gateway stopped 100% of requests still answer 200 from the other.",
416
+ "origin": "llm",
417
+ "status": "confirmed",
418
+ "honesty_conditions": [
419
+ {
420
+ "id": "h22",
421
+ "text": "Every number in the target is reported as a measured value in the acceptance transcript \u2014 per-peer split, aggregate tok/s against the recorded baseline, and the one-peer-down result \u2014 or the claim is reported as NOT met; no target is quietly softened after the run.",
422
+ "status": "confirmed",
423
+ "instruction": ""
424
+ }
425
+ ],
426
+ "hard_questions": [],
427
+ "links": [],
428
+ "instruction": "Report the per-peer request split, aggregate tok/s vs baseline, and the one-peer-down result as raw numbers in the acceptance transcript.",
429
+ "revisions": []
430
+ },
431
+ {
432
+ "id": "c24",
433
+ "kind": "decision",
434
+ "text": "Empty-pool fallback (q3) and the singular-origin requirement (v3): a peer-only pool with no selectable replica takes the existing singular-proxy forward, and a deployment may not declare <PREFIX>_PEER_ORIGINS without <PREFIX>_PEER_ORIGIN \u2014 enforced as a named ReplicaConfigError at startup, so hosted_by (lobes/roles.py:1126) never silently vanishes.",
435
+ "origin": "llm",
436
+ "status": "confirmed",
437
+ "honesty_conditions": [
438
+ {
439
+ "id": "h21",
440
+ "text": "Both halves are tested: a pool whose peers are all unready forwards to the singular origin with the same bytes the pre-change path produced, and PEER_ORIGINS without PEER_ORIGIN raises a named startup error rather than arming a pool with no referral.",
441
+ "status": "confirmed",
442
+ "instruction": ""
443
+ }
444
+ ],
445
+ "hard_questions": [],
446
+ "links": [],
447
+ "instruction": "Enforce the singular-origin requirement in _replica_origins' consumer at table-build time, reusing ReplicaConfigError; implement the fallback as the existing _proxied_owner branch running after an empty placement.",
448
+ "revisions": []
449
+ }
450
+ ],
451
+ "open_vagueness": [
452
+ {
453
+ "id": "v1",
454
+ "text": "If the Orin's llama.cpp cortex lane ever comes back up as a local replica, it is fingerprint-incompatible with the NVFP4 vLLM peers by design \u2014 does a pool then hold one local-incompatible lane plus N compatible peers, and which one serves?",
455
+ "kind": "unknown_nonblocking",
456
+ "claim_id": null,
457
+ "resolved": false,
458
+ "resolution": "",
459
+ "resolution_claim_id": null
460
+ },
461
+ {
462
+ "id": "v2",
463
+ "text": "Two peer-only boxes pooling the SAME peers cannot see each other's in-flight dispatches \u2014 ReplicaCache's local accounting (lobes/gateway/_replicas.py, begin_dispatch/_reconcile) is per-gateway and reconciles only against the peer's own probed /status, so N forwarding boxes can herd onto the same replica between 5s refreshes.",
464
+ "kind": "unknown_nonblocking",
465
+ "claim_id": null,
466
+ "resolved": false,
467
+ "resolution": "",
468
+ "resolution_claim_id": null
469
+ },
470
+ {
471
+ "id": "v3",
472
+ "text": "A box declaring ONLY plural origins (no singular <PREFIX>_PEER_ORIGIN) has no hosted_by to publish \u2014 annotate_peer_referrals reads table.peer_origins, the singular channel (lobes/roles.py:1126) \u2014 so the honest-referral annotation would silently vanish for a plural-only deployment.",
473
+ "kind": "unknown_blocking",
474
+ "claim_id": null,
475
+ "resolved": true,
476
+ "resolution": "Plural origins are an ADDITION to the singular channel, never a replacement: arming a pool without <PREFIX>_PEER_ORIGIN is a named config error at startup, so hosted_by keeps reading the singular origin unchanged and composes with the q3 fallback.",
477
+ "resolution_claim_id": null
478
+ }
479
+ ],
480
+ "scope_entries": [
481
+ {
482
+ "id": "s1",
483
+ "surface": "lobes/gateway/server.py \u2014 build_replica_caches (l.3711-3776)",
484
+ "finding": "skips 'if backend.name in table.infeasible: continue' so a dropped lane gets no ReplicaCache; the LocalLane is built unconditionally for every cache it does make",
485
+ "seeds": [
486
+ "c2"
487
+ ]
488
+ },
489
+ {
490
+ "id": "s2",
491
+ "surface": "lobes/gateway/_replicas.py \u2014 compare_fingerprints (l.587) and _probe_peer (l.1183)",
492
+ "finding": "peer compatibility is computed against local_fp; a None local fingerprint yields (False, 'fingerprint: unknown (local replica not probed)') and _peer_backend_entry also keys off the local served id first, falling back to backend/role name",
493
+ "seeds": [
494
+ "c3"
495
+ ]
496
+ },
497
+ {
498
+ "id": "s3",
499
+ "surface": "lobes/gateway/server.py \u2014 handle_post precedence (l.2455-2470, 1300-1345, 1550-1590)",
500
+ "finding": "order is proxy branch -> _resolve_served_or_early (feasibility 404) -> _pool_selection; the pool sits after the owning backend resolves and is unreachable for an infeasible role",
501
+ "seeds": [
502
+ "c4"
503
+ ]
504
+ },
505
+ {
506
+ "id": "s4",
507
+ "surface": "lobes/gateway/_replicas.py \u2014 ReplicaCache.__init__ (l.685) and _refresh_local (l.1247)",
508
+ "finding": "local is already Optional: no local state is seeded when None and the local refresh pass returns early, so a peer-only cache is representable without touching the constructor",
509
+ "seeds": [
510
+ "c5"
511
+ ]
512
+ },
513
+ {
514
+ "id": "s5",
515
+ "surface": "lobes/gateway/_selection.py \u2014 policy docstring (l.36-70) and _reason_for (l.348)",
516
+ "finding": "a peer-only candidate set is already a documented input, returning peer-less-loaded; local_busy and the local carve-outs simply never fire",
517
+ "seeds": [
518
+ "c6"
519
+ ]
520
+ },
521
+ {
522
+ "id": "s6",
523
+ "surface": "lobes/gateway/server.py \u2014 _proxy_to_peer (l.1215-1260) and _pool_selection hop guard (l.1578)",
524
+ "finding": "every forward stamps X-Lobes-Proxied and a marked arrival is pinned to the receiver (sole-ready) \u2014 measured live on this box: an Orin forward to the Spark is served by the Spark and never re-routed to the Thor",
525
+ "seeds": [
526
+ "c7"
527
+ ]
528
+ },
529
+ {
530
+ "id": "s7",
531
+ "surface": "lobes/gateway/_config.py (l.330-500) and lobes/cli/_commands/doctor.py (l.262-300)",
532
+ "finding": "plural origins/keys parse per backend name with no feasibility gate and raise ReplicaConfigError on a length mismatch; doctor already asserts PEER_ORIGINS/PEER_API_KEYS reach the gateway container for every role prefix",
533
+ "seeds": [
534
+ "c8"
535
+ ]
536
+ },
537
+ {
538
+ "id": "s8",
539
+ "surface": "lobes/roles.py \u2014 annotate_peer_referrals (l.1049-1130) and annotate_replicas (l.1252)",
540
+ "finding": "feasible stays false for proxied roles by design, proxied/hosted_by/ready carry usability, and the replicas/fingerprint keys are additive per role \u2014 a peer-only pool has an existing publication surface",
541
+ "seeds": [
542
+ "c9"
543
+ ]
544
+ },
545
+ {
546
+ "id": "s9",
547
+ "surface": "live probe: Orin/Spark/Thor gateways, 2026-08-30",
548
+ "finding": "Spark and Thor each publish two compatible ready cortex replicas (each other plus local, served_id unsloth/Qwen3.8-27B-NVFP4, max_model_len 262144, runtime vllm); the Orin publishes cortex feasible:false and, with PRIMARY_PEER_PROXY=true, returns 200 with X-Lobes-Proxied-By pinned to the Spark",
549
+ "seeds": [
550
+ "c1"
551
+ ]
552
+ },
553
+ {
554
+ "id": "s10",
555
+ "surface": "lobes/gateway/_routing.py \u2014 RoutingTable.infeasible/replica_origins (l.58-141), order_backends (l.504)",
556
+ "finding": "infeasible backends are filtered out of ordering and the models list while still present in table.backends, which is why build_replica_caches can see and skip them; open question q2 asks whether a pooled non-hosted role should re-enter /v1/models",
557
+ "seeds": []
558
+ },
559
+ {
560
+ "id": "s11",
561
+ "surface": "challenge pass / security lens: lobes/gateway/_config.py:473 (_replica_api_keys), server.py:1529 (_replica_api_key)",
562
+ "finding": "the plural key channel is positional and independent of the singular one; an unset PEER_API_KEYS yields no entry and an empty outbound credential, which 401s against a peer that runs an inbound gate \u2014 exactly the Orin/Spark pairing this feature targets",
563
+ "seeds": [
564
+ "c19"
565
+ ]
566
+ },
567
+ {
568
+ "id": "s12",
569
+ "surface": "challenge pass / adjacent-systems lens: lobes/gateway/_readiness.py:212 (probe_peer_ready), lobes/roles.py:794-836 (peer_ready/peer_context relay)",
570
+ "finding": "both the readiness probe and the #220 relay are single-origin by construction; with N replicas neither ready nor context has a defined answer",
571
+ "seeds": [
572
+ "c20"
573
+ ]
574
+ },
575
+ {
576
+ "id": "s13",
577
+ "surface": "challenge pass / operations lens: lobes/gateway/server.py:2417 (proxy-before-pressure ordering)",
578
+ "finding": "the proxy branch's pressure bypass is deliberate and documented; moving the pool ahead of it risks re-gating a non-hosted role on this box's own swap/iowait",
579
+ "seeds": [
580
+ "c21"
581
+ ]
582
+ },
583
+ {
584
+ "id": "s14",
585
+ "surface": "challenge pass / lifecycle lens: lobes/gateway/server.py:3711-3776 (build_replica_caches synchronous pre-bind refresh)",
586
+ "finding": "boot currently probes only roles this box hosts; peer-only caches put cross-box probes on the bind path",
587
+ "seeds": [
588
+ "c22"
589
+ ]
590
+ },
591
+ {
592
+ "id": "s15",
593
+ "surface": "challenge pass / concurrency lens: lobes/gateway/_replicas.py in-flight accounting (begin_dispatch/_reconcile/INFLIGHT_MAX_AGE)",
594
+ "finding": "per-gateway accounting reconciles against the peer's probed /status in both directions, so a single forwarder self-corrects; the residual hazard is N independent forwarders herding between refreshes \u2014 recorded as park v2, not fixed here",
595
+ "seeds": []
596
+ },
597
+ {
598
+ "id": "s16",
599
+ "surface": "challenge pass / reversibility lens: lobes/runtime/_lock.py:15-35 and MERGE_ONLY_FILES",
600
+ "finding": "every *_PEER_* key is deliberately excluded from the deployment lock (operator-typed, 'peer origins are internal information by operator decision'), so a --from-lock restore reproduces a box with NO pool config \u2014 pre-existing, unchanged by this work, but this feature makes that omission more load-bearing",
601
+ "seeds": []
602
+ },
603
+ {
604
+ "id": "s17",
605
+ "surface": "challenge pass / observability lens: lobes/gateway/_config.py:587 (_self_origin), server.py:1653",
606
+ "finding": "clean pass \u2014 GATEWAY_SELF_ORIGIN feeds only X-Lobes-Served-By on LOCALLY served answers, so a peer-only box needs no self origin declared; every pooled answer it emits is a forward carrying X-Lobes-Proxied-By instead",
607
+ "seeds": []
608
+ },
609
+ {
610
+ "id": "s18",
611
+ "surface": "challenge pass / failure-mode lens: server.py _pool_dispatch retry semantics (t8) vs _feasibility_response (l.1321)",
612
+ "finding": "exhausting a pool yields 503 backend_unavailable with X-Lobes-Route-Attempts while today a non-hosted role yields a terminal 404 role_infeasible \u2014 a caller-visible contract change with no decided answer; raised as question q3",
613
+ "seeds": []
614
+ }
615
+ ],
616
+ "lapses": []
617
+ }