@owlmeans/viable-common 0.0.25 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +3 -3
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/agent-presentation/SKILL.md +1 -1
  4. package/agent-meta/skills/viable-common/SKILL.md +111 -8
  5. package/build/blueprint/case.d.ts.map +1 -1
  6. package/build/blueprint/case.js +58 -16
  7. package/build/blueprint/case.js.map +1 -1
  8. package/build/blueprint/resolve.d.ts.map +1 -1
  9. package/build/blueprint/resolve.js +3 -0
  10. package/build/blueprint/resolve.js.map +1 -1
  11. package/build/blueprint/types.d.ts +44 -2
  12. package/build/blueprint/types.d.ts.map +1 -1
  13. package/build/blueprint/types.js +35 -1
  14. package/build/blueprint/types.js.map +1 -1
  15. package/build/branding.d.ts +5 -1
  16. package/build/branding.d.ts.map +1 -1
  17. package/build/branding.js +6 -0
  18. package/build/branding.js.map +1 -1
  19. package/build/connect/consts.d.ts +21 -0
  20. package/build/connect/consts.d.ts.map +1 -1
  21. package/build/connect/consts.js +21 -0
  22. package/build/connect/consts.js.map +1 -1
  23. package/build/connect/entrypoints.d.ts +15 -1
  24. package/build/connect/entrypoints.d.ts.map +1 -1
  25. package/build/connect/entrypoints.js +16 -1
  26. package/build/connect/entrypoints.js.map +1 -1
  27. package/build/connect/references.d.ts +14 -1
  28. package/build/connect/references.d.ts.map +1 -1
  29. package/build/connect/references.js +4 -0
  30. package/build/connect/references.js.map +1 -1
  31. package/build/connect/schemas.d.ts +12 -1
  32. package/build/connect/schemas.d.ts.map +1 -1
  33. package/build/connect/schemas.js +27 -1
  34. package/build/connect/schemas.js.map +1 -1
  35. package/build/connect/types.d.ts +27 -0
  36. package/build/connect/types.d.ts.map +1 -1
  37. package/build/consts.d.ts +1 -1
  38. package/build/consts.d.ts.map +1 -1
  39. package/build/consts.js +3 -0
  40. package/build/consts.js.map +1 -1
  41. package/build/metadata/types.d.ts +8 -0
  42. package/build/metadata/types.d.ts.map +1 -1
  43. package/build/metadata/types.js.map +1 -1
  44. package/build/planning/helpers.d.ts +2 -1
  45. package/build/planning/helpers.d.ts.map +1 -1
  46. package/build/planning/helpers.js +5 -2
  47. package/build/planning/helpers.js.map +1 -1
  48. package/build/planning/index.d.ts +1 -0
  49. package/build/planning/index.d.ts.map +1 -1
  50. package/build/planning/index.js +1 -0
  51. package/build/planning/index.js.map +1 -1
  52. package/build/planning/landing.d.ts +25 -0
  53. package/build/planning/landing.d.ts.map +1 -0
  54. package/build/planning/landing.js +38 -0
  55. package/build/planning/landing.js.map +1 -0
  56. package/build/planning/schemas.d.ts.map +1 -1
  57. package/build/planning/schemas.js +13 -0
  58. package/build/planning/schemas.js.map +1 -1
  59. package/build/planning/types.d.ts +28 -3
  60. package/build/planning/types.d.ts.map +1 -1
  61. package/build/scaffold/consts.d.ts +8 -0
  62. package/build/scaffold/consts.d.ts.map +1 -1
  63. package/build/scaffold/consts.js +7 -0
  64. package/build/scaffold/consts.js.map +1 -1
  65. package/build/scaffold/schemas.d.ts.map +1 -1
  66. package/build/scaffold/schemas.js +257 -12
  67. package/build/scaffold/schemas.js.map +1 -1
  68. package/build/scaffold/types.d.ts +119 -4
  69. package/build/scaffold/types.d.ts.map +1 -1
  70. package/build/skills/catalogue.d.ts.map +1 -1
  71. package/build/skills/catalogue.js +128 -24
  72. package/build/skills/catalogue.js.map +1 -1
  73. package/build/skills/consts.d.ts +5 -0
  74. package/build/skills/consts.d.ts.map +1 -1
  75. package/build/skills/consts.js +8 -0
  76. package/build/skills/consts.js.map +1 -1
  77. package/build/skills/roles.d.ts.map +1 -1
  78. package/build/skills/roles.js +11 -5
  79. package/build/skills/roles.js.map +1 -1
  80. package/build/types.d.ts +30 -0
  81. package/build/types.d.ts.map +1 -1
  82. package/package.json +8 -8
  83. package/src/blueprint/case.ts +64 -16
  84. package/src/blueprint/resolve.ts +3 -0
  85. package/src/blueprint/types.ts +57 -1
  86. package/src/branding.ts +6 -0
  87. package/src/connect/consts.ts +22 -0
  88. package/src/connect/entrypoints.ts +26 -4
  89. package/src/connect/references.ts +16 -3
  90. package/src/connect/schemas.ts +33 -4
  91. package/src/connect/types.ts +28 -0
  92. package/src/consts.ts +3 -0
  93. package/src/metadata/types.ts +8 -0
  94. package/src/planning/helpers.ts +5 -2
  95. package/src/planning/index.ts +1 -0
  96. package/src/planning/landing.ts +43 -0
  97. package/src/planning/schemas.ts +13 -0
  98. package/src/planning/types.ts +29 -3
  99. package/src/scaffold/consts.ts +10 -0
  100. package/src/scaffold/schemas.ts +262 -13
  101. package/src/scaffold/types.ts +105 -5
  102. package/src/skills/catalogue.ts +129 -24
  103. package/src/skills/consts.ts +8 -0
  104. package/src/skills/roles.ts +11 -5
  105. package/src/types.ts +30 -0
  106. package/tests/blueprint.spec.ts +98 -0
  107. package/tests/branding.spec.ts +21 -1
  108. package/tests/connect-entrypoints.spec.ts +44 -5
  109. package/tests/planning.spec.ts +56 -1
  110. package/tests/scaffold.spec.ts +131 -0
  111. package/tests/skills.spec.ts +65 -2
@@ -570,39 +570,66 @@ carries. Introducing a second spelling orphans every grant made against the firs
570
570
  files, not a copy of their own. They are already there: import them, never delete, rename or
571
571
  move one, and never re-add a primitive the directory already carries.
572
572
  - Styling is Tailwind utility classes. There are no CSS modules and no styled-components.
573
+ - The GROUND is white in light mode and black in dark mode, and it stays that way: every page,
574
+ section, band and header sits on \`bg-background\`. Colour comes from ONE product accent —
575
+ \`bg-primary\` / \`text-primary\` — and only on the primary button, a section's small label, the rule
576
+ over the first step and a check mark. It never comes from a background, a tint or a band.
577
+
578
+ <section className="bg-primary/10 py-20">...</section> // WRONG
579
+ <section className="bg-gradient-to-b from-amber-50 to-white py-20">...</section> // WRONG
580
+ <section className="border-t py-20">...</section> // right
581
+
582
+ - Depth comes from exactly three things: a 1px HAIRLINE (\`border\`, the \`--border\` token), the
583
+ NEUTRAL TILE (\`bg-muted\` — the only tinted surface: feature tiles, testimonial tiles, result
584
+ rows), and ONE shadow, \`shadow-floating\`, which belongs to the one card that floats (the landing
585
+ gate). An ordinary card is \`rounded-xl border bg-card\` and carries no shadow. There are no
586
+ gradients, no glass, no backdrop blur, no glow and no coloured shadows anywhere in the interface.
587
+
588
+ <div className="rounded-xl bg-white/60 shadow-2xl backdrop-blur-md p-6" /> // WRONG
589
+ <div className="rounded-xl border bg-card p-6" /> // right
590
+ <li className="rounded-[32px] bg-muted p-10" /> // right — a tile
591
+
592
+ - TYPE carries the brand. Headings are the theme's heavy grotesk — \`font-extrabold\` with tight
593
+ negative tracking (\`tracking-tight\`, or \`tracking-[-0.045em]\` on a section heading) and
594
+ \`text-balance\`; paragraphs are \`text-muted-foreground\` with \`text-pretty\` and a readable
595
+ measure (\`max-w-[52ch]\`); whitespace is generous. Never set a different font family.
596
+ - A section opens with a small LABEL — a plain \`<p className="text-[15px] font-bold text-primary">\`
597
+ — then its \`<h2>\`. A label is text: never a chip, a pill or a badge.
598
+ - Buttons are pills. The primary one is \`cta-btn\` (on an \`<a>\` or a bare \`<button>\`, never on a
599
+ shadcn \`Button\`, whose own \`bg-\` utility would win); the secondary one is
600
+ \`rounded-full border-[1.5px] border-foreground text-foreground hover:bg-muted\`. Labels are verbs.
601
+ - Motion is small and belongs to the picture: \`reveal\` fades a block in once as it enters, and
602
+ \`float-slow\` / \`drift-slow\` lift PARTS OF AN ILLUSTRATION by a few pixels. Nothing spins,
603
+ pulses, orbits or scales, and nothing moves for someone who asked for reduced motion.
604
+ - The stylesheet still defines the older classes \`gradient-heading\`, \`glass-card\`, \`eyebrow\`,
605
+ \`glow-orb\`, \`shadow-soft\`, \`shadow-raised\`, \`shadow-glow\`, \`pulse-soft\` and \`spin-slow\`,
606
+ because screens written earlier use them. They are REPAINTED flat — \`gradient-heading\` is solid
607
+ ink, \`glass-card\` a neutral tile, \`eyebrow\` a plain accent label, \`glow-orb\` hidden, the three
608
+ shadows and the two animations nothing at all. Never reach for one of them as decoration: it
609
+ paints nothing, or it paints the flat thing you could have written directly. Do not invent other
610
+ classes in the same family.
611
+ - Overrides: change any of the look rules above — the ground, the accent, depth, type, motion —
612
+ ONLY when the customer's specification explicitly asks: it names a background colour, a
613
+ dark-only or coloured theme, a brand palette, or gradients. The product's subject matter is not
614
+ a request — a bakery is not a warm background and a bank is not a blue one.
573
615
  - Colour comes in PAIRS. Every surface token in this theme has a foreground partner —
574
616
  \`--background\`/\`--foreground\`, \`--card\`/\`--card-foreground\`, \`--primary\`/\`--primary-foreground\`,
575
617
  and the same for \`secondary\`, \`muted\`, \`accent\`, \`popover\`, \`destructive\` and \`sidebar\`. Painting a
576
618
  surface is therefore never a single decision: give the element its partner in the SAME
577
619
  \`className\`, or the text keeps the colour meant for the surface underneath and vanishes wherever
578
- the design made that surface dark.
620
+ that surface is dark.
579
621
 
580
- <section className="bg-primary p-6">Join us</section> // WRONG
581
- <section className="bg-primary text-primary-foreground p-6">Join us</section> // right
622
+ <a className="rounded-full bg-primary px-7 py-3">Get started</a> // WRONG
623
+ <a className="rounded-full bg-primary text-primary-foreground px-7 py-3">Get started</a> // right
582
624
 
583
- Nothing catches the wrong form — it compiles and it renders. It is unreadable only on the
584
- surfaces the design happened to make dark, which is why it survives to the finished screen.
625
+ Nothing catches the wrong form — it compiles and it renders. It is unreadable only where the
626
+ accent happens to be dark, which is why it survives to the finished screen.
585
627
  - Never paint a surface with a raw or palette colour — \`bg-slate-900\`, \`bg-[#101820]\`,
586
628
  \`style={{ background: '#101820' }}\`. Those have no foreground partner, so nothing keeps the text
587
- on them legible, and they ignore the theme. Every surface is one of the tokens above.
588
- - Depth and emphasis come from the theme's DECORATION VOCABULARY, and using it is expected rather
589
- than exceptional — a screen built only from flat cards is an unfinished screen. That vocabulary
590
- is: the component classes \`gradient-heading\` (a page or section headline), \`glass-card\` (a
591
- panel with depth), \`eyebrow\` (the small chip above a headline), \`cta-btn\` (the primary call to
592
- action, on an \`<a>\` or a bare \`<button>\`, never on a shadcn \`Button\` whose own \`bg-\`
593
- utility would win), \`glow-orb\` (a soft colour field behind a section, always
594
- \`pointer-events-none\` and behind the content); the elevation utilities \`shadow-soft\`,
595
- \`shadow-raised\`, \`shadow-floating\`, \`shadow-glow\`; the idle-motion classes \`reveal\`,
596
- \`float-slow\`, \`drift-slow\`, \`pulse-soft\`, \`spin-slow\`; and gradients whose stops are THEME
597
- tokens with opacity. None of these is a raw colour.
598
-
599
- <div className="bg-[radial-gradient(#818cf8,transparent)] blur-[120px]" /> // WRONG
600
- <span className="glow-orb h-80 w-96 -z-10" aria-hidden /> // right
601
- <div className="bg-gradient-to-br from-primary/20 to-transparent p-6" /> // right
602
-
603
- Keep a gradient under a text element light — \`/20\` or less — unless the element also carries a
604
- \`-foreground\` partner class. These class names are defined in the project's stylesheet; do not
605
- invent others in the same family.
629
+ on them legible, and they ignore the theme and its dark mode. Every surface is one of the tokens
630
+ above.
631
+ - Every interactive element keeps its visible \`focus-visible\` ring, is at least 44px tall to touch,
632
+ and never signals anything by hover alone.
606
633
  - Text that is NOT on a coloured surface takes NO colour class: it already inherits the readable
607
634
  one. Never add \`text-white\`, \`text-black\` or a \`-foreground\` class "to be safe" — on an ordinary
608
635
  panel that is the same fault inverted. \`text-muted-foreground\` for secondary text is the
@@ -763,6 +790,83 @@ symbols from the component name (PascalCase of the component definition — for
763
790
  Both sides must use these exact names. This is a DEFAULT: when a "View-model contract"
764
791
  block is present in the task, it lists the symbols that actually exist and overrides this
765
792
  convention entirely.
793
+ `),
794
+ skill(ViableSkill.LandingGate, 'The landing gate — from the landing page into the app', `
795
+ A product can let a guest START its key end-user workflow on the landing page, before any account
796
+ exists, and finish it in the app after signing in with the choices they made carried over. The
797
+ card that does this is the LANDING GATE. It sits in the hero where the call-to-action buttons
798
+ would be, and it REPLACES them.
799
+
800
+ **Which story is gate-worthy.** At most ONE per project, and only a story that is all of:
801
+ - in the \`user\` area — the signed-in END user's own workflow, never an operator's, an owner's or
802
+ one a guest already completes without signing in;
803
+ - a FIRST-VALUE step — something useful comes out of it the moment the guest acts;
804
+ - begun with NON-SENSITIVE input — a few picks, a filter, a short text. Never a payment, an
805
+ address, an upload, contact details or anything else about the person.
806
+ A pantry-to-recipe finder is gate-worthy: pick ingredients, see what you can bake. Checking out a
807
+ basket, setting up a profile or reviewing a queue of requests is not. When no story qualifies
808
+ there is no gate and the hero keeps its buttons — a correct answer, not a failure.
809
+
810
+ **The card.** The sketch is \`@/components/home/gate\`; the implemented one is
811
+ \`@/components/home/landing-gate\` and exports the same \`LandingGate\` with the same props.
812
+ - Its root is \`<div id="gate" data-home-gate>\` — never a \`<section>\`, \`<aside>\`, \`<header>\`
813
+ or \`<footer>\`; the page already has exactly one of each landmark it needs.
814
+ - A question in the end user's words as its heading, and a "No account needed" hint beside it.
815
+ - 5 to 8 choice chips, each a \`<button type="button" aria-pressed={selected}>\` inside a
816
+ \`role="group"\` with an \`aria-label\`, 4 or 5 pre-selected so the first view already shows
817
+ results. When choices do not fit, 1 to 3 labelled fields instead.
818
+ - A count with \`aria-live="polite"\`, at most 2 result rows re-ranked on every change, and one
819
+ line for when nothing matches. A row's lock icon is named "Full details after sign-in".
820
+ - A one-line note ("Sign in with your email. Your picks come with you.") and ONE primary button,
821
+ straight after the choices in tab order. No second button beside it.
822
+ - The sketch works signed out and offline from its sample records. The implemented card may call
823
+ a PUBLIC endpoint; never one that needs a signed-in user.
824
+
825
+ **The handoff.** The button carries the guest's choices across sign-in in \`sessionStorage\`,
826
+ through \`@/lib/handoff\` — never in the URL, never in a cookie, never through the server:
827
+
828
+ import { useLandingStart } from '@/lib/handoff'
829
+
830
+ const start = useLandingStart(target)
831
+ <button type="button" className="cta-btn" onClick={() => start({ picks })}>{cta}</button>
832
+
833
+ - \`target\` is the ALIAS of the story's own full-scale screen in the user area — the prop the guest
834
+ home passes — never a URL.
835
+ - \`useLandingStart(target)\` is the whole button: it writes the handoff, then navigates to
836
+ \`target\` when the visitor is already signed in, or starts the ordinary sign-in otherwise. After
837
+ sign-in the guest home's \`Hero\` (\`useLandingContinuation\`) sends the visitor on to \`target\`.
838
+ - NEVER \`useLogin(target)\` for the gate: its continuation navigates straight to the guarded screen,
839
+ which answers a signed-out visitor with "Sign in required", and that card's own sign-in lands on the
840
+ home page — the full-scale screen is never reached.
841
+ - The handler \`useLandingStart\` returns is SYNCHRONOUS, and the click calls it in the same gesture.
842
+ A sign-in that has to open a window is eaten by the popup blocker once anything has been awaited.
843
+
844
+ onClick={async () => { await saveDraft(picks); start({ picks }) }} // WRONG — the gesture is gone
845
+ href={'/frontoffice/recipes?picks=' + picks.join(',')} // WRONG — a URL, the picks in it, no sign-in
846
+
847
+ **The full-scale screen** — the story's own screen in the user area — reads the handoff once in its
848
+ view model, pre-fills from it, says so in one line, and clears it:
849
+
850
+ import { clearLandingHandoff, readLandingHandoff } from '@/lib/handoff'
851
+
852
+ useEffect(() => {
853
+ const carried = readLandingHandoff<{ picks: string[] }>(alias)
854
+ if (carried == null) return
855
+ setPicks(carried.picks)
856
+ setCarriedOver(true) // "We kept your 4 picks from the home page."
857
+ clearLandingHandoff()
858
+ }, [alias])
859
+
860
+ \`alias\` is the screen's own alias — the same string the gate was given as \`target\`. A missing,
861
+ expired or foreign handoff reads as \`null\`, and the screen then starts empty exactly as it does for
862
+ someone who arrived from the menu; never treat its absence as an error.
863
+
864
+ **Never:**
865
+ - ask for an account, a payment, an email address or any personal detail before sign-in — the gate
866
+ collects choices and nothing else, and the handoff stores only those choices;
867
+ - render a story code, a "Preview" badge or a dashed frame inside the gate — it is the product's
868
+ public face in production;
869
+ - keep the hero's buttons beside a gate, or give the gate a second call to action.
766
870
  `),
767
871
  skill(ViableSkill.ResourceLayer, 'OwlMeans resources own the schema', `
768
872
  A "resource" is ONE file — \`src/resources/{entity}/{type}.ts\` — carrying all data access
@@ -1 +1 @@
1
- {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../src/skills/catalogue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEtD;;;;;;;;GAQG;AAEH,MAAM,KAAK,GAAG,CAAC,KAAkB,EAAE,KAAa,EAAE,IAAY,EAAmB,EAAE,CAAC,CAAC;IACnF,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;CAC3D,CAAC,CAAA;AAEF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAc,EAAU,EAAE,CACxD,kDAAkD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAExF,MAAM,SAAS,GAAG,CAAC,KAAkB,EAAE,KAAa,EAAE,IAAc,EAAmB,EAAE,CACvF,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,CAAA;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB;CACvE,CAAA;AACD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,cAAc;IAC5F,yFAAyF;IACzF,4DAA4D;IAC5D,QAAQ;CACT,CAAA;AACD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,sBAAsB,EAAE,6BAA6B,EAAE,KAAK;CAC7D,CAAA;AACD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,kBAAkB,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAA;AAEjG;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,kBAAkB,EAAE,eAAe,EAAE,iBAAiB;CAC1D,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5E;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;CAU/B,CAAC,IAAI,EAAE,CAAA;AAER,MAAM,CAAC,MAAM,aAAa,GAAsB;IAE9C,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCtD,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,0BAA0B,EAAE;;;;;;;;;;;;CAY7D,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,kCAAkC,EAAE;;;CAGzE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,2BAA2B,EAAE;;;CAGhE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DrD,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,EAAE;;;CAG7C,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,6BAA6B,EAAE;;;;CAIvE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE;;;;;;;;;;;;;;CAchD,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,0BAA0B,EAAE;;;;;;;;;;;;;;CAc1D,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,kBAAkB,EAAE;;;;;;;;CAQxD,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,qCAAqC,EAAE;;;;;;;;;;;;;;;EAe9E,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2JjB,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,4BAA4B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD9D,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,gDAAgD,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FtF,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDvD,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,gCAAgC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCnE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ElD,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,+BAA+B,EAAE;;;;;;;;;;;;;CAajE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,8BAA8B,EAAE;;;;;;;;;;;;;;CAcpE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,mCAAmC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCvE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,uDAAuD,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmG7F,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,iBAAiB,EAAE;;;;;;;;;;;;;;;;;CAiB1D,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkG5D,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,0CAA0C,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CjF,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,6BAA6B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDlE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,uBAAuB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2K7D,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,0BAA0B,EAAE;;;;;;;;;;;;;;;CAejE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,0BAA0B,EAAE;;;;;;;;;;;CAWjE,CAAC;IAEA,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,wCAAwC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6B5E,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,6BAA6B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgE5D,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,mCAAmC,EAAE;;;;;;;;;;;;;;GAcpE,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,iCAAiC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCnE,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBpE,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,8CAA8C,EAAE;;;;;;;;;;;;;;;;GAgBnF,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,8BAA8B,EAAE;;;;;;;;;;;;;;;;;GAiB7D,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,8BAA8B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiC5D,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,0CAA0C,EAAE;;;;;;;;;;;;;;;;;;;;;;;GAuBrE,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;GAsBvD,CAAC;IAEF,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,yBAAyB,EAAE,iBAAiB,CAAC;IACpF,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC;IACnF,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;IACvE,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,CAAC;IAClF,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,oCAAoC,EAAE,aAAa,CAAC;IACvF,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAE,eAAe,CAAC;CAC1E,CAAA;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAmB,EAAE,CACjE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAE,CAAA"}
1
+ {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../src/skills/catalogue.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,11 @@ export declare enum ViableSkill {
29
29
  FormFeedback = "form-feedback",
30
30
  StoreAccess = "store-access",
31
31
  ViewModelNaming = "viewmodel-naming",
32
+ /**
33
+ * The landing gate: a guest starts the key end-user story on the landing page and continues on
34
+ * its full-scale screen after signing in, with the choices carried over.
35
+ */
36
+ LandingGate = "landing-gate",
32
37
  ResourceLayer = "resource-layer",
33
38
  ResourceResults = "resource-results",
34
39
  ResourceMigrations = "resource-migrations",
@@ -1 +1 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/skills/consts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,oBAAY,WAAW;IACrB,gDAAgD;IAChD,gBAAgB,uBAAuB;IACvC,0CAA0C;IAC1C,cAAc,qBAAqB;IACnC,qCAAqC;IACrC,eAAe,qBAAqB;IACpC,kFAAkF;IAClF,aAAa,oBAAoB;IACjC,wEAAwE;IACxE,mBAAmB,0BAA0B;IAE7C,OAAO,aAAa;IACpB,SAAS,eAAe;IAExB,eAAe,qBAAqB;IACpC,mBAAmB,yBAAyB;IAC5C,WAAW,iBAAiB;IAC5B,uFAAuF;IACvF,eAAe,qBAAqB;IACpC,QAAQ,cAAc;IACtB,aAAa,mBAAmB;IAChC,iGAAiG;IACjG,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,eAAe,qBAAqB;IAEpC,aAAa,mBAAmB;IAChC,eAAe,qBAAqB;IACpC,kBAAkB,wBAAwB;IAC1C,cAAc,oBAAoB;IAClC,eAAe,qBAAqB;IACpC,gBAAgB,sBAAsB;IACtC,eAAe,qBAAqB;IAEpC,aAAa,mBAAmB;IAChC,YAAY,kBAAkB;IAE9B,sFAAsF;IACtF,eAAe,qBAAqB;IACpC,gFAAgF;IAChF,UAAU,gBAAgB;IAC1B,4EAA4E;IAC5E,YAAY,kBAAkB;IAE9B,uFAAuF;IACvF,aAAa,mBAAmB;IAChC,wEAAwE;IACxE,SAAS,eAAe;IACxB,iFAAiF;IACjF,gBAAgB,uBAAuB;IAEvC,wDAAwD;IACxD,UAAU,gBAAgB;IAC1B,uEAAuE;IACvE,SAAS,eAAe;IACxB,sFAAsF;IACtF,MAAM,YAAY;IAClB,kFAAkF;IAClF,cAAc,oBAAoB;IAElC,gBAAgB,sBAAsB;IACtC,gBAAgB,sBAAsB;IAEtC,eAAe,qBAAqB;IACpC,gBAAgB,uBAAuB;IACvC,WAAW,iBAAiB;IAC5B,gBAAgB,sBAAsB;IACtC,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;CACjC;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CA4CnD,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,EAe/C,CAAA;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,WACrB,WAAW,EAAE,YAAY,WAAW,EAAE,KAC7C,WAAW,EAKb,CAAA"}
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/skills/consts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,oBAAY,WAAW;IACrB,gDAAgD;IAChD,gBAAgB,uBAAuB;IACvC,0CAA0C;IAC1C,cAAc,qBAAqB;IACnC,qCAAqC;IACrC,eAAe,qBAAqB;IACpC,kFAAkF;IAClF,aAAa,oBAAoB;IACjC,wEAAwE;IACxE,mBAAmB,0BAA0B;IAE7C,OAAO,aAAa;IACpB,SAAS,eAAe;IAExB,eAAe,qBAAqB;IACpC,mBAAmB,yBAAyB;IAC5C,WAAW,iBAAiB;IAC5B,uFAAuF;IACvF,eAAe,qBAAqB;IACpC,QAAQ,cAAc;IACtB,aAAa,mBAAmB;IAChC,iGAAiG;IACjG,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,eAAe,qBAAqB;IACpC;;;OAGG;IACH,WAAW,iBAAiB;IAE5B,aAAa,mBAAmB;IAChC,eAAe,qBAAqB;IACpC,kBAAkB,wBAAwB;IAC1C,cAAc,oBAAoB;IAClC,eAAe,qBAAqB;IACpC,gBAAgB,sBAAsB;IACtC,eAAe,qBAAqB;IAEpC,aAAa,mBAAmB;IAChC,YAAY,kBAAkB;IAE9B,sFAAsF;IACtF,eAAe,qBAAqB;IACpC,gFAAgF;IAChF,UAAU,gBAAgB;IAC1B,4EAA4E;IAC5E,YAAY,kBAAkB;IAE9B,uFAAuF;IACvF,aAAa,mBAAmB;IAChC,wEAAwE;IACxE,SAAS,eAAe;IACxB,iFAAiF;IACjF,gBAAgB,uBAAuB;IAEvC,wDAAwD;IACxD,UAAU,gBAAgB;IAC1B,uEAAuE;IACvE,SAAS,eAAe;IACxB,sFAAsF;IACtF,MAAM,YAAY;IAClB,kFAAkF;IAClF,cAAc,oBAAoB;IAElC,gBAAgB,sBAAsB;IACtC,gBAAgB,sBAAsB;IAEtC,eAAe,qBAAqB;IACpC,gBAAgB,uBAAuB;IACvC,WAAW,iBAAiB;IAC5B,gBAAgB,sBAAsB;IACtC,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;CACjC;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CA+CnD,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,EAe/C,CAAA;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,WACrB,WAAW,EAAE,YAAY,WAAW,EAAE,KAC7C,WAAW,EAKb,CAAA"}
@@ -30,6 +30,11 @@ export var ViableSkill;
30
30
  ViableSkill["FormFeedback"] = "form-feedback";
31
31
  ViableSkill["StoreAccess"] = "store-access";
32
32
  ViableSkill["ViewModelNaming"] = "viewmodel-naming";
33
+ /**
34
+ * The landing gate: a guest starts the key end-user story on the landing page and continues on
35
+ * its full-scale screen after signing in, with the choices carried over.
36
+ */
37
+ ViableSkill["LandingGate"] = "landing-gate";
33
38
  ViableSkill["ResourceLayer"] = "resource-layer";
34
39
  ViableSkill["ResourceResults"] = "resource-results";
35
40
  ViableSkill["ResourceMigrations"] = "resource-migrations";
@@ -90,6 +95,9 @@ export const SKILL_ORDER = {
90
95
  [ViableSkill.FormFeedback]: 51,
91
96
  [ViableSkill.StoreAccess]: 52,
92
97
  [ViableSkill.ViewModelNaming]: 55,
98
+ // After the frontend rules it builds on (entrypoints, nav, shadcn, form feedback, the store), and
99
+ // before the backend block — it is only ever carried by analysis and frontend personas.
100
+ [ViableSkill.LandingGate]: 56,
93
101
  [ViableSkill.ResourceLayer]: 60,
94
102
  [ViableSkill.ResourceResults]: 62,
95
103
  [ViableSkill.ResourceMigrations]: 64,
@@ -1 +1 @@
1
- {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/skills/consts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/skills/consts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/skills/roles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD;;;;;;;GAOG;AACH,oBAAY,aAAa;IACvB,eAAe,qBAAqB;IACpC,aAAa,mBAAmB;IAChC,wFAAwF;IACxF,gBAAgB,sBAAsB;IACtC,UAAU,gBAAgB;IAC1B,cAAc,oBAAoB;IAElC,eAAe,qBAAqB;IACpC,kBAAkB,wBAAwB;IAC1C,cAAc,oBAAoB;IAClC,mBAAmB,yBAAyB;IAC5C,oBAAoB,2BAA2B;IAC/C,eAAe,qBAAqB;IACpC,YAAY,kBAAkB;IAC9B,kBAAkB,wBAAwB;IAC1C,sBAAsB,6BAA6B;IAEnD,WAAW,iBAAiB;IAC5B,YAAY,mBAAmB;IAC/B,WAAW,kBAAkB;IAC7B,UAAU,iBAAiB;IAC3B,cAAc,oBAAoB;IAClC,QAAQ,cAAc;IACtB,iBAAiB,wBAAwB;IACzC,qGAAqG;IACrG,gBAAgB,sBAAsB;IACtC,kFAAkF;IAClF,WAAW,iBAAiB;IAC5B,eAAe,sBAAsB;IAErC,KAAK,UAAU;IACf,YAAY,iBAAiB;IAC7B,eAAe,qBAAqB;IACpC,iBAAiB,uBAAuB;IACxC,QAAQ,cAAc;CACvB;AA6BD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CAuN/D,CAAA"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/skills/roles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD;;;;;;;GAOG;AACH,oBAAY,aAAa;IACvB,eAAe,qBAAqB;IACpC,aAAa,mBAAmB;IAChC,wFAAwF;IACxF,gBAAgB,sBAAsB;IACtC,UAAU,gBAAgB;IAC1B,cAAc,oBAAoB;IAElC,eAAe,qBAAqB;IACpC,kBAAkB,wBAAwB;IAC1C,cAAc,oBAAoB;IAClC,mBAAmB,yBAAyB;IAC5C,oBAAoB,2BAA2B;IAC/C,eAAe,qBAAqB;IACpC,YAAY,kBAAkB;IAC9B,kBAAkB,wBAAwB;IAC1C,sBAAsB,6BAA6B;IAEnD,WAAW,iBAAiB;IAC5B,YAAY,mBAAmB;IAC/B,WAAW,kBAAkB;IAC7B,UAAU,iBAAiB;IAC3B,cAAc,oBAAoB;IAClC,QAAQ,cAAc;IACtB,iBAAiB,wBAAwB;IACzC,qGAAqG;IACrG,gBAAgB,sBAAsB;IACtC,kFAAkF;IAClF,WAAW,iBAAiB;IAC5B,eAAe,sBAAsB;IAErC,KAAK,UAAU;IACf,YAAY,iBAAiB;IAC7B,eAAe,qBAAqB;IACpC,iBAAiB,uBAAuB;IACxC,QAAQ,cAAc;CACvB;AA6BD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CA6N/D,CAAA"}
@@ -94,11 +94,17 @@ and you are told which one with each task.
94
94
  `, [ViableSkill.OutputTextOnly]),
95
95
  [ViablePersona.VisualDesigner]: persona(`
96
96
  You are a visual ui designer specializing in writing design guidelines and design systems
97
- for web applications that loves to produce expressive and bright interfaces.
98
- Unless a specification asks for something else, you default to a modern, expressive language —
99
- gradients, glass surfaces, layered shadows, restrained motion — while keeping every surface
100
- plainly readable. What makes a design yours is the values you choose, never the techniques you
101
- leave out.
97
+ for web applications, and your interfaces are calm, precise and unmistakably the product's own.
98
+ Your house style: a white ground in light mode and a black one in dark mode; colour from ONE
99
+ product accent and never from backgrounds; depth only from hairlines, neutral tiles and a single
100
+ floating shadow; a heavy grotesk display face with tight tracking and generous whitespace carrying
101
+ the brand; motion that is small and belongs to the picture. You never reach for gradients, glass,
102
+ blur or glow, and the older decoration classes a project still defines are painted flat and are
103
+ never your tools. You change any of this only when the customer's specification explicitly asks —
104
+ it names a background colour, a dark-only or coloured theme, a brand palette, or gradients. The
105
+ product's subject matter is not such a request: a bakery is not a warm background, a bank is not a
106
+ blue one. What makes a design this product's is its accent, its type and its illustration — never
107
+ an added effect.
102
108
  This application serves four audiences — anonymous visitors, signed-in end users, the owner,
103
109
  and staff running the business process. Every screen you style belongs to exactly one of them,
104
110
  and you are told which one with each task.
@@ -1 +1 @@
1
- {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/skills/roles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/skills/roles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;;;GAOG;AACH,MAAM,CAAN,IAAY,aAoCX;AApCD,WAAY,aAAa;IACvB,qDAAoC,CAAA;IACpC,iDAAgC,CAAA;IAChC,wFAAwF;IACxF,uDAAsC,CAAA;IACtC,2CAA0B,CAAA;IAC1B,mDAAkC,CAAA;IAElC,qDAAoC,CAAA;IACpC,2DAA0C,CAAA;IAC1C,mDAAkC,CAAA;IAClC,6DAA4C,CAAA;IAC5C,gEAA+C,CAAA;IAC/C,qDAAoC,CAAA;IACpC,+CAA8B,CAAA;IAC9B,2DAA0C,CAAA;IAC1C,oEAAmD,CAAA;IAEnD,6CAA4B,CAAA;IAC5B,gDAA+B,CAAA;IAC/B,8CAA6B,CAAA;IAC7B,4CAA2B,CAAA;IAC3B,mDAAkC,CAAA;IAClC,uCAAsB,CAAA;IACtB,0DAAyC,CAAA;IACzC,qGAAqG;IACrG,uDAAsC,CAAA;IACtC,kFAAkF;IAClF,6CAA4B,CAAA;IAC5B,sDAAqC,CAAA;IAErC,gCAAe,CAAA;IACf,8CAA6B,CAAA;IAC7B,qDAAoC,CAAA;IACpC,yDAAwC,CAAA;IACxC,uCAAsB,CAAA;AACxB,CAAC,EApCW,aAAa,KAAb,aAAa,QAoCxB;AAED,kFAAkF;AAClF,MAAM,gBAAgB,GAAG;;;CAGxB,CAAC,IAAI,EAAE,CAAA;AAER,2EAA2E;AAC3E,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,gBAAgB,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;AAE9F,gEAAgE;AAChE,MAAM,QAAQ,GAAG;IACf,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,WAAW;IACrF,WAAW,CAAC,gBAAgB,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,YAAY;IAC5E,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,WAAW;CAC9E,CAAA;AAED,yBAAyB;AACzB,MAAM,OAAO,GAAG;IACd,WAAW,CAAC,aAAa;IACzB,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,kBAAkB;IACtF,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,eAAe;IACxF,WAAW,CAAC,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;CAC3D,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,MAAqB,EAAgB,EAAE,CACpE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAwC;IAElE,8BAA8B;IAE9B,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;;;CAG1C,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAEzD,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;;;;;CAK3C,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAE9B,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;;CAExC,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAEzD,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;;;;;;CAMrC,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAE9B,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;CAgBzC,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAE9B,qBAAqB;IAErB,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;;;;;;CAM1C,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,EAAE,GAAG,QAAQ,CAAC,CAAC;IAE3E,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;;CAE7C,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;IAEf,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;;CAEzC,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,eAAe;QAC/E,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAEhC,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;;;;;;;CAO9C,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,gBAAgB;QACtF,WAAW,CAAC,WAAW,CAAC,CAAC;IAE3B,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAE9F,+FAA+F;IAC/F,0FAA0F;IAC1F,qFAAqF;IACrF,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;;;;CAI1C,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAE7F,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;;;CAGvC,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,aAAa;QACtF,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE1F,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;;;;CAI7C,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,kBAAkB;QACtF,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE7D,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;;;;;;;CAOjD,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,eAAe;QACnF,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAEhC,iBAAiB;IAEjB,8FAA8F;IAC9F,8FAA8F;IAC9F,sEAAsE;IACtE,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;;CAEtC,EAAE,CAAC,GAAG,WAAW,EAAE,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,eAAe;QAC5E,WAAW,CAAC,eAAe,CAAC,CAAC;IAE/B,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;;CAEvC,EAAE,CAAC,GAAG,WAAW,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,mBAAmB;QAC1E,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAEtF,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;;;CAGtC,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC;IAE/B,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;;;CAGrC,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC;IAE/B,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;;;CAGzC,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,CAAC;IAE9B,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;;;CAGnC,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,CAAC;IAE9B,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;;;;CAI5C,EAAE,CAAC,GAAG,WAAW,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,eAAe;QACtE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE7D,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;;;;;CAK3C,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAEvF,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;;;CAGtC,EAAE,CAAC,GAAG,WAAW,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,eAAe;QACtE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,eAAe;QAC7E,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAEhC,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;;CAE1C,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAExE,0BAA0B;IAE1B,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;;;CAGhC,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,WAAW,CAAC,eAAe;QACpE,WAAW,CAAC,eAAe,CAAC,CAAC;IAE/B,6FAA6F;IAC7F,gGAAgG;IAChG,gGAAgG;IAChG,iCAAiC;IACjC,EAAE;IACF,yFAAyF;IACzF,wFAAwF;IACxF,2FAA2F;IAC3F,oFAAoF;IACpF,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;;;CAGvC,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,eAAe;QAChF,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,gBAAgB,EAAE,WAAW,CAAC,eAAe;QAC1F,WAAW,CAAC,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAErF,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;;;;CAI1C,EAAE,EAAE,CAAC;IAEJ,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;;;;;CAK5C,EAAE,EAAE,CAAC;IAEJ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;;;;;;;;;;;;;;CAcnC,EAAE,EAAE,CAAC;CACL,CAAA"}
package/build/types.d.ts CHANGED
@@ -27,6 +27,17 @@ export interface SlotConstMetadata {
27
27
  brandingPrivacyUrl: string;
28
28
  brandingCredit: string;
29
29
  brandingHideCreditIntent: string;
30
+ /**
31
+ * The Google tag the owner attached — a `GTM-` container or a `G-`/`GT-`/`AW-`/`DC-` tag id —
32
+ * loaded by the generated application behind its cookie consent, in the preview and in
33
+ * production alike.
34
+ *
35
+ * OPTIONAL, unlike the branding keys above, and OMITTED from a push while it is unset: a slot
36
+ * publisher built before the key existed validates the signed body against a schema that does
37
+ * not declare it, strips it, and refuses the whole configuration with a 401. An unset tag must
38
+ * therefore never reach one — which only absence guarantees.
39
+ */
40
+ brandingGoogleTag?: string;
30
41
  }
31
42
  export interface SlotSecretMetadata {
32
43
  oidcClientSecret: string;
@@ -74,6 +85,25 @@ export interface SlotListMetadata {
74
85
  * hosts are always accepted and are never in this list.
75
86
  */
76
87
  allowedOrigins: string[];
88
+ /**
89
+ * Extra Content-Security-Policy source expressions the slot's runtime adds to what it serves —
90
+ * a third party a generated app legitimately needs that the platform does not already know about.
91
+ *
92
+ * OPTIONAL and omitted from a push while empty, for the reason `brandingGoogleTag` is: an older
93
+ * publisher refuses a signed body carrying a key its schema does not declare, and a slot
94
+ * provisioned before the key existed simply has no value for it. The runtime reads it
95
+ * defensively and filters every source before it reaches a header.
96
+ *
97
+ * The Google tag's hosts are NOT carried here: the publisher derives them itself from
98
+ * `brandingGoogleTag` (and, for a production build, from the record the build writes), so the
99
+ * tag and the hosts it needs cannot disagree. Nothing writes this key today; it is declared so the
100
+ * publisher's existing reader has a vocabulary entry and a schema slot.
101
+ *
102
+ * Deliberately NOT in `metadataLists`. That array enumerates the lists an OWNER stores — one
103
+ * `project-config` row each, loaded on every metadata read and pushed back verbatim — and no
104
+ * owner-facing setting stores this one.
105
+ */
106
+ cspSources?: string[];
77
107
  }
78
108
  export interface CustomSecretMetadata {
79
109
  backendSecrets: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,YAAa,SAC5B,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;;;;OASG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,wBAAwB,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,2BAA4B,SAC3C,iBAAiB;CAClB;AAED,MAAM,WAAW,kBAAmB,SAClC,iBAAiB,EACjB,kBAAkB;CACnB;AAED,MAAM,WAAW,kBAAmB,SAClC,iBAAiB,EACjB,gBAAgB;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,YAAa,SAC5B,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;;;;OASG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,wBAAwB,EAAE,MAAM,CAAA;IAChC;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,2BAA4B,SAC3C,iBAAiB;CAClB;AAED,MAAM,WAAW,kBAAmB,SAClC,iBAAiB,EACjB,kBAAkB;CACnB;AAED,MAAM,WAAW,kBAAmB,SAClC,iBAAiB,EACjB,gBAAgB;CACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/viable-common",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "license": "MIT",
5
5
  "description": "Runtime-free contracts of the OwlMeans Viable platform — the analysis, design and metadata shapes of a generated project, its target-shape manifest, the slot command vocabulary, the connector protocol and the conversion vocabulary.",
6
6
  "type": "module",
@@ -59,13 +59,13 @@
59
59
  "typescript": "^7.0.2"
60
60
  },
61
61
  "dependencies": {
62
- "@owlmeans/agent-common": "^0.1.18-rc.33",
63
- "@owlmeans/entrypoint": "^0.1.18-rc.29",
64
- "@owlmeans/error": "^0.1.18-rc.28",
65
- "@owlmeans/llm-common": "^0.1.18-rc.29",
66
- "@owlmeans/planning": "^0.1.18-rc.2",
67
- "@owlmeans/resource": "^0.1.18-rc.28",
68
- "@owlmeans/route": "^0.1.18-rc.27"
62
+ "@owlmeans/agent-common": "^0.1.18-rc.34",
63
+ "@owlmeans/entrypoint": "^0.1.18-rc.30",
64
+ "@owlmeans/error": "^0.1.18-rc.29",
65
+ "@owlmeans/llm-common": "^0.1.18-rc.30",
66
+ "@owlmeans/planning": "^0.1.18-rc.3",
67
+ "@owlmeans/resource": "^0.1.18-rc.29",
68
+ "@owlmeans/route": "^0.1.18-rc.28"
69
69
  },
70
70
  "publishConfig": {
71
71
  "access": "public"
@@ -2,6 +2,7 @@ import { SubProject } from '../slot/consts.js'
2
2
  import { ViableSkill } from '../skills/consts.js'
3
3
  import { ViablePersona } from '../skills/roles.js'
4
4
  import { aiLibraryList, gameLibraryList } from '../skills/catalogue.js'
5
+ import { LandingGatePreference } from './types.js'
5
6
  import type { BlueprintPatch } from './types.js'
6
7
 
7
8
  /**
@@ -61,8 +62,8 @@ export interface BlueprintCaseDefinition {
61
62
  /** What every AI case installs. The langchain peers are declared here, at ONE range. */
62
63
  const AI_DEPS = {
63
64
  [SubProject.Backend]: {
64
- '@owlmeans/llm': '^0.1.18-rc.30',
65
- '@owlmeans/agent': '^0.1.18-rc.31',
65
+ '@owlmeans/llm': '^0.1.18-rc.31',
66
+ '@owlmeans/agent': '^0.1.18-rc.32',
66
67
  '@langchain/core': '^1.2.9',
67
68
  '@langchain/anthropic': '^1.5.8',
68
69
  '@langchain/openai': '^1.5.10',
@@ -85,12 +86,6 @@ const AI_SKILLS = [
85
86
  ViableSkill.LibrariesAi,
86
87
  ]
87
88
 
88
- /**
89
- * What the analysis stage is told about a product whose value is a model.
90
- *
91
- * The pairing rule is the load-bearing one: an agent holds no permissions and owns no screen, so
92
- * a story that is the AGENT's work is invisible unless a human story starts it and watches it.
93
- */
94
89
  /**
95
90
  * What the API side is told once a project may have a queue.
96
91
  *
@@ -105,6 +100,12 @@ const PRODUCER_PERSONA_SKILLS = {
105
100
  [ViablePersona.ApiCoder]: [ViableSkill.WorkerJobs],
106
101
  }
107
102
 
103
+ /**
104
+ * What the analysis stage is told about a product whose value is a model.
105
+ *
106
+ * The pairing rule is the load-bearing one: an agent holds no permissions and owns no screen, so
107
+ * a story that is the AGENT's work is invisible unless a human story starts it and watches it.
108
+ */
108
109
  const AI_PERSONA_SKILLS = {
109
110
  ...PRODUCER_PERSONA_SKILLS,
110
111
  [ViablePersona.BusinessAnalyst]: [ViableSkill.AgenticChoice],
@@ -115,6 +116,46 @@ const AI_PERSONA_SKILLS = {
115
116
  ],
116
117
  }
117
118
 
119
+ type PersonaSkills = Partial<Record<ViablePersona, ViableSkill[]>>
120
+
121
+ /**
122
+ * Join persona-skill maps, UNIONING a persona two maps both name.
123
+ *
124
+ * An object spread would keep only the last map's list for that persona — `BusinessAnalyst`
125
+ * carries `AgenticChoice` in an AI case and `LandingGate` from the gate map, and a spread would
126
+ * silently drop whichever came first.
127
+ */
128
+ const joinPersonaSkills = (...maps: PersonaSkills[]): PersonaSkills => {
129
+ const out: PersonaSkills = {}
130
+ for (const map of maps) {
131
+ for (const [persona, skills] of Object.entries(map)) {
132
+ const key = persona as ViablePersona
133
+ out[key] = [...new Set([...(out[key] ?? []), ...(skills ?? [])])]
134
+ }
135
+ }
136
+
137
+ return out
138
+ }
139
+
140
+ /**
141
+ * Who has to know the landing-gate pattern in a case that encourages one.
142
+ *
143
+ * The analyst decides whether a story is gate-worthy and plans the gate's copy; the UX designer
144
+ * shapes the full-scale screen that continues what the guest started; the frontend personas draw
145
+ * the gate, write the handoff and read it back. Nobody else touches it.
146
+ */
147
+ const LANDING_GATE_PERSONA_SKILLS: PersonaSkills = {
148
+ [ViablePersona.BusinessAnalyst]: [ViableSkill.LandingGate],
149
+ [ViablePersona.UxDesigner]: [ViableSkill.LandingGate],
150
+ [ViablePersona.LayoutArchitect]: [ViableSkill.LandingGate],
151
+ [ViablePersona.ComponentArchitect]: [ViableSkill.LandingGate],
152
+ [ViablePersona.UiViewCoder]: [ViableSkill.LandingGate],
153
+ [ViablePersona.UiNavCoder]: [ViableSkill.LandingGate],
154
+ }
155
+
156
+ /** The experience layer of a case whose product usually has a step a guest can begin. */
157
+ const ENCOURAGE_GATE = { landingGate: LandingGatePreference.Encourage }
158
+
118
159
  const GAME_PERSONA_SKILLS = {
119
160
  [ViablePersona.BusinessAnalyst]: [ViableSkill.GameDesign],
120
161
  [ViablePersona.UxDesigner]: [ViableSkill.GameDesign, ViableSkill.GameUi],
@@ -151,7 +192,9 @@ party, nothing walks an unbounded set, nothing is scheduled. Most products are t
151
192
  patch: {
152
193
  packages: {
153
194
  capabilities: { postgres: true, kv: false, queue: false, worker: false, agents: false, validation: true },
195
+ personaSkills: LANDING_GATE_PERSONA_SKILLS,
154
196
  },
197
+ experience: ENCOURAGE_GATE,
155
198
  },
156
199
  },
157
200
 
@@ -173,6 +216,9 @@ to call a model at all.
173
216
  capabilities: { postgres: true, kv: true, queue: true, worker: true, agents: false, validation: true },
174
217
  personaSkills: PRODUCER_PERSONA_SKILLS,
175
218
  },
219
+ // Neutral: the named off-request part is usually operator-side work, and whether a guest
220
+ // can begin anything is the specification's to say.
221
+ experience: { landingGate: LandingGatePreference.Allow },
176
222
  },
177
223
  },
178
224
 
@@ -194,8 +240,9 @@ application, and never merely a scalable one.
194
240
  deps: AI_DEPS,
195
241
  libraries: AI_LIBRARIES,
196
242
  skills: AI_SKILLS,
197
- personaSkills: AI_PERSONA_SKILLS,
243
+ personaSkills: joinPersonaSkills(AI_PERSONA_SKILLS, LANDING_GATE_PERSONA_SKILLS),
198
244
  },
245
+ experience: ENCOURAGE_GATE,
199
246
  },
200
247
  },
201
248
 
@@ -214,18 +261,16 @@ in advance.
214
261
  deps: {
215
262
  [SubProject.Backend]: {
216
263
  ...AI_DEPS[SubProject.Backend],
217
- '@owlmeans/agent-skills': '^0.1.18-rc.30',
264
+ '@owlmeans/agent-skills': '^0.1.18-rc.31',
218
265
  },
219
266
  },
220
267
  libraries: AI_LIBRARIES,
221
268
  skills: [...AI_SKILLS, ViableSkill.TargetAgentTools],
222
- personaSkills: {
223
- ...AI_PERSONA_SKILLS,
224
- [ViablePersona.WorkerCoder]: [
225
- ...AI_PERSONA_SKILLS[ViablePersona.WorkerCoder], ViableSkill.TargetAgentTools,
226
- ],
227
- },
269
+ personaSkills: joinPersonaSkills(AI_PERSONA_SKILLS, LANDING_GATE_PERSONA_SKILLS, {
270
+ [ViablePersona.WorkerCoder]: [ViableSkill.TargetAgentTools],
271
+ }),
228
272
  },
273
+ experience: ENCOURAGE_GATE,
229
274
  },
230
275
  },
231
276
 
@@ -248,6 +293,9 @@ is not it.
248
293
  skills: [ViableSkill.GameScene, ViableSkill.GameUi, ViableSkill.LibrariesGame],
249
294
  personaSkills: { ...PRODUCER_PERSONA_SKILLS, ...GAME_PERSONA_SKILLS },
250
295
  },
296
+ // A game's first value is PLAYING it, and the play screen is its own front door — a
297
+ // pick-and-preview card on a landing page is the wrong shape for it.
298
+ experience: { landingGate: LandingGatePreference.Discourage },
251
299
  },
252
300
  },
253
301
  }
@@ -54,6 +54,9 @@ export const freezeBlueprint = (blueprint: Blueprint): Blueprint => Object.freez
54
54
  ...blueprint.packages,
55
55
  capabilities: Object.freeze({ ...blueprint.packages.capabilities }),
56
56
  }),
57
+ // The one optional layer: frozen when present, and never ADDED when absent, so a blueprint that
58
+ // has none still compares equal to what it was before the layer existed.
59
+ ...(blueprint.experience != null ? { experience: Object.freeze({ ...blueprint.experience }) } : {}),
57
60
  })
58
61
 
59
62
  /** Every skill the blueprint asks for, stack first, deduped, order preserved. */