Skip to content

Pin the one path that reaches an absent fabric-scoped list - #4371

Merged
mergify[bot] merged 2 commits into
mainfrom
test/absent-fabric-scoped-list
Aug 30, 2026
Merged

Pin the one path that reaches an absent fabric-scoped list#4371
mergify[bot] merged 2 commits into
mainfrom
test/absent-fabric-scoped-list

Conversation

@Apollon77

Copy link
Copy Markdown
Collaborator

Follow-up test for #4369, which made validation honor the conformance an element inherits. That change means a fabric-scoped list entry is held to the mandatory FabricIndex the seed field states. This pins the one way that rule can actually be reached, which nothing covered.

Why there is only one path

A remote write cannot reach it. ValidatedElements decides support by whether state holds a value (ValidatedElements.ts:211), so an optional attribute holding undefined stays out of AttributeList (ServerBehaviorBacking.ts:105) and a peer write is declined as unsupported before it reaches the managed-value layer.

That leaves the server's own code writing into the member — a behavior populating a fabric-scoped attribute at startup, which has no session to supply the fabric.

Before #4369 such a write was accepted and stored an entry belonging to no fabric, unusable to anyone reading it. It is now refused and the member is left absent.

Why the fixture is synthetic

No standard cluster states an officially optional fabric-scoped list. Of the 23 fabric-scoped list attributes in the model, the mandatory ones receive a synthesized default and the feature-gated ones become mandatory once their feature is selected, so neither is ever absent. The three that read as optional — AccessControl.AuxiliaryAcl, GroupKeyManagement.GroupcastAdoption, Groupcast.Membership — are optional only because they are provisional, and their conformance becomes mandatory-under-feature once that lifts. They are also refused outright today by the provisional guards.

So the fixture declares the shape directly rather than borrowing a cluster that does not exist.

Testing

Mutation-verified in both directions: reverting astToFunction to the element's own conformance fails this test with expected [Function] to throw ConformanceError; restoring it passes.

npm run format-verify, npm run lint and the full npm test pass.

🤖 Generated with Claude Code

An optional fabric-scoped attribute holding no value is not advertised --
ValidatedElements decides support by whether state holds a value, so it stays
out of AttributeList and a peer write is declined as unsupported. The only way
to reach the member is the server's own code writing into it, which has no
session to supply the fabric.

Before conformance resolved through the base, such a write was accepted and
stored an entry belonging to no fabric, unusable to anyone reading it. It is now
refused and the member is left absent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings August 30, 2026 20:07
@Apollon77 Apollon77 added the automerge Set this label if the PR is ready to automatically merged after approval label Aug 30, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds regression coverage ensuring local writes cannot create fabric-scoped list entries without a mandatory fabricIndex.

Changes:

  • Tests rejection when no fabric is available.
  • Confirms the absent list remains unset.
  • Required build verification was not reported.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@mergify
mergify Bot merged commit 6bc0c20 into main Aug 30, 2026
47 checks passed
@mergify
mergify Bot deleted the test/absent-fabric-scoped-list branch August 30, 2026 20:36
@mergify

mergify Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automerge Set this label if the PR is ready to automatically merged after approval

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants