@@ -50,9 +50,44 @@ exactly, record an explicit approximation and reason; never silently rename butt
5050"drag-style", call buttons "handles", or put copy in the app that promises an interaction
5151the controls do not provide.
5252
53+ Convert every concrete requested or approved-plan action into an Action Contract. Treat
54+ create, edit, delete, search, filter, flag, review, approve, reject, and similar verbs as
55+ separate flows with their own visible entry point, owning screen, handler, required data
56+ effect, and observable result. Broad words such as "manage", "maintain", or "track" do not
57+ require universal CRUD across every entity. However, a role-scoped requirement to manage
58+ all records of the app's primary entity is operational: plan a reachable management list,
59+ record detail, correction/update, and remove/cancel paths unless the request narrows the
60+ allowed operations or the domain makes a destructive action inappropriate. A review or
61+ approval workflow that distinguishes final approved records requires both approve and
62+ reject/decline decisions and visible resulting statuses unless the request explicitly
63+ defines a one-way review. Once included, each action must be planned end to end rather
64+ than represented by a screen or entity alone.
65+
66+ Treat temporal qualifiers and outputs as behavior, not decorative copy. Quarterly,
67+ monthly, annual, cycle, period, or similar requirements need a shared field or derivation
68+ that is visible on affected forms and records and can distinguish the active period.
69+ Export, download, print, or report requests need their own Action Contract with the exact
70+ eligible-record predicate, output fields, trigger, and visible completion evidence. If
71+ discovered controls and data sources cannot provide the requested output mechanism, plan
72+ an explicit approximation rather than omitting the action.
73+
74+ Decompose compound behavior into acceptance paths. Reordering, moving, constraints,
75+ derived metrics, version comparison, category management, and ranking each need an initial
76+ state, success path, boundary or rejection path when applicable, shared source of truth,
77+ and visible evidence. Record those paths in the Action Contract rather than assuming the
78+ builder will infer them from a feature name.
79+
80+ Infer the minimum supporting setup actions needed to exercise requested behavior when the
81+ app uses local/mock mutable data. For example, an org restructuring app needs a reachable
82+ way to add teams and people with manager relationships before reassignment, metrics, and
83+ version comparison can be meaningfully tested. These supporting actions are required
84+ dependencies, not universal CRUD. Add them to Requirement Coverage and Action Contracts.
85+
5386Use ` ModernTabList ` only when it switches visible panels within one screen. For navigation
5487between separate screen files, plan a repeated ModernButton row with direct `OnSelect:
55- =Navigate(...)` actions and an explicit current-screen appearance.
88+ =Navigate(...)` actions and an explicit current-screen appearance. Put every primary
89+ destination in that row and keep it in the initial viewport at each supported breakpoint,
90+ or use an immediately visible menu button that exposes the complete destination set.
5691
5792## 1. Read Guidance
5893
6297- ` ${PLUGIN_ROOT}/references/ControlGuide.md ` — control selection, per-control properties, enums
6398- ` ${PLUGIN_ROOT}/references/LayoutGuide.md ` — responsive layout, scrolling, colour contrast
6499- ` ${PLUGIN_ROOT}/references/PowerFxGuide.md ` — state, events, named formulas, mock data
100+ - ` ${PLUGIN_ROOT}/references/BehaviorGuide.md ` — advanced behavior acceptance contracts
65101- ` ${PLUGIN_ROOT}/references/DesignGuide.md ` — aesthetic direction and design process
66102- ` ${PLUGIN_ROOT}/references/PlanTemplates.md ` — the exact shape of every artifact you write
67103
@@ -115,6 +151,16 @@ Before writing plans:
115151 If validation must wait for a submit attempt, combine one attempt flag with the
116152 current invalid expression; do not maintain or clear separate validity flags in each
117153 input's ` OnChange ` .
154+ - For every mutation, specify how the screen reflects the new state after success.
155+ Updating data without refreshing or updating the collection bound to the visible
156+ list is incomplete. A success notification alone does not satisfy an outcome that
157+ requires the created, edited, deleted, or transitioned record to be visible.
158+ - Apply ` ${PLUGIN_ROOT}/references/BehaviorGuide.md ` to every advanced behavior. Name
159+ each required success and boundary path, the shared source of truth, and the control
160+ that provides visible acceptance evidence.
161+ - For every named core visualization, specify its bound source, first-render records,
162+ relationship or comparison encoding, populated-state controls, and truthful empty
163+ state. Do not plan blank containers or decorative rectangles as visualization content.
1181647 . Define data-field semantics once and reuse them. If a task has ` ScheduledDate ` ,
119165 ` DueDate ` and ` CompletedDate ` , state which field drives calendar placement, which date
120166 the task list displays, and which field the monthly report groups by. Seed data,
@@ -165,6 +211,10 @@ For every screen brief, state explicitly:
165211- That responsive layout properties derive directly from ` App.Width ` , ` Parent.Width ` or
166212 ` Self.Width ` . Do not initialize layout variables such as ` varIsMobile ` or ` varColumns `
167213 in ` OnVisible ` ; they can be unset in Studio and become stale after resize.
214+ - That the sole screen root always uses ` Width: =Parent.Width ` , ` Height: =Parent.Height ` ,
215+ ` LayoutMinWidth: =0 ` , and ` LayoutMinHeight: =0 ` . Breakpoint sizing belongs on children;
216+ never put a narrow-width branch, button width, panel width, or fixed desktop width on
217+ the root.
168218- That the root container scrolls (` LayoutOverflowY: =LayoutOverflow.Scroll ` ).
169219- That the screen-level ` Children: ` list contains only that root, with every visible
170220 section nested under the root's ` Children: ` list.
@@ -178,13 +228,27 @@ For every screen brief, state explicitly:
178228- A ` TemplateSize ` for every gallery that fits its row template ** at each width branch** ,
179229 counting a ` ModernCard ` 's image band. A dense desktop branch is the usual place card
180230 titles disappear.
231+ - For every mutation, where its observable result appears immediately afterward. Keep the
232+ result in the current viewport, navigate to the bound list/detail, or provide a visible
233+ control that takes the user there. Do not place the only proof far below a long form.
181234- For every GridLayout: the exact ` LayoutGridColumns ` , ` LayoutGridRows ` ,
182235 ` LayoutGridColumnMinWidth ` , ` LayoutGridRowMinHeight ` and ` Height ` formulas, plus every
183236 explicit child row/column position. The row count and height must reuse the same column
184237 expression.
185238- For every fixed-height section and every horizontal row with four or more substantive
186239 children, include a per-breakpoint layout budget: child groups, minimum widths/heights,
187240 gaps, padding and the resulting section size. Presence of a breakpoint is not enough.
241+ - For every horizontal container, prove that visible child minimum widths plus gaps and
242+ padding fit at desktop, tablet, and phone widths, or specify the wrap/stack branch that
243+ makes them fit. For ManualLayout, provide bounds for every simultaneously visible
244+ control and prove they neither overlap nor extend beyond the parent at each supported
245+ width.
246+ - For every text-bearing control, state whether it is single-line or wrapping and provide
247+ a width/height budget for its longest planned or data-bound value.
248+ - Define one shared visual contract: title, section-heading, body, and caption type roles;
249+ spacing scale; surface and border treatment; primary/secondary action styling; and
250+ desktop/tablet/phone content density. Builders must copy these exact values rather than
251+ inventing screen-local themes.
188252- Group each visible label with its corresponding input in one field container before
189253 the row stacks.
190254- For bounded local galleries of about ten rows or fewer, size the gallery to all rows
@@ -253,6 +317,7 @@ Follow `${PLUGIN_ROOT}/references/PlanTemplates.md`.
253317Write only orchestration information:
254318
255319- Mode and requirements
320+ - Requirement Coverage and Action Contracts
256321- Working directory
257322- Compact discovery summary
258323- Dispatch table
@@ -291,6 +356,8 @@ Each brief contains only what that builder needs:
291356
292357- Action, logical screen, target file, YAML key, and control name prefix
293358- Screen specification or exact edit list
359+ - Every Action Contract owned or affected by the screen, including the visible entry
360+ point, exact handler behavior, data effect, and observable result
294361- Relevant portions of data source schemas and API details
295362- For every control type used on that screen: the complete list of valid input
296363 property names, plus the full ` Enum name: ` and the ** compile-ready enum literal** for
0 commit comments