plugin enable indexes nothing on a newly-claimed extension, and package_fixture::XAML_BRIDGES holds a bridge key the production door refuses while its doc claims the guides show it #207
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.
Dependencies
No dependencies set
Reference
h-dv/code-index#207
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?
Two findings from the #45 lane, both measured, both minor today and both the kind that bite the next person rather than this one.
1. An activation build DEFERS a claimed path with no
filesrowMeasured on the Ruby leg of the package ladder:
Every newly-claimed
.rbxwas deferred, because no builtin claims that extension, so none had ever been walked intofiles. The activation build re-routes existingfilesrows; it does not discover paths the walker never admitted.So
plugin enablealone indexes nothing on a newly-claimed extension. The daemon's next pass does it.XAML does not show this, which is why it has gone unnoticed:
.xamlis already a text-indexed extension, so itsfilesrow existed and the build re-routed it in place. The failure needs an extension that no builtin claims.The disclosure gap:
plugin enable's report does printdeferred=N— but as a bare integer beside four others, with no sentence saying a further pass is owed. On the Ruby shape that integer is the entire activation, and an operator reading "deferred=152" beside "reparsed=152" has no way to know the enable did nothing yet.Not a correctness defect — the daemon converges. A disclosure-quality gap, and the shape this project usually closes: a number that is the whole story rendered as one of five.
2.
package_fixture::XAML_BRIDGEScarries a key the production door refuses, under a doc comment that is falseThe fixture holds:
approval::validate_grantmatches onapproval::bridge_key, whose source language is the wire id, so the accepted spelling is:Measured: the unqualified pair is refused with
capability_not_granted, naming both declared keys.And the fixture's doc comment claims "
_prdoc/guides/80-operator-recovery.mdand the package README both show an operator typing exactly these". Both of those documents use the qualified form. The comment asserts a correspondence that does not exist — the in-tree-prose-contradicting-the-tree class this project keeps closing.Currently harmless, and the reason is worth stating so nobody over-reacts:
live_host_xamlwritesApproval.bridgesdirectly, and its only two callers (plugin_path_cost,signature_gate) do not depend on the bridge grant taking effect. The next test that uses this fixture for a bridge assertion gets a silently empty grant and will look like a resolver bug.What must NOT be done
plugin enablewalk the tree. The deferral is correct — the walker owns discovery, and the enable path deliberately does not. What is missing is the sentence, not the work.deferred=N. That integer is present today and did not convey it; the finding is precisely that it reads as one metric among five.bridge_keyto accept the unqualified form. The qualification is what stops one package's grant matching another's language id. Fix the fixture, not the door.Related
#75 and #80 C3 (the inert/activation ladder these were found under), #45 (the lane), and the sibling finding filed alongside about gate 6 refusing the deliberate zero-grant activation.
Reported by the #45 lane, 2026-09-07.
Fixed on
masterat4b332ff(mergede425320). Both halves.Half 1 — the silent deferral
deferral_notein the CLI report, on the three-state contract:Each naming the pass that heals it, so an operator has a next step rather than a silence.
The shape was reproduced live with a new
.wpfxfixture claiming an extension no builtin claims — which is the condition this issue describes, and which no existing fixture created.Half 2 — the bridge that never fires
package_fixture::XAML_BRIDGESnow carries the package-qualified keys, andpackage_baseline's duplicate constant is collapsed onto it — so the ladder's ownvalidate_grantgrades the spelling rather than two constants agreeing with each other. M18 (unqualified bridge keys) → RED withcapability_not_granted, the refusal naming both declared keys.This did NOT share a root with #206, and that was measured rather than assumed
I briefed the lane to look for a shared root, since both render "this package produced nothing" opaquely. The mechanisms are disjoint:
generation_build_files.file_id IS NULL).wpfxe2e showsdeferred=1withadmitted > 0deferred = 0—first_activation_admits's fixture reaches it with nothing deferred at allAnd a third state neither issue described falls out of #206's clause: a granted package whose files are all deferred yields
expected = 0→ inert rather than refused. That is this issue's Ruby shape, and it is self-healing — which is also why #206's prescribed rule ("requested some, admitted none, must keep refusing") was slightly too strong, and why the expectation is measured over the projection rather than the request.Mutations
deferred_noteprintln) → RED on the CLI e2e, alone.deferral_notealwaysNone) → RED on unit and e2e — reported as covered twice, not as one kill.deferred == 0return) → RED on the unit test.Binds unmoved by construction (nothing here is a resolver input);
corpus_ratchetexecuted=7 unavailable=0,baseline.jsonmd5 unmoved. Closing.