You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
decision(quotient): rebind project_level after burn-in — pipeline_stage vs orchestrator #146
Since #144 the k=1 quotient graph (domains as nodes) is scored observe-only (enforce: false) against pipeline_stage. It stably measures drift 0.700 — exact arithmetic, not noise: the cross-domain census is 021D-dominated because cgis.pipeline imports/calls every other domain (orchestrator reality), while pipeline_stage ideal expects a 021C chain (extraction→resolution→storage).
Decision needed (after ~2-3 weeks of burn-in, i.e. around 2026-07-01)
Pick one:
Rebind to orchestrator — accept reality: cgis at domain level is a hub-and-spoke around the pipeline. Drift would drop to ~0; quotient could then be enforced.
Keep pipeline_stage as aspiration — treat 0.700 as a measured architectural debt: the pipeline module should shrink to thin wiring and domains should hand off in a chain. Keep observe-only until refactored.
Hybrid — rebind to orchestrator with a tight tolerance now (regression guard), open a separate refactoring issue for the chain aspiration.
Data to collect during burn-in
Does quotient drift move at all as code changes land? (If it's static, observe-only adds no signal and we should just decide.)
tests/self_parsing/test_drift.py::test_py_quotient_drift_observed_not_enforced prints the report on every run — check CI logs.
Blocks: enforcing project_level (and the unresolved_ratio plumbing (#149) only matters once enforced).
Closing: the question this issue asked — what topology cgis should drift toward, and how to keep it there as languages are added — is answered by the language-packs migration (spec docs/specs/2026-10-14-language-packs-design.md, steps 0–6, every step graph-identical on cgis src@715cd9a, owner-api@8de2245 and ui/).
The answer is not a quotient pattern but enforced boundaries. The cgis-project → pipeline_stage binding never fit (the measured quotient was an orchestrator star) and stayed observe-only; it is retired (#605). What enforces the topology now is the forbidden-edge gate in tests/self_parsing/test_architecture.py, with exact shrinking allowlists:
chore(ontology): step 6 — gates #605 step 6 — one drift domain per pack at a shared tolerance (layered_dag 0.42), core as layered_dag, project_level retired; build/read plane quotients reported observe-only (build 0.351, read 0.676)
Follow-ups:#603 (IngestionPipeline.run complexity), #604 (language residue in the resolver's text). Step 7 — the Go pilot — is next and does not block this.
Activity
docs(spec): language packs and a two-plane topology
docs(spec): revision 2 — forbidden edges as the gate, scope per langu…
docs(plan): language packs — step 0 in full, steps 1–7 outlined
docs(spec): language packs and a two-plane topology (#593)
chore(ontology): step 6 — gates (#605)
zaebee commentedon Oct 14, 2026
Closing: the question this issue asked — what topology cgis should drift toward, and how to keep it there as languages are added — is answered by the language-packs migration (spec
docs/specs/2026-10-14-language-packs-design.md, steps 0–6, every step graph-identical on cgissrc@715cd9a, owner-api@8de2245 andui/).The answer is not a quotient pattern but enforced boundaries. The
cgis-project→pipeline_stagebinding never fit (the measured quotient was an orchestrator star) and stayed observe-only; it is retired (#605). What enforces the topology now is the forbidden-edge gate intests/self_parsing/test_architecture.py, with exact shrinking allowlists:cross-pack,pack-isolation,surface-packs(refactor(languages): step 1 — lazy registry, python/typescript packs #597),engine-packs(refactor(languages): step 3 — per-pack index facts and classification #600 → emptied refactor(languages): step 4 — resolution rules per pack #601),resolver-storage(emptied refactor(pipeline): step 5 — build-plane passes #602),core-isolation— all empty;surface-storage— the remaining allowlisted debt (cli/api/guardian reading storage directly).How it got there
cgis.languages, python/typescript packscgis/pipeline/); the resolver no longer touches storagelayered_dag0.42),coreaslayered_dag,project_levelretired; build/read plane quotients reported observe-only (build 0.351, read 0.676)Follow-ups: #603 (
IngestionPipeline.runcomplexity), #604 (language residue in the resolver's text). Step 7 — the Go pilot — is next and does not block this.