The nightly-canary test_upstream_spec_unchanged (feature 030) fires on the current CNCF .project/ spec. Upstream commit cncf/automation@bd7fec94 (2026-08-21) added:
feat: add RepositoryEntry type with tags and primary fields
Our mapper at packages/darnit/src/darnit/context/dot_project.py:262 still declares repositories: list[str], and the reader at line 614 does data.get(\"repositories\", []) assuming string items. That is now schema-incompatible with the new upstream list[RepositoryEntry] shape.
Drift
- Tracked hash:
860df23e...
- Current hash:
afa3d179...
- Diff: RepositoryEntry type added;
repositories field's item type went from string to RepositoryEntry.
Impact
- Existing
.project/project.yaml files with plain-string repositories still parse (backward-compat via mapper).
- New-shape
.project/project.yaml files (using the RepositoryEntry object form) will silently degrade -- the string coercion will produce a truncated / stringified value that the mapper feeds downstream. Nothing crashes today; the tags and primary metadata are just lost.
Fix (feature-030 style)
- Add
RepositoryEntry dataclass to dot_project.py mirroring the upstream fields.
- Change
ProjectConfig.repositories to list[str | RepositoryEntry] (or normalize on read).
- Update the mapper's downstream consumers to handle the object form.
- Bump
DOT_PROJECT_SPEC_VERSION.
- Update the tracked hash:
uv run pytest tests/darnit/context/test_dot_project_upstream.py -v --update-hash.
Side effect noted separately
The -m integration filter in .github/workflows/ci.yml:44 is picking up this test even though it's marked @pytest.mark.upstream, because tests/darnit/parity/tier1/conftest.py:32's pytest_collection_modifyitems applies the integration marker to every collected item (not just tier1's own tests). That's why unrelated PRs (e.g., #384) are blocked by this canary. Worth constraining that hook to items under its own conftest scope; can file separately if desired.
Runbook: specs/030-dot-project-spec-sync/quickstart.md.
The nightly-canary
test_upstream_spec_unchanged(feature 030) fires on the current CNCF.project/spec. Upstream commit cncf/automation@bd7fec94 (2026-08-21) added:Our mapper at
packages/darnit/src/darnit/context/dot_project.py:262still declaresrepositories: list[str], and the reader at line 614 doesdata.get(\"repositories\", [])assuming string items. That is now schema-incompatible with the new upstreamlist[RepositoryEntry]shape.Drift
860df23e...afa3d179...repositoriesfield's item type went fromstringtoRepositoryEntry.Impact
.project/project.yamlfiles with plain-stringrepositoriesstill parse (backward-compat via mapper)..project/project.yamlfiles (using the RepositoryEntry object form) will silently degrade -- the string coercion will produce a truncated / stringified value that the mapper feeds downstream. Nothing crashes today; the tags and primary metadata are just lost.Fix (feature-030 style)
RepositoryEntrydataclass todot_project.pymirroring the upstream fields.ProjectConfig.repositoriestolist[str | RepositoryEntry](or normalize on read).DOT_PROJECT_SPEC_VERSION.uv run pytest tests/darnit/context/test_dot_project_upstream.py -v --update-hash.Side effect noted separately
The
-m integrationfilter in.github/workflows/ci.yml:44is picking up this test even though it's marked@pytest.mark.upstream, becausetests/darnit/parity/tier1/conftest.py:32'spytest_collection_modifyitemsapplies theintegrationmarker to every collected item (not just tier1's own tests). That's why unrelated PRs (e.g., #384) are blocked by this canary. Worth constraining that hook to items under its own conftest scope; can file separately if desired.Runbook:
specs/030-dot-project-spec-sync/quickstart.md.