epic: every builtin language becomes a first-party plugin package #309
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Depends on
Reference
h-dv/code-index#309
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follows #75 (runtime plugin architecture). Goal: the base system is infrastructure only, and each of the seven languages (Ruby, PHP, JS, TS, C#, Rust, Python) ships as a first-party plugin package. A language fix can then be released without a core release.
Status as of 2026-09-27: Phase 0 and Phase 1 are merged (master
4ecf930). No language has flipped yet; the builtin parsers still index everything.Operator decisions (2026-09-26)
ruby,php, …). No migration of rows, configs or baselines. Third-party packages may not claim them.code-index init, or the first start with no decision, enables the languages the repository contains and says so..code-index/languages.toml, never in the project root.[languages] <lang> = builtin|package, and is deleted in N+1.Premise corrections from planning
module_maphook and new facts._prdoc/records/P1-ruby-package-overhead.md.Phase 0 — DONE (#306, master
0bcdac1)lang_profile. There were 57 literals at 41 sites; now 0, enforced bylang_literal_gatewith no allowlist. The resolver SQL readstemp.lang_profile.langfilter given as a profile name (lang: "ruby") also matches packaged languages._prdoc/records/P0-real-grammar-costs.md. Workers setoom_score_adj=1000, precompile runs in parallel, idle workers retire after 60 s.wchar.hshim), a genericpackage_parityLangSpecharness, andCOSI_CORPUS_LANGS.langand take their capability gates.Phase 1 — DONE (#308, master
4ecf930)language_reserved: first-party rows are stamped with the plain id.[languages] <lang> = auto|builtin|package. A switch re-extracts only the files that change hands and is disclosed.code-index languages list|enable|owner, thelanguage_not_enableddisclosure, and the upgrade rule.[languages.profile]withextendsand closed enums. Thefirst_party_profilesgate checks each builtin's declaration against its compiled answers.0x8005, qualifier segments0x8006, exports0x8007, grantablelexical_local/pytest_fixture,extension_methods, and multi-grammar[[grammars]]lanes.module_maphook: host side, plus Composer PSR-4 incode-index-guest-kit. It agrees with the builtin on 129 of 129 comparablephp-guzzlefiles.code-index-guest-kit: a native Ruby differential over ruby-sinatra (152 files) finds 0 differences.--first-partyanchor grants reserved-id permission only, not the exemption.HOST_EXTRACTION_EPOCH(m0072/m0073), now 2, with a fingerprint gate over every shipped package's derived rows.Remaining before the FIRST flip (Ruby)
query_cliflake on master.Phase 2 — distribution (not started)
plugin update <id>, and arequires_hostrange. The reusable release workflow from Phase 0 is designed but not built, and must be verified by dispatching it.Phase 3 — flips, one per release
module_map(PSR-4).__all__) andmodule_map(src layouts).Known and not fixed
pc_callschooses the enclosing class from ungated symbols. This only matters with two producers in one file, which no shipped path creates yet.bounding_site_registrymatches bounds by name across the workspace, so a reused name inherits another bound's disclosure.corpus_require_floorgreps--test <name>without checking which package it belongs to.COSI_WORKTREES_DIRis set (#238), and our own.mcp.jsondid not set it until now.