Skip to content

feat(apptest): personal (my) surface contract - manifest metadata + the runner's my flow - #6343

Merged
delchev merged 1 commit into
masterfrom
feat/apptest-my-flow
Jul 21, 2026
Merged

feat(apptest): personal (my) surface contract - manifest metadata + the runner's my flow#6343
delchev merged 1 commit into
masterfrom
feat/apptest-my-flow

Conversation

@delchev

@delchev delchev commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

The <name>.test manifest now carries a personal block for every entity with a personal: true relation — the scoped <Entity>MyController path, the owner relation name, and the sensitive field list (AppTestIntentGenerator, unit-tested).

The runner gains flows/my.js, always-on when the manifest marks an entity personal, driving the personal surface's wire contract:

  • create through the scoped controller — the owner FK is forced server-side (the payload never sends it, the response must carry it);
  • every sensitive field asserted null on the personal wire (the allow-list serialization is the security boundary — UI hiding alone is cosmetic);
  • the own row present in the personal list;
  • a foreign (ownerless) row 404s through the personal controller and never appears in the personal list (exercised when the owner relation is optional);
  • own-row delete through the personal controller; 404 after.

No identity mapping → the flow skips with a pointer (the personal surface is empty by design, never an error).

Personal UI parity (resolved labels, chat layout, calendar views on the My shell) is deliberately not asserted yet — it tracks the known personal-template parity gaps; this flow pins down the wire contract those pages consume, so the parity fixes can land against a stable base.

Verified live against a running instance via hand-injected manifest blocks matching the new emission: a required-owner document entity (sensitive aggregate stripped from the wire while the power surface keeps it) and an optional-owner entity (the foreign-row 404 branch) — both green.

🤖 Generated with Claude Code

…he runner's my flow

The <name>.test manifest now carries a 'personal' block for every entity with a personal: true
relation (the scoped MyController path, the owner relation, the sensitive field list) - emitted by
AppTestIntentGenerator from the intent, unit-tested. The runner gains flows/my.js driving the wire
contract of that surface: create through the scoped controller (the owner FK is forced
server-side - the payload never sends it), every sensitive field asserted null on the personal
wire (the allow-list is the security boundary), the own row present in the personal list, a
foreign (ownerless) row 404 through the personal controller and absent from the personal list
(exercised when the owner relation is optional), own-row delete through the personal controller.
No identity mapping -> the flow SKIPS with a pointer (the personal surface is empty by design).

Personal UI parity (resolved labels, chat layout, calendar views on the My shell) is deliberately
not asserted yet - it tracks the known personal-template parity gaps; this flow pins the wire
contract those pages consume.

Verified live against a running instance via hand-injected manifest blocks matching the new
emission: a required-owner document entity (sensitive aggregate stripped) and an optional-owner
entity (foreign-row 404 branch) both green.
@delchev
delchev merged commit 5729d31 into master Jul 21, 2026
10 checks passed
@delchev
delchev deleted the feat/apptest-my-flow branch July 21, 2026 11:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant