feat(design): in-frame approve/reject control on every published frame - #312
Merged
Conversation
The frames published fine but had no way to act on them — the reviewer could walk a flow and had nowhere to approve or reject it. The approval mechanism was deferred; this builds the first, manual increment. build-frames-site.mjs now injects a fixed approval bar into EVERY published .html of a feature (not just the index), derived from the manifest's build.flows. Each pending flow gets Approve / Reject buttons that open a prefilled GitHub issue (feature, flow, route, decision, stamp) — a durable, auditable record a workflow or maintainer reads to flip the per-flow `approved`. Approved flows show their state and drop the buttons. Also fixes approvalOf(): it read per-flow approval from manifest.frames, but the source of truth is build.flows — so the index pills were reading the wrong field and showing every multi-flow feature as unapproved-by-default regardless. Now both the index pills and the in-frame bar read build.flows via one flowsOf() helper, so they can't disagree. Prefill uses plain query params (title/body) — the only issue prefill that is 100% reliable. Buttons open in a new tab so the reviewer keeps their place. Follow-up (not here): the design-approval workflow that reads the issue and flips `approved` automatically; until it lands, a maintainer flips it. Refs #294 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session-Id: f636c22e-1cd7-401e-8843-97e3e3a4ba01
Contributor
Automated code review (gate-code-review)Credit balance is too low Report-only — this check never blocks merge. |
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.
You navigate the frames and there is nowhere to approve or reject — the approval mechanism was deferred. This is the first, manual increment of it.
What changes
build-frames-site.mjsinjects a fixed approval bar into every published.htmlof a feature (not just the index), derived from the manifest'sbuild.flows. Each pending flow gets Approve / Reject buttons that open a prefilled GitHub issue (feature · flow · route · decision · stamp) — a durable, auditable record. Approved flows show their state and drop the buttons.Also fixes
approvalOf(): it read per-flow approval frommanifest.frames, but the source of truth isbuild.flows. The index pills were reading the wrong field. Both the pills and the bar now readbuild.flowsvia oneflowsOf()helper, so they cannot disagree.How you use it
Walk a flow at https://izzywdev.github.io/FuzeFront/ → the bar is pinned at the bottom → click Approve or Reject on a flow → a prefilled issue opens → submit it. A maintainer (or the follow-up workflow) reads the issue and flips
approvedin the manifest.Follow-up (not in this PR)
The
design-approvalworkflow that reads the issue and flipsapprovedautomatically (with the auth/staleness/idempotency gates from the plan). Until then a maintainer flips it — the record already exists in the issue.Refs #294
🤖 Generated with Claude Code