Interview Readiness Fixes - 2026-10-07¶
Context¶
A review of the repo and the live Pages demo, done as a reader would see them in an interview, found a list of bugs and rough edges: the resolver dropped junit_xml and tier, the dashboard showed "Degraded" because of a MinIO health check, leftover "UQO" names, Compare was hard to read, the nav broke on phones, and the nightly job was always red. All of it was fixed as one batch of parallel pull requests, each kept independent.
Decision¶
| Area | Change | Pull request |
|---|---|---|
| Engine | Keep junit_xml and tier when resolving cycle stages |
#73 |
| Engine | Pyramid buckets a run by the tiers it ran with | #71 |
| Engine | Stage workers are honest per framework | #77 |
| Pytest | Keep the target repo's own rootdir | #69 |
| Storage | Drop MinIO and pre-v1.1 run-history compatibility | #75 |
| Storage | Each run gets its own copy of its artifacts | #68 |
| API | Optional token, strict CORS and origin check | #76 |
| API | Bounded execution registry; async SSE tail | #81 |
| CLI | uqo alias and legacy frontend redirects removed |
#72 |
| Naming | UQO → Testosterone rename finished in code and UI (env vars TESTO_*) |
#78 |
| Frontend | Same-cycle compare; honest health for crashed stages | #82 |
| Frontend | Runs named by cycle and time; Compare as tables | #85 |
| Frontend | Top nav collapses into a menu on phones | #83 |
| Demo | Self-hosting CI publishes the UI to GitHub and GitLab Pages | #67 |
| Demo | The read-only Pages demo explains itself | #84 |
| CI | Coverage enforced on the fast suite; nightly fixed | #79 |
| Repo | Dead code and failure injection deleted; root tidied | #80 |
| Docs | Vault readable on GitHub; work log archived | #74 |
| Docs | README top section with demo link and architecture diagram | #70 |
Second wave¶
| Area | Change | Pull request |
|---|---|---|
| CI | mypy gates testo_api as well as testo_core |
#87 |
| Code | Root modules moved into subpackages: db* → repository/, metrics, integrations and report generator → reporting/, triggers → config/; only paths.py stays at the root |
#88 |
| Docs | Current UI screenshots in the README (docs/assets/screenshots/) |
#89 |
| Code | Silent except blocks in I/O and reporting paths now log or re-raise |
#90 |
| Release | Version 1.1.0: pyproject.toml bump and CHANGELOG.md cut |
#91 |
The vault and wiki work done the same day is its own decision: Docs Vault and Wiki Sync - 2026-10-07.
Defaults chosen: the next version is v1.1.0, with a moving v1 tag for the GitHub Action; no backward-compatibility shims, since there are no external users.
Consequences¶
- Breaking for anyone on 1.0: the
uqocommand,UQO_*env vars, MinIO storage and pre-v1.1 history are gone. See CHANGELOG.md. - v1.1.0 is cut but not tagged or published, and stale branches remain; both need someone with push rights to tags and branch deletion (Publishing to PyPI § Current state).