Skip to content

H0 v0.5.1 implementation batch (AXW-003A/003C/007A/009B/011A/012A/012B) - #71

Merged
DTALEX66 merged 8 commits into
mainfrom
axw/execution-h0
Aug 9, 2026
Merged

H0 v0.5.1 implementation batch (AXW-003A/003C/007A/009B/011A/012A/012B)#71
DTALEX66 merged 8 commits into
mainfrom
axw/execution-h0

Conversation

@DTALEX66

@DTALEX66 DTALEX66 commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Scope

H0 (v0.5.1) implementation batch from the frozen execution baseline (AXW-FROZEN-v1). Each change is a separate checkpoint with its own RED→GREEN evidence. Base is origin/main (492fac5).

Included (6 commits)

  • 8cdfb21 AXW-003A — ci-verdict gates on GatePlan semantic IDs, not job names (py-primary/static/lint/…). Fixes: a required py-primary suite failure could pass as green. Reverse-regression tests added.
  • 275bd90 AXW-007A — Windows/PowerShell 7 doctor (scripts/doctor_windows.ps1) with sanitized JSON output (no absolute private paths); 6 tests.
  • 7b7df25 AXW-012A — RawAsset-first immutable store (app/ingestion/raw_asset.py): original bytes persisted content-addressed before conversion; failure injection proves no original loss.
  • 9ff5ba6 AXW-003C — dependency/format-parser path classification: requirements.txt no longer forces full-qualification; parser changes trigger wheel-smoke.
  • d7acc8b AXW-012B — enable markitdown[pdf] for installed PDF extraction (product + ci-adapters + requirements + uv.lock add pdfminer/pdfplumber/pypdfium2); real-binary PDF test replaces text-disguised-as-PDF.
  • b35aae0 AXW-009B — sync release-manifest dependency-lock digest after lock change (revision 5).

Explicitly excluded

  • User WIP tests/fixtures/readability_article.html (CRLF-only working-copy difference; not staged/committed).
  • Any merge/PR to main, tag, release, or public publish — not authorized in this scope.
  • Frozen baseline / status-log files (untouched; status is appended on the separate codex/frozen-roadmap-deepseek-v1 branch).

Verification

  • Each change: RED → GREEN with exact commands; changed-file Ruff; architecture guard; repository conventions (convention failure is the pre-existing CRLF-only fixture, unrelated).
  • Local totals: 36 passed (ci gates), 38 passed (classifier), 30 passed (release identity), 87 passed (adapter contract incl. new PDF), 6 passed (raw asset), 6 passed (doctor), 3 passed (pdf extraction).

Risk / Rollback

  • Dependency change (pyproject/uv.lock) is high-risk: this PR must run the full wheel-smoke + py-compat + installer gates. Each commit is independently revertible.

GatePlan emits semantic gate IDs (py-primary, static, lint, ...), not
GitHub job names. The aggregator previously ran 'require test' against the
job name, which GatePlan never emits, letting a required py-primary suite
failure pass ci-verdict as green. Gate on the semantic IDs now: py-primary
carries the OS/KB/integration test result, static and lint both arrive via
the lint job. Not-required-but-failed coverage now includes test, py-compat
and lint, and the windows-runtime-smoke job name is corrected.
Detect Python, Node, Rust, PowerShell, Chinese and space-containing paths,
port availability, console encoding and writable project-local directories.
Emits sanitized structured JSON only (no absolute private paths, secrets or
personal body text). Covered by six focused tests.
Persist original bytes immutably (SHA-256 content-addressed) before any
conversion. A failed converter retains the original plus a durable failure
record. Failure-injection tests prove no original is lost across value/OS/
store/interrupt/generic failures. Default root is the project's ignored
.hermes/task-runtime/raw-assets.
requirements.txt was an unknown path that forced full-qualification; it now
maps to python-compat and triggers wheel-smoke + py-compat. Format parsers
(pdf.py, multi_format.py) now trigger wheel-smoke so parser changes rebuild
and smoke the installed wheel. Covered by two new path-mutation regression
tests.
The product wheel and ci-adapters group declared bare markitdown>=0.1, so the
installed runtime had no pdfminer/pdfplumber backend and real PDF conversion
failed with MissingDependencyException. Declare markitdown[pdf]>=0.1 and sync
requirements.txt and uv.lock (adds pdfminer-six, pdfplumber, pypdfium2). A
real-binary PDF extraction test replaces the old text-disguised-as-PDF check
and passes through the product convert path under ci-adapters.
…009B)

AXW-012B changed uv.lock (added pdfminer-six, pdfplumber, pypdfium2). The
release-manifest dependency_lock.digest must match the locked tree for a
unified version identity. Bump digest to 9916e6db... and revision to 5.
AXW-012B changed ci-adapters to markitdown[pdf]>=0.1; the runtime-policy
gate asserted the stale markitdown>=0.1. Update the expected requirement.
…otices (AXW-010B/006C)

AXW-010B: assert status endpoint projects unimplemented capabilities
(asr/postgresql/qdrant/public_installer) as not_implemented, image_ocr as
dependency_required, and never claims a capability the runtime lacks.
AXW-006C: list markitdown[pdf] (pdfminer-six/pdfplumber/pypdfium2) in
THIRD_PARTY_NOTICES so bundled PDF dependencies are auditable.
@DTALEX66
DTALEX66 merged commit f269a01 into main Aug 9, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant