docs: add training acceptance index

This commit is contained in:
2026-05-02 03:40:27 -04:00
parent 96a67dc5cb
commit 03f132549c
3 changed files with 60 additions and 0 deletions
+15
View File
@@ -19,6 +19,21 @@ Set `MIGRATIONS_OUTPUT_JSON=1` when running `run_migrations.py` for a machine-re
Training Case Engine is the external-facing product training module. The public milestone state is M1-M40, with current product maturity through M40.
Accepted milestone range: M1-M40, with current product maturity through M40.
Offline validation commands:
- `.venv/bin/python -m unittest discover -s tests/unit -p "test_*.py"`
- `.venv/bin/python scripts/run_offline_checks.py`
Accepted user-facing surfaces:
- Dashboard Training panel
- public API routes
- offline public package import/export
- public error catalog
- public privacy contract coverage
- Acceptance and offline validation: M35 acceptance posture, Training Case acceptance manifest, focused milestone test suites, offline checks, and public validation.
- Public API and privacy contracts: API contract coverage, error contract coverage, and privacy contract coverage keep public routes audited while public responses scrub private solution material and internal solution details.
- Package smoke and offline registry: offline package smoke covers local import/export with public package, public export, and public output flows; broader offline checks register `training_case_package`.
@@ -2,6 +2,23 @@
Training Case Engine is the product-facing training module in AI Exchange. M1-M40 is the current public milestone range, with current product maturity through M40 across public API, package, dashboard, validation, and local deployment guard surfaces.
## Training Case Engine acceptance index
Accepted milestone range: M1-M40, with current product maturity through M40.
Offline validation commands:
- `.venv/bin/python -m unittest discover -s tests/unit -p "test_*.py"`
- `.venv/bin/python scripts/run_offline_checks.py`
Accepted user-facing surfaces:
- Dashboard Training panel
- public API routes
- offline public package import/export
- public error catalog
- public privacy contract coverage
## Milestone Release Index
- M1-M28 established persisted training cases, a lightweight HTTP API, a dashboard entry, validation hardening, public package import/export, offline package smoke coverage, product documentation checks, public response plus package smoke privacy hardening, and dashboard/public docs privacy alignment. The M1-M28 product maturity through M28 included API contract coverage, error contract coverage, the fixture/schema contract, the offline checks registry smoke, recursive public payload sanitization, public response privacy contract coverage, package smoke docs/fixture public privacy guards, and dashboard and public docs privacy smoke coverage.
@@ -107,6 +107,19 @@ TRAINING_ACCEPTANCE_VALIDATION_DOC_SNIPPETS = (
"offline checks",
"public validation",
)
TRAINING_ACCEPTANCE_INDEX_DOCS = (PROJECT_README, TRAINING_PRODUCT_DOC)
TRAINING_ACCEPTANCE_INDEX_REQUIRED_SNIPPETS = (
"Accepted milestone range: M1-M40, with current product maturity through M40.",
"Offline validation commands:",
"`.venv/bin/python -m unittest discover -s tests/unit -p \"test_*.py\"`",
"`.venv/bin/python scripts/run_offline_checks.py`",
"Accepted user-facing surfaces:",
"Dashboard Training panel",
"public API routes",
"offline public package import/export",
"public error catalog",
"public privacy contract coverage",
)
TRAINING_M41_RELEASE_INDEX_DOCS = (PROJECT_README, TRAINING_PRODUCT_DOC)
TRAINING_M41_RELEASE_INDEX_GUARD_TEST_INVENTORY = (
"test_training_readmes_expose_m1_m40_release_index_without_raw_test_modules",
@@ -4427,6 +4440,21 @@ TRAINING_M41_RELEASE_INDEX_REQUIRED_SNIPPET_INVENTORY = (
for snippet in TRAINING_ACCEPTANCE_VALIDATION_DOC_SNIPPETS:
self.assertIn(snippet, text)
def test_training_readmes_expose_operator_acceptance_index(self) -> None:
for path in TRAINING_ACCEPTANCE_INDEX_DOCS:
text = path.read_text(encoding="utf-8")
with self.subTest(path=path.name):
for snippet in TRAINING_ACCEPTANCE_INDEX_REQUIRED_SNIPPETS:
self.assertIn(snippet, text)
self.assertLess(
text.index("Accepted milestone range:"),
text.index("Offline validation commands:"),
)
self.assertLess(
text.index("Offline validation commands:"),
text.index("Accepted user-facing surfaces:"),
)
for path in TRAINING_PUBLIC_PRIVACY_DOCS:
text = path.read_text(encoding="utf-8")
with self.subTest(path=path.name, surface="manifest_modules"):