You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
morph#386 is fixed: DynamicForm now draws a oneOf-of-consts enum as a
combo box and refuses a value outside the set. The kanban rung is the place
that recorded the gap, and four of its files still assert it as a present-tense
fact.
What now says something false
examples/kanban/README.md, "morph subsystems exercised" — the rule-2
justification table:
| `gui/qml/MembersView.qml`'s role pickers (`:70`, `:101`) | `SetMemberRole` | **(a).** The renderer cannot draw an `enum class`. [#386] |
| `gui/qml/RulesView.qml`'s add-rule row (`:105`, `:113`) | `CreateRule` | **(a).** Same enum gap. [#386] |
examples/kanban/gui/qml/MembersView.qml:12-24 — "the shipped DynamicForm
renders that as a plain free-text field … it stays until morph#386 lands.
Everything else about this view is already schema-shaped and converts in one
step once it does."
examples/kanban/gui/qml/RulesView.qml:14-28 — the same, for CreateRule::mutationType, plus: "Converting this view is therefore one enum
fix plus one DTO field type."
examples/kanban/gui_lib/kanban_schemas.hpp:30-38 — the "What is
deliberately absent" doc comment: SetMemberRole and CreateRule are kept
out of the schema document because "the shipped DynamicForm renders [a
closed oneOf of consts] as a free-text field, accepting and
submitting any string at all."
Each of those is a statement about the framework, not about kanban, and each is
now wrong. examples/IMPLEMENTATION.md rule 2 requires justification (a) to
name a filed gap; the gap it names is closed, so the justification no longer
holds and the two screens should convert.
What the conversion is
SetMemberRole is ready as-is: three members, one of them the enum the fix now
draws. CreateRule needs one more decision the rung's own comment already
records — triggerColumnId is a user-chosen foreign key, which rule 3 says
should be a morph::forms::Choice<…, "GetBoardState"> rather than a raw id.
That is a DTO change, not a renderer one.
Both actions then join kanban_schemas.hpp's document, and tests/test_gui_forms_render.cpp — which already drives each converted form in
a real QML engine over a real backend and asserts the controls drawn, the body
assembled and the row written — gains two cases.
Verification status: inferred from reading, not run
Measured: the morph#386 fix, in the branch that closes it, renders schemaJson<kanban::SetMemberRole>()'s role as a ComboBox with the three Viewer/Member/Manager rows and leaves the form !ready for role = "Emperor" — src/qt/forms/tests/tst_DynamicFormEnumChoice.qml pins
that against the schema pasted verbatim from schemaJson<>().
Not verified: I did not build or run either kanban screen against the
fixed renderer, and did not attempt the conversion. The claim here is only
that the four passages above are now false and that the rule-2 justification
they support has lapsed.
Not verified: whether GetBoardState's reply shape actually satisfies Choice's option-row extraction for triggerColumnId. RulesView.qml's own
comment asserts it returns columns as its first array member; I did not
check.
What would close this
Both screens rendering through DynamicForm, both actions in kanban_schemas.hpp, test_gui_forms_render.cpp covering them, and the four
passages above rewritten or deleted. Re-open if a rung again cites a closed
issue as a live justification under rule 2.
morph#386 is fixed:
DynamicFormnow draws aoneOf-of-consts enum as acombo box and refuses a value outside the set. The kanban rung is the place
that recorded the gap, and four of its files still assert it as a present-tense
fact.
What now says something false
examples/kanban/README.md, "morph subsystems exercised" — the rule-2justification table:
and the paragraph under it: "
DynamicFormrenders that as a plainTextField… so they stay until [forms: DynamicForm renders a C++ enum class as a free-text field, and its gate accepts values outside the set #386] lands."examples/kanban/gui/qml/MembersView.qml:12-24— "the shipped DynamicFormrenders that as a plain free-text field … it stays until morph#386 lands.
Everything else about this view is already schema-shaped and converts in one
step once it does."
examples/kanban/gui/qml/RulesView.qml:14-28— the same, forCreateRule::mutationType, plus: "Converting this view is therefore one enumfix plus one DTO field type."
examples/kanban/gui_lib/kanban_schemas.hpp:30-38— the "What isdeliberately absent" doc comment:
SetMemberRoleandCreateRuleare keptout of the schema document because "the shipped
DynamicFormrenders [aclosed
oneOfofconsts] as a free-text field, accepting andsubmitting any string at all."
Each of those is a statement about the framework, not about kanban, and each is
now wrong.
examples/IMPLEMENTATION.mdrule 2 requires justification (a) toname a filed gap; the gap it names is closed, so the justification no longer
holds and the two screens should convert.
What the conversion is
SetMemberRoleis ready as-is: three members, one of them the enum the fix nowdraws.
CreateRuleneeds one more decision the rung's own comment alreadyrecords —
triggerColumnIdis a user-chosen foreign key, which rule 3 saysshould be a
morph::forms::Choice<…, "GetBoardState">rather than a raw id.That is a DTO change, not a renderer one.
Both actions then join
kanban_schemas.hpp's document, andtests/test_gui_forms_render.cpp— which already drives each converted form ina real QML engine over a real backend and asserts the controls drawn, the body
assembled and the row written — gains two cases.
Verification status: inferred from reading, not run
Measured: the morph#386 fix, in the branch that closes it, renders
schemaJson<kanban::SetMemberRole>()'sroleas aComboBoxwith the threeViewer/Member/Managerrows and leaves the form!readyforrole = "Emperor"—src/qt/forms/tests/tst_DynamicFormEnumChoice.qmlpinsthat against the schema pasted verbatim from
schemaJson<>().Not verified: I did not build or run either kanban screen against the
fixed renderer, and did not attempt the conversion. The claim here is only
that the four passages above are now false and that the rule-2 justification
they support has lapsed.
Not verified: whether
GetBoardState's reply shape actually satisfiesChoice's option-row extraction fortriggerColumnId.RulesView.qml's owncomment asserts it returns
columnsas its first array member; I did notcheck.
What would close this
Both screens rendering through
DynamicForm, both actions inkanban_schemas.hpp,test_gui_forms_render.cppcovering them, and the fourpassages above rewritten or deleted. Re-open if a rung again cites a closed
issue as a live justification under rule 2.