Skip to content

Commit f6682d8

Browse files
committed
docs: guard govengine roadmap release truth
1 parent 2ef1a2b commit f6682d8

4 files changed

Lines changed: 52 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ All notable public GovEngine changes should be documented here.
44

55
GovEngine follows conservative pre-1.0 versioning while the API boundary is still being extracted from Ravenclaw.
66

7+
## Unreleased
8+
9+
- Corrects roadmap current-baseline wording after the published `0.11.0-alpha`
10+
boundary release and adds public-truth coverage against regressing to the
11+
superseded `0.10` current-line claim.
12+
713
## 0.11.0-alpha - Host projection removal and SCLite 0.8 sync
814

915
- Published the alpha package as `govengine==0.11.0a0` on PyPI.

docs/ROADMAP.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,10 @@ Runtimes own UX/integration.
6262
SCLite owns proof/review artifacts.
6363
```
6464

65-
## Current implemented baseline: 0.10.x alpha
65+
## Current published baseline: 0.11.x alpha
6666

67-
The current `0.10.x` alpha line proves the first useful kernel shape:
67+
The current `0.11.x` alpha line retains the first useful kernel shape and
68+
removes the former host-shaped lifecycle projection:
6869

6970
- artifact-governance and SCLite lifecycle/review bridge helpers;
7071
- kernel/profile/runtime/SCLite boundary reports and conformance checks;
@@ -76,6 +77,8 @@ The current `0.10.x` alpha line proves the first useful kernel shape:
7677
- optional `govengine.security_profile` helper facade for Ravenclaw-derived security helpers;
7778
- public truth validation for version/dependency/status/API-boundary drift.
7879
- package-build, clean wheel-install, and Ravenclaw public downstream compatibility checks for the alpha source line.
80+
- explicit host ownership of Ravenclaw lifecycle projection after removal of
81+
`govengine.sclite_adapter` from the neutral package surface.
7982

8083
This is alpha, not stable. The next roadmap should not be a file move from Ravenclaw into GovEngine. It should remain contract-first extraction: define neutral contracts, add GovEngine tests, add host compatibility wrappers, then thin host code only after behavior is preserved.
8184

@@ -373,7 +376,7 @@ Definition of done:
373376
- no PyPI upload or public tag is performed without explicit operator approval;
374377
- carrier adapters, credentials, schedulers, storage, live execution, and production readiness remain out of scope.
375378

376-
Next `0.10.x` consolidation work:
379+
Historical `0.10.x` consolidation decisions carried into `0.11.x`:
377380

378381
1. keep the neutral public surface index stable while alpha consumers exercise
379382
the current kernel from SCLite fixtures and Ravenclaw projections;
@@ -389,7 +392,7 @@ Next `0.10.x` consolidation work:
389392
infrastructure semantics into the kernel.
390393
6. retire the Ravenclaw-shaped lifecycle compatibility assembly only in an
391394
explicit package/API change after downstream current-proof validation and
392-
SCLite legacy-retirement work agree.
395+
SCLite legacy-retirement work agree; this was delivered in `0.11.0-alpha`.
393396

394397
Success criteria for the consolidation line:
395398

@@ -444,8 +447,8 @@ Success criteria:
444447

445448
- a new public surface is added only with a neutral owner, a public boundary
446449
statement, negative tests, and consumer validation;
447-
- if no candidate meets the entry criteria, GovEngine stays on the 0.10 alpha
448-
stabilization line instead of inventing a feature wave;
450+
- if no candidate meets the entry criteria, GovEngine stays on the `0.11.x`
451+
alpha stabilization line instead of inventing a feature wave;
449452
- GovEngine remains a deterministic governed-runtime kernel while SCLite owns
450453
proof/review artifacts and Ravenclaw owns security runtime meaning.
451454

scripts/validate_public_truth.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,19 @@ def _assert_alpha_maturity_truth(paths: Iterable[str]) -> None:
133133
_assert_contains('docs/API_BOUNDARY.md', _read('docs/API_BOUNDARY.md'), 'current alpha public surface set')
134134

135135

136+
def _assert_roadmap_current_release_truth(roadmap: str) -> None:
137+
stale_markers = (
138+
'## Current implemented baseline: 0.10.x alpha',
139+
'GovEngine stays on the 0.10 alpha stabilization line',
140+
)
141+
for marker in stale_markers:
142+
if marker in roadmap:
143+
raise AssertionError(f'docs/ROADMAP.md:stale_current_roadmap_claim:{marker}')
144+
_assert_contains('docs/ROADMAP.md', roadmap, '## Current published baseline: 0.11.x alpha')
145+
_assert_contains('docs/ROADMAP.md', roadmap, 'The current `0.11.x` alpha line')
146+
_assert_contains('docs/ROADMAP.md', roadmap, 'GovEngine stays on the `0.11.x`')
147+
148+
136149
def main() -> int:
137150
project = _pyproject()['project']
138151
version = str(project['version'])
@@ -160,6 +173,7 @@ def main() -> int:
160173
_assert_readme_package_truth(readme, version)
161174
_assert_contains('docs/ROADMAP.md', roadmap, f'Current source baseline: `govengine=={version}`')
162175
_assert_contains('docs/ROADMAP.md', roadmap, dependency)
176+
_assert_roadmap_current_release_truth(roadmap)
163177
_assert_contains('PUBLIC_STATUS.md', public_status, f'Source version: `{version}`.')
164178
_assert_contains('PUBLIC_STATUS.md', public_status, f'Public release label: `{release_label}`.')
165179
_assert_contains('PUBLIC_STATUS.md', public_status, dependency)

tests/test_public_truth_consistency.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
11
from __future__ import annotations
22

3+
import importlib.util
34
import subprocess
45
import sys
56
from pathlib import Path
67

8+
import pytest
9+
710

811
ROOT = Path(__file__).resolve().parents[1]
12+
SCRIPT = ROOT / 'scripts' / 'validate_public_truth.py'
13+
14+
15+
def _load_validator():
16+
spec = importlib.util.spec_from_file_location('govengine_validate_public_truth', SCRIPT)
17+
assert spec is not None
18+
module = importlib.util.module_from_spec(spec)
19+
assert spec.loader is not None
20+
spec.loader.exec_module(module)
21+
return module
922

1023

1124
def test_public_truth_validator_passes() -> None:
@@ -44,3 +57,13 @@ def test_current_public_docs_do_not_reintroduce_pre_alpha_maturity_claims() -> N
4457
):
4558
text = (ROOT / relative).read_text(encoding='utf-8').lower()
4659
assert not any(marker in text for marker in stale_markers), relative
60+
61+
62+
def test_public_truth_validator_rejects_stale_current_roadmap_baseline() -> None:
63+
validator = _load_validator()
64+
65+
with pytest.raises(AssertionError, match='stale_current_roadmap_claim'):
66+
validator._assert_roadmap_current_release_truth(
67+
'## Current implemented baseline: 0.10.x alpha\n'
68+
'GovEngine stays on the 0.10 alpha stabilization line.\n'
69+
)

0 commit comments

Comments
 (0)