1
0
Fork 0
  • Python 99.6%
  • Shell 0.3%
Find a file
2026-10-26 15:27:41 -06:00
ci Implement phase M1 2026-10-26 15:27:41 -06:00
docs Implement phase M1 2026-10-26 15:27:41 -06:00
fixture_pipeline Implement phase M1 2026-10-26 15:27:41 -06:00
m1_pipeline Implement phase M1 2026-10-26 15:27:41 -06:00
overrides Implement phase M1 2026-10-26 15:27:41 -06:00
profiles Implement phase M1 2026-10-26 15:27:41 -06:00
schemas Implement phase M1 2026-10-26 15:27:41 -06:00
sources Implement phase M1 2026-10-26 15:27:41 -06:00
tests Implement phase M1 2026-10-26 15:27:41 -06:00
tools Implement phase M1 2026-10-26 15:27:41 -06:00
.dockerignore Implement phase M1 2026-10-26 15:27:41 -06:00
.gitignore Implement M0 2026-10-26 14:00:29 -06:00
.python-version Implement M0 2026-10-26 14:00:29 -06:00
AGENTS.md LLM agent 2026-10-25 17:45:41 -06:00
fixture Implement phase M1 2026-10-26 15:27:41 -06:00
LICENSE Implement phase M1 2026-10-26 15:27:41 -06:00
LICENSE-CC-BY-4.0 Implement phase M1 2026-10-26 15:27:41 -06:00
LICENSE-CC0-1.0 Implement phase M1 2026-10-26 15:27:41 -06:00
m1 Implement phase M1 2026-10-26 15:27:41 -06:00
NOTICE.txt Implement phase M1 2026-10-26 15:27:41 -06:00
pyproject.toml Implement phase M1 2026-10-26 15:27:41 -06:00
README.md Implement phase M1 2026-10-26 15:27:41 -06:00
uv.lock Implement phase M1 2026-10-26 15:27:41 -06:00

Hanzi Draw Audio

Audio files for the Hanzi Draw app.

M0 contract fixture

This repository contains the offline fixture pipeline and language-neutral contracts defined in docs/phases/M0-CONTRACTS.md. It does not contain a production corpus, production pack, native application integration, or a pronunciation-quality claim.

Provisioning (separate, network-enabled)

Use Python 3.14.9 and install the exact locked dependencies before entering the offline build/test environment:

python3.14 -m venv venv
venv/bin/python -m pip install uv==0.9.7
UV_PROJECT_ENVIRONMENT=venv venv/bin/uv sync --frozen

The OCI builder base and platform digests are pinned in tools/toolchain.lock.json and tools/Containerfile. Dependency installation, image building, and lock refreshes are provisioning operations, not artifact stages.

Offline stages

Dependencies and FFmpeg/FFprobe with libopus must already be present. Set the recorded epoch, then run the stages independently:

export SOURCE_DATE_EPOCH=1767225600
./fixture build --offline --locked
./fixture validate
./fixture report
./fixture release --offline --locked

Build writes the unvalidated build/candidate/pack/, candidate.tar, demand catalog, and fixture-only coverage/QA reports. Validate writes only the external build/candidate/validation-result.json; it never repairs the candidate. Report writes deterministic JSON and Markdown summaries and cannot grant validation or release approval. Release additionally requires a clean pinned checkout and a passing applicable validation, reconstructs in an empty ignored directory, and requires byte-identical outputs before writing dist/0.0.0-fixture.1/fixture.tar and fixture.tar.sha256.

Run the complete test matrix through the single network-isolated CI entry point:

./ci/offline-test

The entry point uses an unprivileged user+network namespace (unshare -Urn), requires no sudo, performs no dependency sync/resolution, and supplies the locked epoch. All fixture commands and their subprocesses inherit the isolated namespace.

Fixture evidence and remaining M0 gates

The tracked WAV files are deterministic, explicitly labeled non-speech technical stand-ins, not human speech or TTS. They allow the byte-level pipeline to be tested without importing a corpus. Before claiming the complete M0 exit gates, replace them with at most eight original human-spoken CC BY 4.0 recordings with documented permission, refresh the reviewed locks/pins, and complete the external application review and immutable fixture publication. The technical pipeline does not fabricate those recording, review, or publication gates.

M1 Yue Tan evaluation tooling

The repository also implements the locked-input inventory, matching, and potential-coverage pipeline specified in docs/phases/M1-YUE-TAN.md. The implementation is exercised with synthetic dictionary, frequency, archive, and FLAC fixtures. It does not include the Yue Tan corpus, selected production native-application inputs, a production coverage result, or a GO decision.

An offline rebuild requires exactly four canonical reviewed inputs under the lock directory: dictionary.lock.json, frequency.lock.json, source.lock.json, and reviews.json. Their schemas are in schemas/internal-v1/m1-*.schema.json. The cache must contain exactly the lock-named dictionary, frequency, source archive, notice, and original FLAC files; missing, extra, changed, symlinked, or ambiguous inputs fail closed.

./m1 rebuild --offline --locked \
  --locks sources/m1 --cache cache/m1 --output build/m1

The output directory contains the demand catalog and occurrence sidecar, extraction and frequency-provenance reports, source inventory, match catalog, exact potential-coverage JSON, deterministic Markdown report, and an artifact-hash manifest. Rebuilds perform no network access or audio transformation. Only explicit, occurrence-specific reviewed matches can enter match_accepted; this remains distinct from M2 release_accepted.

Acquisition is a separate operation and requires an approved canonical review naming the exact archive, retrieval policy, authenticity evidence, and redirect chain. It is never triggered by rebuild:

./m1 fetch --review sources/acquisition/cmn-caen-tan.review.json \
  --destination cache/m1/cmn-caen-tan.tar.xz \
  --record build/acquisition/cmn-caen-tan.record.json

m1_pipeline.acquisition.extract_archive provides bounded, traversal-safe tar.xz inspection/extraction for the subsequent reviewed source-lock preparation step. A maintainer-supplied GO/NO-GO/DEFERRED record can be checked against the exact artifact manifest and all four lock hashes without issuing or modifying a decision:

./m1 validate-decision --offline --locked \
  --decision path/to/decision.json \
  --manifest build/m1/artifact-manifest.json --locks sources/m1

The documented entry gates still apply: complete M0, select and review the native application and frequency inputs, complete the exact Yue Tan source review, and obtain explicit maintainer approval before the first fetch. Real M1 completion additionally requires the locked-corpus evaluation and immutable maintainer GO/NO-GO record; a GO record must preapprove every M2 budget. The fixture tests do not fabricate those gates.

Licensing

Pipeline code is GPL-3.0-or-later. The handmade dictionary and expected metadata are CC0-1.0. Fixture audio is separately licensed CC BY 4.0 with its own notices. See NOTICE.txt, tests/fixtures/source/NOTICE.txt, and the three license files. These rights do not cross-apply between code, data, and recordings.