Skip to content

spec(AST-086): FR13 announces content revealed outside React on the owner's next render - #8325

Merged
cixzhang merged 2 commits into
mainfrom
spec/ast086-fr13-hidden-reveal
Oct 25, 2026
Merged

cixzhang merged 2 commits into
mainfrom
spec/ast086-fr13-hidden-reveal

Conversation

@cixzhang

Copy link
Copy Markdown
Contributor

Exact decision needed

How spec:AST-086 FR13 treats own content that becomes visible without its owner re-rendering, such as an ancestor's hidden attribute removed outside React.

Existing authority searched

  • spec:AST-086 FR13 (current): own-content announcements happen once per occasion, do no work while hidden, and leave nothing behind; architecture:react-component-runtime INV10 owns where the work lives.
  • architecture:react-component-runtime INV5 (resource ownership) and INV10 (one well-behaved module, no per-adopter Effects or observers).
  • Search terms: hidden, reveal, re-render, observer, own-content announcement. Overlapping open pull requests: the AST-094 revision (spec(AST-094): touch presentations feel native by default #8316) may touch AST-086 text elsewhere; none edits FR13.

Decision

FR13 gains one sentence: content revealed without a re-render of its owner is announced on the owner's next render, and nothing watches for the reveal while the content is hidden (architecture:react-component-runtime INV5, INV10). The FR13 verification row gains that state and its failure signals. This is a direct consequence of the existing FR13 decision (one contained, well-behaved module with no new Effects).

Rejected alternatives

  • Observing hidden content to announce the moment it is revealed.

Claim scope and non-goals

FR13 only. Action announcements, FR14 modal delivery, and the module's internals are unchanged.

Evidence and implementation relationship

Implementation follows in the adopting component work. No implementation is included.

Writing rubric results

  • R1 narration: none.
  • R2 research in the record: none.
  • R3 evidence naming a change: none; the verification row names states.
  • R4 rejected alternatives over one line or outside a decision: none in the record.
  • R5 pull request or issue references remaining: none.
  • R6 ruled open questions still listing options: none.

Scope

  • This PR contains specification records only.
  • It records observable behavior and preserves equivalent internal implementations.
  • Any named internal mechanism is intentionally public, names its dependent caller/system, and explains why an equivalent implementation would not satisfy the contract.
  • Verification states the evidence layer and failure signal without prescribing CI job/workflow topology.
  • It records one intentional durable decision, not a rescue for a separable tagalong.
  • The canonical knowledge owner, affected current claims, and overlapping open work are named; any ownership collision is resolved or called out for human decision.
  • Adjacent API, visual, accessibility, composition, and implementation facts remain outside scope unless this exact decision depends on them.
  • Public text and artifacts contain no internal Meta context.

Validation

  • pnpm check:knowledge (CI lint)
  • Prettier
  • git diff --check

…wner's next render, with nothing watching while hidden
@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 745abfe

@vercel

vercel Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Ready Ready Preview Oct 25, 2026 12:18am UTC

Request Review

@astracat-bot

astracat-bot Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🟢 Reviewed (for maintainers only) Oct 25, 2026, 12:42 AM UTC

@github-actions github-actions Bot added the spec-auto-merge Auto-merge was enabled by the spec owner gate label Oct 24, 2026
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Oct 24, 2026
@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

PR Analysis Report

Previews ready: Storybook and Sandbox were built with this PR's docsite. CI evidence will be added when available.

View Storybook for this PR · View Sandbox for this PR

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Requesting changes: the new FR13 sentence is owner-approved, but FR12 now contradicts it. FR12 still says own content "announces once per later appearance", while FR13 now announces content revealed without an owner re-render only on that owner's next render and lets nothing watch for it while hidden, so a reveal the owner never re-renders (for example an empty state inside an uncontrolled Collapsible that is opened later) can never get the announcement FR12 promises. Please name that exception in FR12, or have FR13 say that FR12's announcement for such a reveal waits for the owner's next render, then re-approve the new head with /approve-spec <full head SHA>.

[Automated review]

Comment on lines +134 to +137
starts, keep their own owner. Content revealed without a re-render of its
owner, such as when an ancestor's `hidden` attribute is removed outside
React, is announced on the owner's next render, and nothing watches for the
reveal while the content is hidden (`architecture:react-component-runtime`

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This sentence makes FR12's "announces once per later appearance" (line 124) impossible for a reveal its owner never re-renders, such as an empty state inside an uncontrolled Collapsible that is opened later, because nothing may watch while the content is hidden. Consider naming the exception in FR12, for example "(for content revealed without a re-render of its owner, on the owner's next render, as FR13 provides)", or saying here that FR12's announcement for such a reveal is made then.

@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 62d1154

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Recommending approval: FR12 now gives an appearance its owner does not re-render for the same next-render moment that the new FR13 sentence sets, which resolves the conflict raised on the previous head. Both sentences carry exact-head owner approval, and the record passes knowledge validation. Nothing else is required; if you edit the description again, its "Claim scope" line still reads "FR13 only" although FR12 changes too.

[Automated review]

@cixzhang
cixzhang merged commit 47c4cbf into main Oct 25, 2026
53 checks passed
@github-actions
github-actions Bot deleted the spec/ast086-fr13-hidden-reveal branch October 25, 2026 06:20

This branch was successfully deployed

1 active deployment
Preview — 62d11546 Deployed Oct 25, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot. spec-auto-merge Auto-merge was enabled by the spec owner gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant