@owlmeans/viable-common 0.0.18 → 0.0.20

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 (120) 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 +2 -0
  4. package/agent-meta/skills/viable-common/SKILL.md +195 -10
  5. package/build/ba/consts.d.ts +2 -3
  6. package/build/ba/consts.d.ts.map +1 -1
  7. package/build/ba/consts.js +2 -3
  8. package/build/ba/consts.js.map +1 -1
  9. package/build/ba/helpers.d.ts +2 -1
  10. package/build/ba/helpers.d.ts.map +1 -1
  11. package/build/ba/helpers.js +3 -2
  12. package/build/ba/helpers.js.map +1 -1
  13. package/build/ba/types.d.ts +17 -2
  14. package/build/ba/types.d.ts.map +1 -1
  15. package/build/blueprint/case.js +3 -3
  16. package/build/connect/consts.d.ts +5 -8
  17. package/build/connect/consts.d.ts.map +1 -1
  18. package/build/connect/consts.js +5 -8
  19. package/build/connect/consts.js.map +1 -1
  20. package/build/connect/entrypoints.d.ts +1 -43
  21. package/build/connect/entrypoints.d.ts.map +1 -1
  22. package/build/connect/entrypoints.js +1 -18
  23. package/build/connect/entrypoints.js.map +1 -1
  24. package/build/connect/index.d.ts +1 -0
  25. package/build/connect/index.d.ts.map +1 -1
  26. package/build/connect/index.js +1 -0
  27. package/build/connect/index.js.map +1 -1
  28. package/build/connect/jobs.d.ts +25 -0
  29. package/build/connect/jobs.d.ts.map +1 -0
  30. package/build/connect/jobs.js +29 -0
  31. package/build/connect/jobs.js.map +1 -0
  32. package/build/connect/references.d.ts +1 -40
  33. package/build/connect/references.d.ts.map +1 -1
  34. package/build/connect/references.js +0 -8
  35. package/build/connect/references.js.map +1 -1
  36. package/build/connect/schemas.d.ts +1 -7
  37. package/build/connect/schemas.d.ts.map +1 -1
  38. package/build/connect/schemas.js +1 -25
  39. package/build/connect/schemas.js.map +1 -1
  40. package/build/connect/types.d.ts +30 -45
  41. package/build/connect/types.d.ts.map +1 -1
  42. package/build/design/consts.d.ts +0 -2
  43. package/build/design/consts.d.ts.map +1 -1
  44. package/build/design/consts.js +0 -2
  45. package/build/design/consts.js.map +1 -1
  46. package/build/design/helpers.d.ts +6 -2
  47. package/build/design/helpers.d.ts.map +1 -1
  48. package/build/design/helpers.js +6 -2
  49. package/build/design/helpers.js.map +1 -1
  50. package/build/design/types.d.ts +12 -11
  51. package/build/design/types.d.ts.map +1 -1
  52. package/build/execution/types.d.ts +11 -0
  53. package/build/execution/types.d.ts.map +1 -1
  54. package/build/index.d.ts +1 -0
  55. package/build/index.d.ts.map +1 -1
  56. package/build/index.js +1 -0
  57. package/build/index.js.map +1 -1
  58. package/build/planning/consts.d.ts +141 -0
  59. package/build/planning/consts.d.ts.map +1 -0
  60. package/build/planning/consts.js +170 -0
  61. package/build/planning/consts.js.map +1 -0
  62. package/build/planning/errors.d.ts +64 -0
  63. package/build/planning/errors.d.ts.map +1 -0
  64. package/build/planning/errors.js +99 -0
  65. package/build/planning/errors.js.map +1 -0
  66. package/build/planning/flows.d.ts +34 -0
  67. package/build/planning/flows.d.ts.map +1 -0
  68. package/build/planning/flows.js +174 -0
  69. package/build/planning/flows.js.map +1 -0
  70. package/build/planning/helpers.d.ts +54 -0
  71. package/build/planning/helpers.d.ts.map +1 -0
  72. package/build/planning/helpers.js +101 -0
  73. package/build/planning/helpers.js.map +1 -0
  74. package/build/planning/index.d.ts +7 -0
  75. package/build/planning/index.d.ts.map +1 -0
  76. package/build/planning/index.js +6 -0
  77. package/build/planning/index.js.map +1 -0
  78. package/build/planning/schemas.d.ts +23 -0
  79. package/build/planning/schemas.d.ts.map +1 -0
  80. package/build/planning/schemas.js +65 -0
  81. package/build/planning/schemas.js.map +1 -0
  82. package/build/planning/types.d.ts +70 -0
  83. package/build/planning/types.d.ts.map +1 -0
  84. package/build/planning/types.js +2 -0
  85. package/build/planning/types.js.map +1 -0
  86. package/build/scaffold/schemas.d.ts.map +1 -1
  87. package/build/scaffold/schemas.js +7 -2
  88. package/build/scaffold/schemas.js.map +1 -1
  89. package/build/scaffold/types.d.ts +5 -1
  90. package/build/scaffold/types.d.ts.map +1 -1
  91. package/package.json +8 -6
  92. package/src/ba/consts.ts +2 -3
  93. package/src/ba/helpers.ts +3 -2
  94. package/src/ba/types.ts +17 -2
  95. package/src/blueprint/case.ts +3 -3
  96. package/src/connect/consts.ts +5 -8
  97. package/src/connect/entrypoints.ts +2 -41
  98. package/src/connect/index.ts +1 -0
  99. package/src/connect/jobs.ts +40 -0
  100. package/src/connect/references.ts +1 -22
  101. package/src/connect/schemas.ts +2 -29
  102. package/src/connect/types.ts +30 -51
  103. package/src/design/consts.ts +0 -3
  104. package/src/design/helpers.ts +6 -2
  105. package/src/design/types.ts +12 -11
  106. package/src/execution/types.ts +11 -0
  107. package/src/index.ts +1 -0
  108. package/src/planning/consts.ts +182 -0
  109. package/src/planning/errors.ts +117 -0
  110. package/src/planning/flows.ts +204 -0
  111. package/src/planning/helpers.ts +133 -0
  112. package/src/planning/index.ts +6 -0
  113. package/src/planning/schemas.ts +70 -0
  114. package/src/planning/types.ts +75 -0
  115. package/src/scaffold/schemas.ts +7 -2
  116. package/src/scaffold/types.ts +10 -1
  117. package/tests/branding.spec.ts +37 -0
  118. package/tests/connect-entrypoints.spec.ts +35 -3
  119. package/tests/design.spec.ts +3 -3
  120. package/tests/planning.spec.ts +356 -0
@@ -0,0 +1,101 @@
1
+ import { WorkcardKind } from '@owlmeans/planning';
2
+ import { ProjectArea } from '../areas/consts.js';
3
+ import { userStoryOfDesign } from '../design/helpers.js';
4
+ import { VIABLE_PROJECT_TYPE, VIABLE_STORY_TYPE, VIABLE_USER_CHANNELS, ViableSpecCategory, } from './consts.js';
5
+ import { ProjectStoryMissconfigured } from './errors.js';
6
+ /** A `viable:project` card — kind AND type, since a foreign provider may share either alone. */
7
+ export const isViableProject = (card) => card != null && card.kind === WorkcardKind.Project && card.type === VIABLE_PROJECT_TYPE;
8
+ /** A `viable:user-story` card. */
9
+ export const isViableStory = (card) => card != null && card.kind === WorkcardKind.Card && card.type === VIABLE_STORY_TYPE;
10
+ /** Whether a write came from a person (`web`, `connect`) rather than the platform's own runs. */
11
+ export const isUserChannel = (channel) => channel != null && VIABLE_USER_CHANNELS.includes(channel);
12
+ export const projectFieldsOf = (card) => (card.fields ?? {});
13
+ /**
14
+ * A story card's fields, with the two required ones always answered.
15
+ *
16
+ * An absent area reads as `guest` — the area that guards nothing — and an absent primary flag as
17
+ * `false`, so a reader never branches on a card written by a store that dropped them.
18
+ */
19
+ export const storyFieldsOf = (card) => {
20
+ const fields = (card.fields ?? {});
21
+ return { ...fields, area: fields.area ?? ProjectArea.Guest, primary: fields.primary === true };
22
+ };
23
+ /** The draft shape the analysis prompts and moderation take, from a card. */
24
+ export const storyDraftOf = (card) => ({ story: card.title, area: storyFieldsOf(card).area });
25
+ /**
26
+ * The aggregate the coders take, for a story CARD.
27
+ *
28
+ * The card wins on the narrative, the code, the area and the actor — a person may have changed any
29
+ * of them since the design was written. The design supplies what only it knows: the entities and
30
+ * the screens. Without a design the aggregate has no screens yet.
31
+ */
32
+ export const userStoryOf = (card, design) => {
33
+ const fields = storyFieldsOf(card);
34
+ const base = design != null
35
+ ? userStoryOfDesign(design)
36
+ : { story: card.title, area: fields.area, entity: null, entities: [], screens: [] };
37
+ const code = card.code ?? base.code;
38
+ return {
39
+ ...base,
40
+ story: card.title,
41
+ ...(code != null ? { code } : {}),
42
+ area: fields.area,
43
+ ...(fields.actor != null ? { actor: fields.actor } : {}),
44
+ };
45
+ };
46
+ /**
47
+ * The current document of one category among a card's specifications.
48
+ *
49
+ * The highest revision wins, then the most recently updated; a category nobody wrote answers
50
+ * `null`.
51
+ */
52
+ export const currentSpecOf = (specs, category) => specs
53
+ .filter(spec => spec.category === category)
54
+ .reduce((best, spec) => {
55
+ if (best == null)
56
+ return spec;
57
+ const byRevision = (spec.revision ?? 0) - (best.revision ?? 0);
58
+ if (byRevision !== 0)
59
+ return byRevision > 0 ? spec : best;
60
+ return (spec.updatedAt ?? spec.createdAt) > (best.updatedAt ?? best.createdAt) ? spec : best;
61
+ }, null);
62
+ /** The body of a category's current document, `''` when there is none. */
63
+ export const currentSpecBody = (specs, category) => currentSpecOf(specs, category)?.body ?? '';
64
+ /**
65
+ * The brief a generator reads, assembled from the project card and its specifications.
66
+ *
67
+ * `name` is the card's title and `alias` its code; a brief part nobody wrote is `''`, which is
68
+ * what every prompt already treats as "not stated".
69
+ */
70
+ export const projectBriefOf = (project, specs) => {
71
+ const { language } = projectFieldsOf(project);
72
+ return {
73
+ name: project.title,
74
+ ...(project.code != null ? { alias: project.code } : {}),
75
+ description: project.description ?? '',
76
+ specification: currentSpecBody(specs, ViableSpecCategory.Specification),
77
+ designSystem: currentSpecBody(specs, ViableSpecCategory.DesignSystem),
78
+ vision: currentSpecBody(specs, ViableSpecCategory.Vision),
79
+ ...(language != null ? { language } : {}),
80
+ };
81
+ };
82
+ /**
83
+ * What the metadata store writes to `docs/stories/<code>.md`, from the card and a run's content.
84
+ *
85
+ * The CODE is the target's only story identifier — a card id never reaches a target file — so a
86
+ * story card without one is refused rather than filed under its id.
87
+ */
88
+ export const storyWriteInputOf = (card, content) => {
89
+ if (card.code == null || card.code === '') {
90
+ throw new ProjectStoryMissconfigured('no-code');
91
+ }
92
+ const { status, ...rest } = content;
93
+ return {
94
+ ...rest,
95
+ code: card.code,
96
+ narrative: card.title,
97
+ status: status ?? card.status,
98
+ primary: storyFieldsOf(card).primary,
99
+ };
100
+ };
101
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/planning/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './consts.js';
2
+ export * from './errors.js';
3
+ export * from './schemas.js';
4
+ export * from './flows.js';
5
+ export * from './helpers.js';
6
+ export type * from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/planning/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,mBAAmB,YAAY,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './consts.js';
2
+ export * from './errors.js';
3
+ export * from './schemas.js';
4
+ export * from './flows.js';
5
+ export * from './helpers.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/planning/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { JSONSchemaType } from 'ajv';
2
+ import type { ViableProjectFields, ViableStoryFields } from './types.js';
3
+ /**
4
+ * The `fields` schema of a `viable:project` card.
5
+ *
6
+ * A record-element schema: hand-written, cast, every optional key nullable with its type, every
7
+ * nullable enum listing `null`. Plain strings where the vocabulary grows in a library this record
8
+ * does not redeploy with (blueprint, case, game kind).
9
+ */
10
+ export declare const ViableProjectFieldsSchema: JSONSchemaType<ViableProjectFields>;
11
+ /**
12
+ * The `fields` schema of a `viable:user-story` card.
13
+ *
14
+ * `area` is required, and a create that carries none is still valid by the time it is checked:
15
+ * validation runs after the planning middlewares, and the viable plugin's re-format hook fills the
16
+ * area of a narrative a person wrote.
17
+ */
18
+ export declare const ViableStoryFieldsSchema: JSONSchemaType<ViableStoryFields>;
19
+ /** The open `fields` of a reserved card type — nothing is decided about them yet. */
20
+ export declare const ViableOpenFieldsSchema: JSONSchemaType<Record<string, unknown>>;
21
+ /** A document carries nothing under `fields`: its payload is the specification body. */
22
+ export declare const ViableSpecFieldsSchema: JSONSchemaType<Record<string, never>>;
23
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/planning/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAOzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAExE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAiBtB,cAAc,CAAC,mBAAmB,CAAC,CAAA;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAWpB,cAAc,CAAC,iBAAiB,CAAC,CAAA;AAEjD,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,EAKnB,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEvD,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,EAKnB,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { CODE_MAX } from '@owlmeans/planning';
2
+ import { ProjectArea } from '../areas/consts.js';
3
+ import { StoryKind } from '../ba/consts.js';
4
+ import { ConnectLlm, ConnectTarget } from '../connect/consts.js';
5
+ import { ProjectOriginSchema } from '../convert/schemas.js';
6
+ import { StoryActor } from '../design/runtime.js';
7
+ /**
8
+ * The `fields` schema of a `viable:project` card.
9
+ *
10
+ * A record-element schema: hand-written, cast, every optional key nullable with its type, every
11
+ * nullable enum listing `null`. Plain strings where the vocabulary grows in a library this record
12
+ * does not redeploy with (blueprint, case, game kind).
13
+ */
14
+ export const ViableProjectFieldsSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ formerAliases: {
18
+ type: 'array', items: { type: 'string', minLength: 1, maxLength: CODE_MAX }, nullable: true,
19
+ },
20
+ language: { type: 'string', minLength: 2, maxLength: 16, nullable: true },
21
+ blueprint: { type: 'string', minLength: 1, maxLength: 64, nullable: true },
22
+ blueprintCase: { type: 'string', minLength: 1, maxLength: 64, nullable: true },
23
+ gameKind: { type: 'string', minLength: 1, maxLength: 64, nullable: true },
24
+ target: { type: 'string', enum: [...Object.values(ConnectTarget), null], nullable: true },
25
+ origin: { ...ProjectOriginSchema, nullable: true },
26
+ connectLlmMode: { type: 'string', enum: [...Object.values(ConnectLlm), null], nullable: true },
27
+ converterLlmMode: { type: 'string', enum: [...Object.values(ConnectLlm), null], nullable: true },
28
+ },
29
+ required: [],
30
+ additionalProperties: false,
31
+ };
32
+ /**
33
+ * The `fields` schema of a `viable:user-story` card.
34
+ *
35
+ * `area` is required, and a create that carries none is still valid by the time it is checked:
36
+ * validation runs after the planning middlewares, and the viable plugin's re-format hook fills the
37
+ * area of a narrative a person wrote.
38
+ */
39
+ export const ViableStoryFieldsSchema = {
40
+ type: 'object',
41
+ properties: {
42
+ area: { type: 'string', enum: Object.values(ProjectArea) },
43
+ primary: { type: 'boolean' },
44
+ actor: { type: 'string', enum: [...Object.values(StoryActor), null], nullable: true },
45
+ warning: { type: 'string', maxLength: 1024, nullable: true },
46
+ kind: { type: 'string', enum: [...Object.values(StoryKind), null], nullable: true },
47
+ },
48
+ required: ['area', 'primary'],
49
+ additionalProperties: false,
50
+ };
51
+ /** The open `fields` of a reserved card type — nothing is decided about them yet. */
52
+ export const ViableOpenFieldsSchema = {
53
+ type: 'object',
54
+ properties: {},
55
+ required: [],
56
+ additionalProperties: true,
57
+ };
58
+ /** A document carries nothing under `fields`: its payload is the specification body. */
59
+ export const ViableSpecFieldsSchema = {
60
+ type: 'object',
61
+ properties: {},
62
+ required: [],
63
+ additionalProperties: false,
64
+ };
65
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/planning/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { Card, Project, Specification } from '@owlmeans/planning';
2
+ import type { ProjectArea } from '../areas/consts.js';
3
+ import type { StoryKind } from '../ba/consts.js';
4
+ import type { ConnectLlm, ConnectTarget } from '../connect/consts.js';
5
+ import type { ProjectOrigin } from '../convert/types.js';
6
+ import type { StoryActor } from '../design/runtime.js';
7
+ import type { StoryWriteInput } from '../metadata/types.js';
8
+ /**
9
+ * What a `viable:project` card keeps under `fields`.
10
+ *
11
+ * The alias is the card's `code`, the name its `title`; the brief parts are specifications. Every
12
+ * key is optional: a project created before a field existed carries none, and an absent value
13
+ * means the platform default (inherit a mode, the default blueprint, a cloud slot).
14
+ */
15
+ export type ViableProjectFields = {
16
+ /** Aliases this project gave up. Names are retired, never freed to a sibling project. */
17
+ formerAliases?: string[];
18
+ /** The IETF tag generated UI text is written in. */
19
+ language?: string;
20
+ /** The blueprint id the project was drawn with. */
21
+ blueprint?: string;
22
+ /** The blueprint case classified from the prompt. Absent applies no patch. */
23
+ blueprintCase?: string;
24
+ /** How a game is played; absent for every other case. */
25
+ gameKind?: string;
26
+ /** Where the tree lives; absent is the platform's own slot. */
27
+ target?: ConnectTarget;
28
+ /** Where converted code came from; present only on an import. */
29
+ origin?: ProjectOrigin;
30
+ /** Who performs a run's model calls on this project; absent inherits the owner's preference. */
31
+ connectLlmMode?: ConnectLlm;
32
+ /** Who performs a conversion's model calls on this project; absent inherits. */
33
+ converterLlmMode?: ConnectLlm;
34
+ };
35
+ /**
36
+ * What a `viable:user-story` card keeps under `fields`.
37
+ *
38
+ * The narrative is the card's `title`, the flow ordinal its `order` (a double — a connective story
39
+ * sits between two flow steps), the status its primary flow status.
40
+ */
41
+ export type ViableStoryFields = {
42
+ /** The audience acting in the story; its screens hang under this area. */
43
+ area: ProjectArea;
44
+ /** The story whose screen is the project's front door. Exactly one per project. */
45
+ primary: boolean;
46
+ /** Who acts; absent is a person. */
47
+ actor?: StoryActor;
48
+ /** Why the last development did not end cleanly. Written as `''` to clear. */
49
+ warning?: string;
50
+ /** Which half of the analysis the story came from. */
51
+ kind?: StoryKind;
52
+ };
53
+ export interface ViableProjectCard extends Project {
54
+ fields: ViableProjectFields;
55
+ }
56
+ export interface ViableStoryCard extends Card {
57
+ fields: ViableStoryFields;
58
+ }
59
+ /** A document under a Viable card — the brief parts, the scaffold plan, a story design. */
60
+ export type ViableSpecification = Specification;
61
+ /**
62
+ * What a develop run hands the metadata store beside the card.
63
+ *
64
+ * The code, the narrative and the primary flag are the CARD's and are never passed separately — a
65
+ * second copy is a second answer. `status` defaults to the card's own.
66
+ */
67
+ export type StoryWriteContent = Omit<StoryWriteInput, 'code' | 'narrative' | 'primary' | 'status'> & {
68
+ status?: string;
69
+ };
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/planning/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE3D;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,iEAAiE;IACjE,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,gGAAgG;IAChG,cAAc,CAAC,EAAE,UAAU,CAAA;IAC3B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,UAAU,CAAA;CAC9B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0EAA0E;IAC1E,IAAI,EAAE,WAAW,CAAA;IACjB,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAA;IAChB,oCAAoC;IACpC,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,MAAM,EAAE,mBAAmB,CAAA;CAC5B;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI;IAC3C,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,2FAA2F;AAC3F,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC,GAClE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/planning/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAIzC,OAAO,KAAK,EACK,eAAe,EAAoB,YAAY,EAC/D,MAAM,YAAY,CAAA;AAqOnB,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,eAAe,CAkBjE,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CA2B3D,CAAA"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAIzC,OAAO,KAAK,EACK,eAAe,EAAoB,YAAY,EAC/D,MAAM,YAAY,CAAA;AA0OnB,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,eAAe,CAkBjE,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CA2B3D,CAAA"}
@@ -159,15 +159,20 @@ const GuestHomePlanSchema = {
159
159
  hero: {
160
160
  type: 'object',
161
161
  properties: {
162
- eyebrow: { type: 'string', description: 'A 2-4 word positioning phrase above the headline' },
163
162
  headline: {
164
163
  type: 'string',
165
164
  description: 'The product\'s promise in one line, under 9 words. Never the product name alone'
166
165
  },
167
166
  sub: { type: 'string', description: 'One or two sentences: what it does and who it is for' },
168
167
  cta: { type: 'string', description: 'The call-to-action label, 2-3 words' },
168
+ eyebrow: {
169
+ type: 'string', nullable: true,
170
+ description: 'OPTIONAL, normally omitted. A small badge above the headline - set it only when'
171
+ + ' the specification explicitly asks for a label there. A landing page carries no badge by'
172
+ + ' default: the headline is what positions the product'
173
+ },
169
174
  },
170
- required: ['eyebrow', 'headline', 'sub', 'cta'],
175
+ required: ['headline', 'sub', 'cta'],
171
176
  additionalProperties: false,
172
177
  },
173
178
  problem: {
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,MAAM,mBAAmB,GAAkC;IACzD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,eAAe;IACtB,WAAW,EAAE,oDAAoD;IACjE,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;QACrF,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,0DAA0D;SACxE;QACD,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI;YAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,iFAAiF;SAC/F;QACD,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI;YAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,qCAAqC;SACnD;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI;YAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,oCAAoC;SAClD;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI;YAC7B,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;oBACzD,KAAK,EAAE;wBACL,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG;wBACzC,WAAW,EAAE,+DAA+D;qBAC7E;iBACF;gBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC5B,oBAAoB,EAAE,KAAK;aAC5B;YACD,WAAW,EAAE,6BAA6B;SAC3C;QACD,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI;YAC7B,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;oBAChE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;iBAC3F;gBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC5B,oBAAoB,EAAE,KAAK;aAC5B;YACD,WAAW,EAAE,2CAA2C;SACzD;KACF;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;IACjC,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,MAAM,uBAAuB,GAAsC;IACjE,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,mBAAmB;IAC1B,WAAW,EAAE,8EAA8E;IAC3F,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iEAAiE;SAC/E;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uEAAuE;kBAChF,4DAA4D;SACjE;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qEAAqE;kBAC9E,kFAAkF;SACvF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;oBAC/B,WAAW,EAAE,kDAAkD;0BAC3D,gEAAgE;0BAChE,qEAAqE;0BACrE,0BAA0B;iBAC/B;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBACxE,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0DAA0D;iBACxE;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;YAC1C,oBAAoB,EAAE,KAAK;SAC5B;QACD,MAAM,EAAE,mBAAmB;QAC3B,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,8EAA8E;kBACvF,8CAA8C;SACnD;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI;YAC9B,WAAW,EAAE,6EAA6E;kBACtF,sFAAsF;kBACtF,mFAAmF;kBACnF,iDAAiD;SACtD;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI;YAC9B,WAAW,EAAE,6EAA6E;kBACtF,uEAAuE;SAC5E;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;IACnE,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,MAAM,sBAAsB,GAAqC;IAC/D,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,kBAAkB;IACzB,WAAW,EAAE,6EAA6E;IAC1F,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,WAAW,EAAE,gCAAgC;SAC9C;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBACtE,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gEAAgE;iBAC9E;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,oBAAoB,EAAE,KAAK;SAC5B;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,oDAAoD;kBAC7D,+DAA+D;SACpE;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC;IACvC,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,MAAM,mBAAmB,GAAkC;IACzD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,eAAe;IACtB,WAAW,EAAE,mCAAmC;IAChD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iFAAiF;iBAC/F;gBACD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;gBAC5F,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;gBAC3E,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI;oBAC9B,WAAW,EAAE,iFAAiF;0BAC1F,0FAA0F;0BAC1F,sDAAsD;iBAC3D;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC;YACpC,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBAClE,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wEAAwE;0BACjF,2BAA2B;iBAChC;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,oBAAoB,EAAE,KAAK;SAC5B;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;gBAC/E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;aACxF;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,oBAAoB,EAAE,KAAK;SAC5B;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;oBACnE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;iBACjF;gBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC3B,oBAAoB,EAAE,KAAK;aAC5B;YACD,WAAW,EAAE,2EAA2E;SACzF;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;oBACzF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE;oBACnF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;iBAC/D;gBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;gBACnC,oBAAoB,EAAE,KAAK;aAC5B;YACD,WAAW,EAAE,kCAAkC;SAChD;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;IACrE,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAoC;IACpE,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,gEAAgE;IAC7E,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6EAA6E;kBACtF,iFAAiF;SACtF;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yEAAyE;kBAClF,8DAA8D;SACnE;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;IACjC,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAiC;IAC9D,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,6EAA6E;UACtF,wBAAwB;IAC5B,UAAU,EAAE;QACV,QAAQ,EAAE,qBAAqB;QAC/B,SAAS,EAAE,mBAAmB;QAC9B,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EAAE,iEAAiE;SAC/E;QACD,OAAO,EAAE;YACP,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,kEAAkE;SAChF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6EAA6E;kBACtF,wFAAwF;kBACxF,+BAA+B;SACpC;KACF;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;IACjE,oBAAoB,EAAE,KAAK;CAC5B,CAAA"}
@@ -100,10 +100,14 @@ export interface ProductIdentity {
100
100
  /** The guest area's landing page — the product's public face. */
101
101
  export interface GuestHomePlan {
102
102
  hero: {
103
- eyebrow: string;
104
103
  headline: string;
105
104
  sub: string;
106
105
  cta: string;
106
+ /**
107
+ * A badge above the headline — OPTIONAL and normally absent. A landing page carries no badge
108
+ * unless its specification asks for one; the headline is what positions the product.
109
+ */
110
+ eyebrow?: string;
107
111
  };
108
112
  problem: {
109
113
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/viable-common",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
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,11 +59,13 @@
59
59
  "typescript": "^7.0.2"
60
60
  },
61
61
  "dependencies": {
62
- "@owlmeans/agent-common": "^0.1.18-rc.30",
63
- "@owlmeans/entrypoint": "^0.1.18-rc.25",
64
- "@owlmeans/error": "^0.1.18-rc.22",
65
- "@owlmeans/llm-common": "^0.1.18-rc.26",
66
- "@owlmeans/route": "^0.1.18-rc.23"
62
+ "@owlmeans/agent-common": "^0.1.18-rc.31",
63
+ "@owlmeans/entrypoint": "^0.1.18-rc.27",
64
+ "@owlmeans/error": "^0.1.18-rc.26",
65
+ "@owlmeans/llm-common": "^0.1.18-rc.27",
66
+ "@owlmeans/planning": "^0.1.18-rc.0",
67
+ "@owlmeans/resource": "^0.1.18-rc.26",
68
+ "@owlmeans/route": "^0.1.18-rc.25"
67
69
  },
68
70
  "publishConfig": {
69
71
  "access": "public"
package/src/ba/consts.ts CHANGED
@@ -30,9 +30,8 @@ export enum ConnectingStoryKind {
30
30
  * Which half of the analysis a story came from.
31
31
  *
32
32
  * `flow` stories implement the numbered steps of the main flow — each adds value to one record.
33
- * `connective` stories are what a person needs to get from one step to the next. Neither is
34
- * persisted: the init pipeline is the only thing that has ever needed to tell them apart, and it
35
- * knows at creation time.
33
+ * `connective` stories are what a person needs to get from one step to the next. Persisted on the
34
+ * story card as `fields.kind`, so the distinction survives the pipeline that drew it.
36
35
  */
37
36
  export enum StoryKind {
38
37
  Flow = 'flow',
package/src/ba/helpers.ts CHANGED
@@ -28,7 +28,8 @@ const canonical = (story: string): string => story.trim().replace(/\s+/g, ' ').t
28
28
  *
29
29
  * This is the only place the anchor is interpreted. Both halves of the feature — the prompt that
30
30
  * produces it and the pipeline that persists the result — read it through here, or the two drift
31
- * and nothing fails loudly enough to notice.
31
+ * and nothing fails loudly enough to notice. The CLAMPED anchor is carried out on each connective
32
+ * entry as `after`, which is what the story card's `follows` relationship is written from.
32
33
  *
33
34
  * Four properties are deliberate:
34
35
  *
@@ -87,7 +88,7 @@ export const mergeConnectingStories = (
87
88
  return flow.flatMap(({ story, area }, index) => [
88
89
  { story, area, kind: StoryKind.Flow },
89
90
  ...buckets[index]!.map(draft => (
90
- { story: draft.story.trim(), area: draft.area, kind: StoryKind.Connective }
91
+ { story: draft.story.trim(), area: draft.area, kind: StoryKind.Connective, after: index + 1 }
91
92
  )),
92
93
  ])
93
94
  }
package/src/ba/types.ts CHANGED
@@ -35,11 +35,14 @@ export interface ConnectingStoryList {
35
35
  * One entry of the single ordered story list init persists — the flow interleaved with the
36
36
  * stories that connect it.
37
37
  *
38
- * `kind` survives only as far as the consumer that creates the records; nothing downstream of the
39
- * story list has ever had a use for it.
38
+ * `kind` is persisted on the story card (`fields.kind`). `after` is present on a connective entry
39
+ * only and becomes the card's `follows` relationship: the 1-based position, counted among the
40
+ * `flow` entries of the same list, of the flow story it follows — already clamped, so it always
41
+ * names a flow story that list contains.
40
42
  */
41
43
  export interface MergedStoryDraft extends StoryDraft {
42
44
  kind: StoryKind
45
+ after?: number
43
46
  }
44
47
 
45
48
  export interface UserStory {
@@ -97,8 +100,20 @@ export interface Attribute {
97
100
  description: string
98
101
  }
99
102
 
103
+ /**
104
+ * The project BRIEF a generator reads — assembled from the project card and its specifications
105
+ * (`projectBriefOf`), never stored in this shape.
106
+ */
100
107
  export interface AgentProject {
101
108
  name: string
109
+ /**
110
+ * The project card's `code` — the slug the platform minted and every generated address is
111
+ * composed from.
112
+ *
113
+ * Optional because a brief is also assembled before a project has one. A reader that needs a
114
+ * slug prefers this over re-deriving one from `name`: a rename changes the name, never the code.
115
+ */
116
+ alias?: string
102
117
  description: string
103
118
  specification: string
104
119
  designSystem: string
@@ -61,8 +61,8 @@ export interface BlueprintCaseDefinition {
61
61
  /** What every AI case installs. The langchain peers are declared here, at ONE range. */
62
62
  const AI_DEPS = {
63
63
  [SubProject.Backend]: {
64
- '@owlmeans/llm': '^0.1.18-rc.24',
65
- '@owlmeans/agent': '^0.1.18-rc.27',
64
+ '@owlmeans/llm': '^0.1.18-rc.28',
65
+ '@owlmeans/agent': '^0.1.18-rc.29',
66
66
  '@langchain/core': '^1.2.9',
67
67
  '@langchain/anthropic': '^1.5.8',
68
68
  '@langchain/openai': '^1.5.10',
@@ -214,7 +214,7 @@ in advance.
214
214
  deps: {
215
215
  [SubProject.Backend]: {
216
216
  ...AI_DEPS[SubProject.Backend],
217
- '@owlmeans/agent-skills': '^0.1.18-rc.23',
217
+ '@owlmeans/agent-skills': '^0.1.18-rc.27',
218
218
  },
219
219
  },
220
220
  libraries: AI_LIBRARIES,
@@ -382,6 +382,11 @@ export const RES_CONNECT_SESSION = 'connect-session'
382
382
  * the manager API all address the same aliases, and a client that had to be handed its own copy of
383
383
  * the tree would be a second place for a name to drift. The platform spreads the declarations
384
384
  * these produce into its own entrypoint list and binds handlers onto them.
385
+ *
386
+ * There is no story group. A user story is a planning CARD, read and written through the planning
387
+ * protocol tree the platform mounts beside this one (`makePlanningProtocols` in
388
+ * `@owlmeans/planning`) — one surface for the browser and a connector alike, so a story rule the
389
+ * platform enforces cannot be enforced on one of them only.
385
390
  */
386
391
  export const connect = Object.freeze({
387
392
  base: 'viable:manager-api:connect:base',
@@ -424,14 +429,6 @@ export const connect = Object.freeze({
424
429
  inquiry: Object.freeze({
425
430
  answer: 'viable:manager-api:connect:inquiry:answer',
426
431
  }),
427
- story: Object.freeze({
428
- list: 'viable:manager-api:connect:story:list',
429
- get: 'viable:manager-api:connect:story:get',
430
- create: 'viable:manager-api:connect:story:create',
431
- update: 'viable:manager-api:connect:story:update',
432
- delete: 'viable:manager-api:connect:story:delete',
433
- develop: 'viable:manager-api:connect:story:develop',
434
- }),
435
432
  files: Object.freeze({
436
433
  list: 'viable:manager-api:connect:files:list',
437
434
  }),
@@ -9,15 +9,13 @@ import {
9
9
  ConnectJobParamsSchema, ConnectModifyBodySchema, ConnectOpParamsSchema, ConnectOpResultSchema,
10
10
  ConnectPipelineParamsSchema, ConnectPipelineResumeBodySchema, ConnectProjectIdSchema,
11
11
  ConnectProjectLlmBodySchema, ConnectSessionOpenSchema, ConnectSessionParamsSchema,
12
- ConnectStoryBodySchema, ConnectStoryParamsSchema, ConnectStoryQuerySchema, ConnectWaitQuerySchema,
13
- InquiryAnswerSchema,
12
+ ConnectWaitQuerySchema, InquiryAnswerSchema,
14
13
  } from './schemas.js'
15
14
  import type {
16
15
  ConnectAttachBody, ConnectConfirmBody, ConnectConvertCreateBody, ConnectConvertProceedBody,
17
16
  ConnectCreateBody, ConnectInquiryAnswerBody, ConnectJob, ConnectJobParams, ConnectModifyBody,
18
17
  ConnectPipelineParams, ConnectPipelineResumeBody, ConnectProjectLlmBody, ConnectSessionOpen,
19
- ConnectSessionParams, ConnectStoryBody, ConnectStoryQuery, ConnectWaitQuery, ConversionStatusView,
20
- ConvertCheck,
18
+ ConnectSessionParams, ConnectWaitQuery, ConversionStatusView, ConvertCheck,
21
19
  } from './types.js'
22
20
  import type { ConnectOpResult } from './ops.js'
23
21
  import type { ConverterProjectLlmBody } from '../convert/types.js'
@@ -198,43 +196,6 @@ export const connectProtocols = (opts: ConnectEntrypointOptions) => {
198
196
 
199
197
  },
200
198
 
201
- // --- stories ---------------------------------------------------------------------------
202
- story: {
203
- list: protocol(
204
- route(connect.story.list, '/story/:id', { parent: base, method: RouteMethod.GET }),
205
- contract.request({ params: typed<{ id: string }>(ConnectProjectIdSchema), query: typed<ConnectStoryQuery>(ConnectStoryQuerySchema) }, typed())
206
- ),
207
- create: protocol(
208
- route(connect.story.create, '/story/:id', { parent: base, method: RouteMethod.POST }),
209
- contract.request({ params: typed<{ id: string }>(ConnectProjectIdSchema), body: typed<ConnectStoryBody>(ConnectStoryBodySchema) }, typed())
210
- ),
211
- get: protocol(
212
- route(connect.story.get, '/story/:id/:storyId', {
213
- parent: base, method: RouteMethod.GET
214
- }),
215
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema) }, typed())
216
- ),
217
- update: protocol(
218
- route(connect.story.update, '/story/:id/:storyId', {
219
- parent: base, method: RouteMethod.PUT
220
- }),
221
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema), body: typed<ConnectStoryBody>(ConnectStoryBodySchema) }, typed())
222
- ),
223
- delete: protocol(
224
- route(connect.story.delete, '/story/:id/:storyId', {
225
- parent: base, method: RouteMethod.DELETE
226
- }),
227
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema) }, typed())
228
- ),
229
- develop: protocol(
230
- route(connect.story.develop, '/story/:id/:storyId/develop', {
231
- parent: base, method: RouteMethod.POST
232
- }),
233
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema) }, typed())
234
- ),
235
-
236
- },
237
-
238
199
  // --- generated files and conversion ----------------------------------------------------
239
200
  files: {
240
201
  list: protocol(
@@ -3,5 +3,6 @@ export * from './schemas.js'
3
3
  export * from './errors.js'
4
4
  export * from './entrypoints.js'
5
5
  export * from './references.js'
6
+ export * from './jobs.js'
6
7
  export type * from './types.js'
7
8
  export type * from './ops.js'