{
  "schemaVersion": 2,
  "date": "2026.07.22",
  "publishedAt": "2026-07-22T19:29:45-07:00",
  "timeZone": "America/Los_Angeles",
  "title": "Hiro local runtime migrated from Gemma to Qwen 3.6",
  "publicationStatus": "Published",
  "executiveSummary": [
    "Completed the coordinated local-model migration that the earlier diagnosis identified as missing. Hiro now defaults to the Qwen 3.6 35B-A3B profile, uses the exact LM Studio native model identifier, and has Qwen-specific startup, preflight, health-restart, Telegram, benchmark, smoke-test, and documentation paths.",
    "The previously loaded Gemma model was explicitly unloaded. LM Studio now reports only Qwen 3.6 loaded, idle, with an 8192-token context, one parallel slot, and maximum GPU offload. A real completion returned READY and confirmed the served Qwen identifier.",
    "Repository validation passed 178 tests. A Qwen-labeled six-workflow stateful baseline completed twice and passed three of six workflows. The remaining failures are genuine model-behavior gaps involving mailbox query selection, approval-scope construction, and failure-recovery sequencing; they are not infrastructure failures and were preserved as immutable evidence.",
    "The migration also corrected lifecycle handling so benchmark and lab restart paths unload LM Studio models through the supported CLI rather than relying only on a legacy llama-server process name."
  ],
  "workstreams": [
    {
      "title": "Active router and configuration migration",
      "status": "Completed",
      "details": [
        "Changed the effective active profile and router fallback to qwen36. Both local routing tiers now resolve to the verified LM Studio identifier qwen_qwen3.6-35b-a3b on port 8080.",
        "Removed the active Gemma profile and the incorrectly named qwen35 profile key. The legacy Qwen 3.5 dual-tier profile remains available as an explicit rollback option, but it is no longer the default.",
        "Updated the example environment file, runtime documentation, setup instructions, health configuration, lab restart selection, Telegram model command, and operational boundary tests to use Qwen 3.6."
      ]
    },
    {
      "title": "Pinned Qwen launcher and runtime identity",
      "status": "Completed",
      "details": [
        "Added a Qwen 3.6 launcher pinned to the installed 35B-A3B Q4_K_M model, 8192-token context, one parallel slot, and maximum GPU offload.",
        "The launcher normalizes the known Windows Path/PATH collision before child processes, uses LM Studio loaded-process JSON rather than the model catalog for identity, performs a visible warm-up completion, and writes startup metadata.",
        "LM Studio's native identifier was selected after an interrupted first load left a custom alias reservation. Avoiding a custom alias makes future reloads less fragile.",
        "The obsolete Gemma PowerShell and batch launchers were removed. The shutdown script continues to unload all LM Studio models and stop the local server."
      ]
    },
    {
      "title": "Nightly, benchmark, and smoke-test repair",
      "status": "Completed",
      "details": [
        "Nightly API preflight now validates and starts Qwen 3.6 before declaring the evaluation API ready.",
        "The benchmark registry, nightly model comparison defaults, smoke-test identity, report names, and scheduler model list were changed from Gemma to Qwen 3.6.",
        "Benchmark and lab restart lifecycle code now releases both legacy llama-server processes and LM Studio model/server state using a normalized child environment. This prevents a Qwen restart or model switch from becoming an idempotent no-op on an already occupied port.",
        "New canonical and adversarial harness reports now record the active model profile and exact model identifier so future results cannot be mistaken for another runtime."
      ]
    },
    {
      "title": "Qwen compatibility baseline",
      "status": "Completed with behavioral failures",
      "details": [
        "The first Qwen-labeled six-workflow run passed three of six in 95.764 seconds. The harness's 768-token cap was consumed by Qwen's internal reasoning on several turns, producing empty visible content.",
        "The harness budget was raised to 4096 tokens and the same six workflows were rerun. The second run again passed three of six in approximately 181 seconds, proving that output truncation was not the only cause.",
        "The passing workflows covered read-only calendar and mailbox discovery, local task and reading-list changes, and an approval-gated simulated calendar write.",
        "The failed workflows exposed incorrect mailbox search specificity, a stopped recovery path after an approval-scope mismatch, and an end-to-end flow that requested an empty email approval scope before drafting. These results are useful new Qwen-specific capability evidence and were not overwritten."
      ]
    }
  ],
  "decisions": [
    "Treat the migration as an atomic runtime and operations change rather than only changing a configuration string.",
    "Use LM Studio's loaded-model process list for runtime identity because its models endpoint lists the full catalog, including unloaded models.",
    "Keep Qwen resident without an idle TTL for now so frequent development runs do not repeatedly pay the unusually long first-load cost.",
    "Use an 8192-token context and one parallel slot because the measured GPU footprint leaves little headroom on the current workstation.",
    "Preserve failed Qwen evaluation reports as evidence and do not count them as successful runs or disguise behavioral failures as infrastructure failures.",
    "Retain the installed Gemma model file as an inactive artifact; the user requested that it be shut down and removed from active commands, not deleted from disk."
  ],
  "validation": [
    {
      "check": "Active-source reference audit",
      "status": "passed",
      "result": "No Gemma or qwen35 references remain in active source, scripts, tests, documentation, or configuration after excluding immutable historical research, logs, ledger evidence, and prior public journal entries."
    },
    {
      "check": "Focused migration tests",
      "status": "passed",
      "result": "The launcher, nightly preflight, router budget and payload, operational boundaries, stateful harness parser, scheduler, and health-monitor suites passed in focused runs."
    },
    {
      "check": "Full Hiro repository suite",
      "status": "passed",
      "result": "All 178 tests passed in 14.82 seconds with a workspace-local pytest temporary root. An earlier attempt produced 40 setup errors because the host user temp directory could not create another numbered pytest directory; 138 tests had passed in that infrastructure-limited attempt."
    },
    {
      "check": "Real Qwen child-process and inference startup",
      "status": "passed",
      "result": "The finalized launcher detected the loaded Qwen model, verified model key and identifier, normalized the child environment, and completed a visible READY response. Warm-start readiness took approximately two seconds plus a 1.44-second warm-up."
    },
    {
      "check": "Loaded-model state",
      "status": "passed",
      "result": "LM Studio reported Qwen 3.6 35B-A3B Q4_K_M as the only loaded model, with 8192 context, one parallel slot, idle status, and identifier qwen_qwen3.6-35b-a3b. Gemma was unloaded."
    },
    {
      "check": "Qwen stateful capability baseline",
      "status": "failed-behavioral",
      "result": "Both immutable Qwen-labeled canonical reports passed three of six workflows. The second report confirmed the remaining failures after increasing the output budget, so this is behavioral evidence rather than a connection or model-identity failure."
    }
  ],
  "currentState": [
    "Hiro's active local router profile is qwen36 and its exact served model identifier is qwen_qwen3.6-35b-a3b.",
    "Qwen 3.6 is loaded and idle in LM Studio; Gemma is not loaded.",
    "The Qwen runtime uses approximately 30.6 GB of the 32.6 GB GPU allocation at idle in the observed system-wide reading, leaving roughly 1.6 GB of GPU headroom at the time of final verification.",
    "All deterministic repository tests pass, while the latest real-model stateful capability result is three of six workflows passed.",
    "Nightly and restart paths now point to the Qwen launcher and use supported LM Studio lifecycle commands."
  ],
  "limitations": [
    "Qwen 3.6's first load took more than six minutes and its CLI did not return even after the model had allocated successfully. The model became usable, but the load command required clearing a stuck CLI helper before loaded-state verification.",
    "The current Qwen footprint leaves little GPU headroom when other graphics applications are open. Additional context or parallel slots may fail or spill into system memory.",
    "The real-model harness still passes only half of the canonical workflows. More output tokens reduced truncation but did not repair the behavioral gaps.",
    "The logger emitted Windows file-lock errors while attempting to rotate a log already held by another Hiro process. This did not change evaluation outcomes but remains a separate operational issue.",
    "Historical reports and journal entries still mention Gemma intentionally because they document what actually ran before this migration."
  ],
  "nextSteps": [
    "Use the failed Qwen traces to improve mailbox query broadening, exact approval-scope construction, draft-before-approval ordering, and bounded timeout/stale-read recovery, then rerun the same six canonical workflows.",
    "Add a bounded integration test for cold Qwen load completion and stuck-CLI recovery without changing the verified loaded model when the CLI alone remains attached.",
    "Address the Windows log-rotation file lock independently so real-model evaluation output stays concise and operational warnings remain actionable.",
    "Run fresh structurally novel adversarial scenarios only after the three canonical behavioral gaps are repaired, and label every report with profile and exact model identifier as now implemented."
  ],
  "disclosureNote": "This public entry omits credentials, private data, sensitive command lines, and actionable security details. It publishes only safe runtime identity, aggregate resource, test, and evaluation evidence."
}
