Repository navigation
Conversation
doublewhy
force-pushed
the
1339-explicit-target-eligibility
branch
5 times, most recently
from
October 9, 2026 15:12
8e32e4d to
4b8794a
Compare
doublewhy
marked this pull request as ready for review
October 9, 2026 15:47
9 of 11 tasks
doublewhy
force-pushed
the
1339-explicit-target-eligibility
branch
3 times, most recently
from
October 9, 2026 20:14
a36ae06 to
94777b1
Compare
This was referenced Oct 9, 2026
doublewhy
force-pushed
the
1339-explicit-target-eligibility
branch
from
October 10, 2026 14:28
94777b1 to
3da6039
Compare
This was referenced Oct 10, 2026
Open
Open
doublewhy
force-pushed
the
1339-explicit-target-eligibility
branch
from
October 13, 2026 03:21
3da6039 to
ab22b8f
Compare
doublewhy
marked this pull request as draft
October 13, 2026 03:21
doublewhy
force-pushed
the
1339-explicit-target-eligibility
branch
from
October 13, 2026 03:54
ab22b8f to
4ac06f1
Compare
doublewhy
marked this pull request as ready for review
October 13, 2026 04:34
This was referenced Oct 13, 2026
9 of 11 tasks
…or suggestions Every indexed declaration kind now has one eligibility category or is explicitly unreferenceable, and each reference purpose admits an explicit set of categories. The declaration index refuses a kind without a decision, so a new section gains no eligibility by default. Objective subjects, interaction and declared effect targets, shared-state refs, and behavior authority scopes narrow; the other purposes keep their accepted declarations. Validation, completion, navigation, and diagnostics share the same purposes, so participant relationship endpoints suggest only unambiguous agents, also in documents that do not validate yet. The reference catalog, parity expectations, and author docs name the purpose tokens, and docs/migration/reference-eligibility.md publishes the inventory and rewrite rules for issue #1339.
Objective subjects, action targets, shared state, and authority scopes now resolve a bare name among every targetable declaration and then require the single match to be eligible, as participant endpoints already did. A bare name that a refused declaration shares therefore stays ambiguous, so narrowing only refuses references: such a name is refused instead of validating and then compiling to no authority-scope address. Variation candidates and completion follow the same rule. Unresolved-reference diagnostics for the narrowed purposes name the purpose instead of "targetable" and list the declarations the reference does name. Each purpose now lists its categories explicitly, and the unused _all_targetable_elements helper is removed. Tests drive the shared bare name through compilation, the mixed-control and inject-delivery scopes, and every specialized purpose through composition and instantiation.
Navigation counted a value in a purpose-bearing field by declaration kind, so an ambiguous bare participant endpoint or a bare name shared with a condition was reported under the eligible declaration, and operating scopes were attributed through the general aliases. A value is now an occurrence of a qualified symbol only when the field's resolver resolves it to exactly that declaration: the declaration index for the field's purpose, or the operating-scope aliases. Documents that do not validate yet resolve among their top-level entries, which completion now shares. Participant-relationship scope_refs complete only the operating scopes both endpoints hold and authority_basis_refs only the source's anchors, variation candidate references complete and navigate in their target slot's section or purpose, and an ambiguity diagnostic lists the eligible candidates before the declarations the purpose refuses. The migration note lists every declaration kind that effect target_refs now refuse and drops test bookkeeping; references.md section 7 states which diagnostics carry the purpose and the named declarations.
An inject delivery's control_authority_scope_refs must equal its target controller state's scope_refs, so the refusal is the state's diagnostic or a disagreement with the state, not a named-reference diagnostic of its own.
Validation resolves a variation point's target owner in its slot's owner section and each governed allowed ref in the slot's candidate section, but completion and navigation still treated both as general targets. Completion therefore offered owners and allowed refs that validation refuses, navigation reported a refused value as an occurrence, and a valid bare owner or allowed ref whose name a condition shares was reported nowhere. Both fields now select their section from the authored slot, as a candidate's reference already did. Tests drive every owner and allowed-ref suggestion through validation and navigation, the refused values, and the shared bare names. The owner completion assertion of the variation-point language-service test now expects only the slot's owner section. The shared-name ambiguity test also checks what the compiled model keeps for each field, and the decision-table test registers runtime-inventory records through the declaration index and rejects a kind that is both categorized and unreferenceable.
…itory The SDL sections guide still said objective targets may name any element except variables, objectives and workflows. It now names the eligible objective subjects, links the reference purposes, and says that a bare name a refused declaration shares stays ambiguous. The migration note's editor section covers variation owners and allowed refs, says that operating-scope fields complete and navigate only in a document that validates structurally, and no longer claims that scope_refs completion applies every validator bound. The inventory is rerun with per-repository commits and counts, covering env-packs and adapters at dev. The reference catalog's authority-scope row names the further bound on mixed-control state scope_refs, and rule 5 covers variation owners.
Every relationship type and typed detail field now has one explicit endpoint decision. Ten endpoint purposes admit declaration kinds (node, identity domain, forest, authority and facade, deployment tenant, node service, runtime application, database and mail service endpoints), resolve among relationship-endpoint candidates, and combine by conjunction when a type and its details both narrow one side. Runtime child records are tested by a family-qualified eligibility kind inside the policy; published declaration kinds do not change. The validator's application, database and mail resolvers read the policy's sets, and an all-kinds fixture pins the identity, topology and tenancy modules' accepted kinds to the policy. The Relationship schema description states the narrowed endpoints (description only, five schemas).
…ts in the editor Completion and navigation select each relationship endpoint's purposes from its type and typed details, and publish a conjunction as one composite context token. A document that does not validate yet resolves through an index that the validator's index builder makes from the entries that validate on their own, so navigation reports an occurrence only for a declaration that index resolves exactly. The language-service helpers accept an optional document path. With it, local imports compose through the existing composition, and a registry import is refused in editor path mode without any fetch.
…hare an editor label helper
…tidy test exception blocks
References §7 rule 5 now states that composition leaves a detection definition's source_artifact_ref unchanged, tracked by #1579.
doublewhy
force-pushed
the
1339-explicit-target-eligibility
branch
from
October 13, 2026 15:15
3701904 to
a410aad
Compare
This was referenced Oct 13, 2026
doublewhy
force-pushed
the
1339-explicit-target-eligibility
branch
from
October 14, 2026 05:20
ba40a58 to
45d9e4c
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The participant identity audit found two defects. F4: one
targetableboolean, expanded by exclusion, served every reference purpose. F5: completion ignored validation's policy; aparticipantrelationship endpoint offered organizations, propositions and the relationship itself.This PR delivers the whole #1339 done-when: validation, composition, instantiation, completion, navigation and diagnostics read one explicit policy.
Breaking authoring change. Four purposes narrow: objective subjects, action targets (including effect
target_refs[]naming a declaration), shared state and authority scopes. Narrowing only refuses references; typed relationship endpoints refuse nothing new. An inventory of 200 YAML documents across rae, env-packs, lilrae and adapters found identical validation outcomes before and after.Requirement UIDs
## Requirementssection and no scope file.Related Issues
Closes #1339
Merge order: this merges first; #1484, #1584, #1576 and #1592 rebase onto it once it merges.
Related: #1338, #1340, #1341, #220, #1517. Follow-ups: #1503, #1511, #1577, #1578, #1579.
ADR Impact
Changes
pathcomposes local imports and refuses registry imports before any request.Lane for every row: canonical test-shard.
_relationship_endpoint_policy.py:relationship_endpoint_purposestest_issue_1339_relationship_endpoints.py(fails at collection ondeva391904)_declarations.py:resolve_fortest_an_unclassified_kind_is_eligible_for_nothing_and_cannot_register(fails: noReferencePurpose)_reference_targetability.pytest_a_targeted_participant_gains_no_participation_authority_or_visibility(fails: DID NOT RAISE)_language_context.pytest_participant_relationship_completion_offers_only_participants(fails: offersaction_contracts.probe)_operating_scope_index.pytest_every_indexed_section_and_runtime_family_has_an_explicit_decision(fails: noDECLARATION_CATEGORIES)language_service.pytest_issue_1339_editor_imports.py(14 of 16 fail on a391904),test_issue_1339_endpoint_editor.py(fails at collection)test_the_two_stage_matrices_cover_every_reference_purpose_in_every_stage(fails at collection)Test Plan
uv run --project implementations/python --frozen --all-extras python -m pytest <modules> -q: the five #1339 modules gave 322 passed; 26 regression modules 1821 passed, 1 skipped; evidence modules 226 passed. Fail-before: each matrix test fails as its row states withimplementations/python/packagesatdev348c490; row 3's test now also refuses red's behavior surfaces as action targets, whichdevaccepts. Evidence: both families re-recorded withpython -m tools.research_capture recordondev348c490; both checkers pass.nox -s verify-fast-feedback -- --base-rev origin/dev,nox -s lint,make policy,nox -s docs-localandnox -s contractspass.Ground Control Checks
make policypasses at this head.Traceability
implementations/python/packages/raes/:_reference_targetability.py,_relationship_endpoint_policy.py,_declarations.py,_operating_scope_index.py,validator/,_language_context.py,_language_metadata.py,language_service.py,_language_references.py,composition/_expand.py,_composition_budget.py,parser.py,formatting.py,module_registry/,relationships.py; andspecs/sdl/references.mdimplementations/python/tests/: the fivetest_issue_1339_*.pymodules,fixtures/issue-1339-declaration-kinds.sdl.yaml, expectation-only edits in six existing modulesChecklist
specs/sdl/references.mdsection 7, tested over the all-kinds fixture.Relationshipdescriptions, with ledger records.feat!because authoring narrows.Documentation
Updated:
specs/sdl/references.md,docs/migration/reference-eligibility.mdand nine more pages.