@owlmeans/viable-common 0.0.42 → 0.0.44
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.
- package/README.md +3 -3
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/agent-presentation/SKILL.md +1 -1
- package/agent-meta/skills/viable-common/SKILL.md +33 -15
- package/build/agent/consts.d.ts +58 -0
- package/build/agent/consts.d.ts.map +1 -0
- package/build/agent/consts.js +63 -0
- package/build/agent/consts.js.map +1 -0
- package/build/agent/consts.local.d.ts +21 -0
- package/build/agent/consts.local.d.ts.map +1 -0
- package/build/agent/consts.local.js +44 -0
- package/build/agent/consts.local.js.map +1 -0
- package/build/agent/index.d.ts +1 -0
- package/build/agent/index.d.ts.map +1 -1
- package/build/agent/index.js +1 -0
- package/build/agent/index.js.map +1 -1
- package/build/agent/presentation.d.ts +2 -86
- package/build/agent/presentation.d.ts.map +1 -1
- package/build/agent/presentation.js +2 -104
- package/build/agent/presentation.js.map +1 -1
- package/build/agent/types.d.ts +30 -0
- package/build/agent/types.d.ts.map +1 -1
- package/build/agent/types.local.d.ts +2 -0
- package/build/agent/types.local.d.ts.map +1 -0
- package/build/agent/types.local.js +2 -0
- package/build/agent/types.local.js.map +1 -0
- package/build/areas/consts.d.ts +5 -0
- package/build/areas/consts.d.ts.map +1 -1
- package/build/areas/consts.js +4 -0
- package/build/areas/consts.js.map +1 -1
- package/build/areas/tenancy.d.ts +1 -36
- package/build/areas/tenancy.d.ts.map +1 -1
- package/build/areas/tenancy.js +1 -5
- package/build/areas/tenancy.js.map +1 -1
- package/build/areas/types.d.ts +32 -0
- package/build/areas/types.d.ts.map +1 -1
- package/build/ba/types.d.ts +1 -1
- package/build/ba/types.d.ts.map +1 -1
- package/build/blueprint/consts.d.ts +41 -0
- package/build/blueprint/consts.d.ts.map +1 -1
- package/build/blueprint/consts.js +51 -0
- package/build/blueprint/consts.js.map +1 -1
- package/build/blueprint/consts.local.d.ts +2 -0
- package/build/blueprint/consts.local.d.ts.map +1 -0
- package/build/blueprint/consts.local.js +3 -0
- package/build/blueprint/consts.local.js.map +1 -0
- package/build/blueprint/index.d.ts +1 -0
- package/build/blueprint/index.d.ts.map +1 -1
- package/build/blueprint/index.js +1 -0
- package/build/blueprint/index.js.map +1 -1
- package/build/blueprint/types.d.ts +2 -50
- package/build/blueprint/types.d.ts.map +1 -1
- package/build/blueprint/types.js +1 -65
- package/build/blueprint/types.js.map +1 -1
- package/build/blueprint/utils.d.ts +11 -0
- package/build/blueprint/utils.d.ts.map +1 -0
- package/build/blueprint/utils.js +16 -0
- package/build/blueprint/utils.js.map +1 -0
- package/build/branding.d.ts +0 -8
- package/build/branding.d.ts.map +1 -1
- package/build/branding.js +0 -16
- package/build/branding.js.map +1 -1
- package/build/connect/consts.d.ts +0 -10
- package/build/connect/consts.d.ts.map +1 -1
- package/build/connect/consts.js +0 -23
- package/build/connect/consts.js.map +1 -1
- package/build/connect/entrypoints.d.ts +49 -86
- package/build/connect/entrypoints.d.ts.map +1 -1
- package/build/connect/entrypoints.js +5 -2
- package/build/connect/entrypoints.js.map +1 -1
- package/build/connect/errors.d.ts +32 -0
- package/build/connect/errors.d.ts.map +1 -1
- package/build/connect/errors.js +65 -0
- package/build/connect/errors.js.map +1 -1
- package/build/connect/index.d.ts +1 -0
- package/build/connect/index.d.ts.map +1 -1
- package/build/connect/index.js +1 -0
- package/build/connect/index.js.map +1 -1
- package/build/connect/references.d.ts +1 -153
- package/build/connect/references.d.ts.map +1 -1
- package/build/connect/references.js.map +1 -1
- package/build/connect/schemas.d.ts +2 -1
- package/build/connect/schemas.d.ts.map +1 -1
- package/build/connect/schemas.js +9 -0
- package/build/connect/schemas.js.map +1 -1
- package/build/connect/types.d.ts +214 -1
- package/build/connect/types.d.ts.map +1 -1
- package/build/connect/types.local.d.ts +4 -0
- package/build/connect/types.local.d.ts.map +1 -0
- package/build/connect/types.local.js +2 -0
- package/build/connect/types.local.js.map +1 -0
- package/build/connect/utils.d.ts +12 -0
- package/build/connect/utils.d.ts.map +1 -0
- package/build/connect/utils.js +25 -0
- package/build/connect/utils.js.map +1 -0
- package/build/consts.d.ts +8 -0
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +16 -0
- package/build/consts.js.map +1 -1
- package/build/convert/consts.d.ts +0 -12
- package/build/convert/consts.d.ts.map +1 -1
- package/build/convert/consts.js +0 -3
- package/build/convert/consts.js.map +1 -1
- package/build/convert/consts.local.d.ts +55 -0
- package/build/convert/consts.local.d.ts.map +1 -0
- package/build/convert/consts.local.js +104 -0
- package/build/convert/consts.local.js.map +1 -0
- package/build/convert/helpers.d.ts.map +1 -1
- package/build/convert/helpers.js +1 -102
- package/build/convert/helpers.js.map +1 -1
- package/build/convert/index.d.ts +1 -0
- package/build/convert/index.d.ts.map +1 -1
- package/build/convert/index.js +1 -0
- package/build/convert/index.js.map +1 -1
- package/build/convert/types.d.ts +10 -1
- package/build/convert/types.d.ts.map +1 -1
- package/build/convert/utils.d.ts +4 -0
- package/build/convert/utils.d.ts.map +1 -0
- package/build/convert/utils.js +5 -0
- package/build/convert/utils.js.map +1 -0
- package/build/design/consts.d.ts +37 -0
- package/build/design/consts.d.ts.map +1 -1
- package/build/design/consts.js +44 -8
- package/build/design/consts.js.map +1 -1
- package/build/design/runtime.d.ts +2 -103
- package/build/design/runtime.d.ts.map +1 -1
- package/build/design/runtime.js +1 -44
- package/build/design/runtime.js.map +1 -1
- package/build/design/schemas.d.ts +1 -9
- package/build/design/schemas.d.ts.map +1 -1
- package/build/design/schemas.js +1 -1
- package/build/design/schemas.js.map +1 -1
- package/build/design/types.d.ts +75 -1
- package/build/design/types.d.ts.map +1 -1
- package/build/dev/schemas.d.ts.map +1 -1
- package/build/dev/schemas.js.map +1 -1
- package/build/dev/types.local.d.ts +4 -0
- package/build/dev/types.local.d.ts.map +1 -0
- package/build/dev/types.local.js +2 -0
- package/build/dev/types.local.js.map +1 -0
- package/build/integrity/consts.d.ts +0 -117
- package/build/integrity/consts.d.ts.map +1 -1
- package/build/integrity/consts.js +0 -281
- package/build/integrity/consts.js.map +1 -1
- package/build/integrity/consts.local.d.ts +5 -0
- package/build/integrity/consts.local.d.ts.map +1 -0
- package/build/integrity/consts.local.js +5 -0
- package/build/integrity/consts.local.js.map +1 -0
- package/build/integrity/index.d.ts +1 -0
- package/build/integrity/index.d.ts.map +1 -1
- package/build/integrity/index.js +1 -0
- package/build/integrity/index.js.map +1 -1
- package/build/integrity/types.d.ts +33 -1
- package/build/integrity/types.d.ts.map +1 -1
- package/build/integrity/utils.d.ts +88 -0
- package/build/integrity/utils.d.ts.map +1 -0
- package/build/integrity/utils.js +280 -0
- package/build/integrity/utils.js.map +1 -0
- package/build/integrity/verify.d.ts.map +1 -1
- package/build/integrity/verify.js +2 -1
- package/build/integrity/verify.js.map +1 -1
- package/build/intent/consts.local.d.ts +4 -0
- package/build/intent/consts.local.d.ts.map +1 -0
- package/build/intent/consts.local.js +3 -0
- package/build/intent/consts.local.js.map +1 -0
- package/build/intent/entrypoints.d.ts +0 -1
- package/build/intent/entrypoints.d.ts.map +1 -1
- package/build/intent/flow.d.ts.map +1 -1
- package/build/intent/flow.js +2 -2
- package/build/intent/flow.js.map +1 -1
- package/build/intent/types.d.ts +2 -0
- package/build/intent/types.d.ts.map +1 -1
- package/build/metadata/consts.d.ts +33 -0
- package/build/metadata/consts.d.ts.map +1 -1
- package/build/metadata/consts.js +37 -0
- package/build/metadata/consts.js.map +1 -1
- package/build/metadata/types.d.ts +1 -33
- package/build/metadata/types.d.ts.map +1 -1
- package/build/metadata/types.js +1 -38
- package/build/metadata/types.js.map +1 -1
- package/build/planning/consts.d.ts +13 -1
- package/build/planning/consts.d.ts.map +1 -1
- package/build/planning/consts.js +13 -0
- package/build/planning/consts.js.map +1 -1
- package/build/planning/index.d.ts +0 -1
- package/build/planning/index.d.ts.map +1 -1
- package/build/planning/index.js +0 -1
- package/build/planning/index.js.map +1 -1
- package/build/planning/landing.d.ts +0 -12
- package/build/planning/landing.d.ts.map +1 -1
- package/build/planning/landing.js +1 -13
- package/build/planning/landing.js.map +1 -1
- package/build/planning/schemas.d.ts +37 -0
- package/build/planning/schemas.d.ts.map +1 -1
- package/build/planning/schemas.js +173 -4
- package/build/planning/schemas.js.map +1 -1
- package/build/planning/types.d.ts +2 -2
- package/build/planning/types.d.ts.map +1 -1
- package/build/preview/consts.d.ts +3 -1
- package/build/preview/consts.d.ts.map +1 -1
- package/build/preview/consts.js +2 -0
- package/build/preview/consts.js.map +1 -1
- package/build/preview/types.d.ts +17 -2
- package/build/preview/types.d.ts.map +1 -1
- package/build/scaffold/helpers.d.ts +1 -14
- package/build/scaffold/helpers.d.ts.map +1 -1
- package/build/scaffold/helpers.js +11 -0
- package/build/scaffold/helpers.js.map +1 -1
- package/build/scaffold/types.d.ts +2 -0
- package/build/scaffold/types.d.ts.map +1 -1
- package/build/slot/consts.d.ts +7 -13
- package/build/slot/consts.d.ts.map +1 -1
- package/build/slot/consts.js +10 -36
- package/build/slot/consts.js.map +1 -1
- package/build/slot/helpers.d.ts +1 -6
- package/build/slot/helpers.d.ts.map +1 -1
- package/build/slot/helpers.js.map +1 -1
- package/build/slot/index.d.ts +1 -0
- package/build/slot/index.d.ts.map +1 -1
- package/build/slot/index.js +1 -0
- package/build/slot/index.js.map +1 -1
- package/build/slot/layout.d.ts +1 -57
- package/build/slot/layout.d.ts.map +1 -1
- package/build/slot/layout.js +0 -12
- package/build/slot/layout.js.map +1 -1
- package/build/slot/types.d.ts +55 -1
- package/build/slot/types.d.ts.map +1 -1
- package/build/slot/utils.d.ts +18 -0
- package/build/slot/utils.d.ts.map +1 -0
- package/build/slot/utils.js +41 -0
- package/build/slot/utils.js.map +1 -0
- package/build/topology/card.d.ts +1 -6
- package/build/topology/card.d.ts.map +1 -1
- package/build/topology/card.js +1 -3
- package/build/topology/card.js.map +1 -1
- package/build/topology/consts.local.d.ts +4 -0
- package/build/topology/consts.local.d.ts.map +1 -0
- package/build/topology/consts.local.js +4 -0
- package/build/topology/consts.local.js.map +1 -0
- package/build/topology/types.d.ts +5 -0
- package/build/topology/types.d.ts.map +1 -1
- package/package.json +13 -13
- package/src/agent/consts.local.ts +47 -0
- package/src/agent/consts.ts +61 -0
- package/src/agent/index.ts +1 -0
- package/src/agent/presentation.ts +4 -147
- package/src/agent/types.local.ts +1 -0
- package/src/agent/types.ts +40 -0
- package/src/areas/consts.ts +7 -0
- package/src/areas/tenancy.ts +2 -38
- package/src/areas/types.ts +31 -0
- package/src/ba/types.ts +1 -1
- package/src/blueprint/consts.local.ts +3 -0
- package/src/blueprint/consts.ts +52 -0
- package/src/blueprint/index.ts +1 -0
- package/src/blueprint/types.ts +2 -72
- package/src/blueprint/utils.ts +20 -0
- package/src/branding.ts +0 -17
- package/src/connect/consts.ts +0 -22
- package/src/connect/entrypoints.ts +7 -35
- package/src/connect/errors.ts +75 -0
- package/src/connect/index.ts +1 -0
- package/src/connect/references.ts +4 -75
- package/src/connect/schemas.ts +11 -0
- package/src/connect/types.local.ts +5 -0
- package/src/connect/types.ts +124 -1
- package/src/connect/utils.ts +23 -0
- package/src/consts.ts +17 -0
- package/src/convert/consts.local.ts +120 -0
- package/src/convert/consts.ts +0 -14
- package/src/convert/helpers.ts +1 -119
- package/src/convert/index.ts +1 -0
- package/src/convert/types.ts +11 -5
- package/src/convert/utils.ts +8 -0
- package/src/design/consts.ts +48 -0
- package/src/design/runtime.ts +2 -115
- package/src/design/schemas.ts +2 -10
- package/src/design/types.ts +81 -1
- package/src/dev/schemas.ts +1 -3
- package/src/dev/types.local.ts +4 -0
- package/src/integrity/consts.local.ts +5 -0
- package/src/integrity/consts.ts +0 -348
- package/src/integrity/index.ts +1 -0
- package/src/integrity/types.ts +34 -1
- package/src/integrity/utils.ts +320 -0
- package/src/integrity/verify.ts +2 -4
- package/src/intent/consts.local.ts +3 -0
- package/src/intent/entrypoints.ts +0 -1
- package/src/intent/flow.ts +2 -3
- package/src/intent/types.ts +3 -0
- package/src/metadata/consts.ts +37 -0
- package/src/metadata/types.ts +1 -37
- package/src/planning/consts.ts +15 -2
- package/src/planning/index.ts +0 -1
- package/src/planning/landing.ts +1 -14
- package/src/planning/schemas.ts +191 -4
- package/src/planning/types.ts +2 -2
- package/src/preview/consts.ts +2 -0
- package/src/preview/types.ts +19 -0
- package/src/scaffold/helpers.ts +1 -4
- package/src/scaffold/types.ts +3 -0
- package/src/slot/consts.ts +11 -40
- package/src/slot/helpers.ts +1 -6
- package/src/slot/index.ts +1 -0
- package/src/slot/layout.ts +1 -62
- package/src/slot/types.ts +57 -1
- package/src/slot/utils.ts +45 -0
- package/src/topology/card.ts +2 -9
- package/src/topology/consts.local.ts +6 -0
- package/src/topology/types.ts +6 -0
- package/tests/branding.spec.ts +2 -2
- package/tests/connect-convert.spec.ts +21 -1
- package/tests/connect-errors.spec.ts +34 -1
- package/tests/convert.spec.ts +2 -3
- package/tests/error-status.spec.ts +7 -1
- package/tests/planning.spec.ts +3 -18
- package/tests/presentation.spec.ts +2 -4
- package/build/planning/flows.d.ts +0 -34
- package/build/planning/flows.d.ts.map +0 -1
- package/build/planning/flows.js +0 -174
- package/build/planning/flows.js.map +0 -1
- package/src/planning/flows.ts +0 -204
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test } from 'bun:test'
|
|
2
2
|
import { ResilientError } from '@owlmeans/error'
|
|
3
|
-
import { ConnectConsentRequired, ConnectOutOfCredits } from '../src/connect/errors.js'
|
|
3
|
+
import { ConnectConfirmationRequired, ConnectConsentRequired, ConnectOutOfCredits } from '../src/connect/errors.js'
|
|
4
|
+
import type { ConnectConfirmation } from '../src/connect/types.js'
|
|
4
5
|
|
|
5
6
|
describe('@owlmeans/viable-common — ConnectOutOfCredits', () => {
|
|
6
7
|
test('carries its fields fresh, and survives a marshal/unmarshal round trip', () => {
|
|
@@ -50,3 +51,35 @@ describe('@owlmeans/viable-common — ConnectConsentRequired', () => {
|
|
|
50
51
|
expect((ResilientError.ensure(fresh.marshal()) as ConnectConsentRequired).deadline).toBeUndefined()
|
|
51
52
|
})
|
|
52
53
|
})
|
|
54
|
+
|
|
55
|
+
describe('@owlmeans/viable-common — ConnectConfirmationRequired', () => {
|
|
56
|
+
const fields: ConnectConfirmation = {
|
|
57
|
+
action: 'convert-proceed', cap: 1_000_000, spent: 420_000, estimate: 850_000, fromAllowance: 580_000,
|
|
58
|
+
fromCreditLimits: 150_000, moneyUsd: 2.4,
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
test('packs the action, the conversion limit and the stage split, and answers 428', () => {
|
|
62
|
+
const fresh = new ConnectConfirmationRequired(ConnectConfirmationRequired.encode(fields))
|
|
63
|
+
|
|
64
|
+
expect(fresh.message).toBe('viable-connect:confirmation-required:convert-proceed:1000000:420000:850000:580000:150000:2.4')
|
|
65
|
+
expect(fresh).toEqual(expect.objectContaining(fields))
|
|
66
|
+
expect((fresh.constructor as { httpStatus?: number }).httpStatus).toBe(428)
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
test('survives a marshal/unmarshal round trip — only type and message cross a hop', () => {
|
|
70
|
+
const restored = ResilientError.ensure(
|
|
71
|
+
new ConnectConfirmationRequired(ConnectConfirmationRequired.encode({ ...fields, action: 'convert-start' })).marshal()
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
expect(restored).toBeInstanceOf(ConnectConfirmationRequired)
|
|
75
|
+
expect(restored).toEqual(expect.objectContaining({ ...fields, action: 'convert-start' }))
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
test('decode is encode\'s inverse; an unreadable number reads back as 0, never NaN', () => {
|
|
79
|
+
expect(ConnectConfirmationRequired.decode(ConnectConfirmationRequired.encode(fields))).toEqual(fields)
|
|
80
|
+
expect(ConnectConfirmationRequired.encode({ ...fields, moneyUsd: Number.NaN })).toEndWith(':0')
|
|
81
|
+
expect(ConnectConfirmationRequired.decode('convert-start:x')).toEqual({
|
|
82
|
+
action: 'convert-start', cap: 0, spent: 0, estimate: 0, fromAllowance: 0, fromCreditLimits: 0, moneyUsd: 0,
|
|
83
|
+
})
|
|
84
|
+
})
|
|
85
|
+
})
|
package/tests/convert.spec.ts
CHANGED
|
@@ -12,9 +12,8 @@ import {
|
|
|
12
12
|
sizeClassOf, stageAfter, storyComplexity
|
|
13
13
|
} from '../src/convert/helpers.js'
|
|
14
14
|
import { HISTORY_FILE } from '../src/metadata/consts.js'
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
} from '../src/convert/consts.js'
|
|
15
|
+
import { CONVERTED_ORIGIN_DIR, ConversionDecision } from '../src/convert/consts.js'
|
|
16
|
+
import { conversionStoryDoc } from '../src/convert/utils.js'
|
|
18
17
|
|
|
19
18
|
/**
|
|
20
19
|
* Every `*Schema` a module exports.
|
|
@@ -19,6 +19,7 @@ const DECLARED: Record<string, number | undefined> = {
|
|
|
19
19
|
ConnectOpRefused: 422,
|
|
20
20
|
ConnectOutOfCredits: 402,
|
|
21
21
|
ConnectConsentRequired: 428,
|
|
22
|
+
ConnectConfirmationRequired: 428,
|
|
22
23
|
ConnectOpTimeout: undefined,
|
|
23
24
|
ProjectResourceError: undefined,
|
|
24
25
|
ProjectNotFound: 404,
|
|
@@ -41,7 +42,7 @@ describe('viable-common refusals — declared HTTP statuses', () => {
|
|
|
41
42
|
expect(classes.map(([name]) => name).sort()).toEqual(Object.keys(DECLARED).sort())
|
|
42
43
|
})
|
|
43
44
|
|
|
44
|
-
test('balance 402, an absent target 404, a conflicting state 409, refused content 422, a consent only a person gives 428; faults nothing', () => {
|
|
45
|
+
test('balance 402, an absent target 404, a conflicting state 409, refused content 422, a consent or a confirmation only a person gives 428; faults nothing', () => {
|
|
45
46
|
for (const [name, Class] of classes) {
|
|
46
47
|
expect([name, statusOf(new Class('x'))]).toEqual([name, DECLARED[name]])
|
|
47
48
|
}
|
|
@@ -60,5 +61,10 @@ describe('viable-common refusals — declared HTTP statuses', () => {
|
|
|
60
61
|
new connect.ConnectConsentRequired(connect.ConnectConsentRequired.encode('story', 'https://x.test/?consent=1')).marshal()
|
|
61
62
|
)
|
|
62
63
|
expect([statusOf(consent), (consent as connect.ConnectConsentRequired).consentUrl]).toEqual([428, 'https://x.test/?consent=1'])
|
|
64
|
+
const confirmation = ResilientError.ensure(new connect.ConnectConfirmationRequired(connect.ConnectConfirmationRequired.encode({
|
|
65
|
+
action: 'convert-proceed', cap: 1_000_000, spent: 420_000, estimate: 300_000, fromAllowance: 300_000,
|
|
66
|
+
fromCreditLimits: 0, moneyUsd: 0,
|
|
67
|
+
})).marshal())
|
|
68
|
+
expect([statusOf(confirmation), (confirmation as connect.ConnectConfirmationRequired).spent]).toEqual([428, 420_000])
|
|
63
69
|
})
|
|
64
70
|
})
|
package/tests/planning.spec.ts
CHANGED
|
@@ -2,32 +2,17 @@ import { describe, expect, test } from 'bun:test'
|
|
|
2
2
|
import Ajv from 'ajv'
|
|
3
3
|
import addFormats from 'ajv-formats'
|
|
4
4
|
import { ResilientError } from '@owlmeans/error'
|
|
5
|
-
import {
|
|
6
|
-
canTransit, CodeScope, CodeStyle, intrinsicOf, IntrinsicStatus, makeSchemaRegistry,
|
|
7
|
-
SpecificationFormat, TITLE_MAX, transitionsFrom, WorkcardKind,
|
|
8
|
-
} from '@owlmeans/planning'
|
|
9
|
-
import type { Specification } from '@owlmeans/planning'
|
|
5
|
+
import { canTransit, CodeScope, CodeStyle, intrinsicOf, IntrinsicStatus, makeSchemaRegistry, SpecificationFormat, TITLE_MAX, transitionsFrom, WorkcardKind, type Specification } from '@owlmeans/planning'
|
|
10
6
|
import { ProjectArea } from '../src/areas/consts.js'
|
|
11
7
|
import { ConnectingStoryKind, SpecCategory, StoryKind } from '../src/ba/consts.js'
|
|
12
8
|
import { mergeConnectingStories } from '../src/ba/helpers.js'
|
|
13
|
-
import { STORY_DESIGN_VERSION } from '../src/design/consts.js'
|
|
9
|
+
import { STORY_DESIGN_VERSION, StoryActor } from '../src/design/consts.js'
|
|
14
10
|
import { emptyStoryDesign } from '../src/design/helpers.js'
|
|
15
|
-
import { StoryActor } from '../src/design/runtime.js'
|
|
16
11
|
import type { StoryDesign } from '../src/design/types.js'
|
|
17
12
|
import {
|
|
18
13
|
hasLandingSentence, LANDING_STORY_SENTENCE, withLandingSentence,
|
|
19
14
|
} from '../src/index.js'
|
|
20
|
-
import {
|
|
21
|
-
isUserChannel, isViableProject, isViableStory, ProjectAgentOccupied, ProjectNotFound,
|
|
22
|
-
ProjectStoryMissconfigured, projectBriefOf, storyDraftOf, storyWriteInputOf, userStoryOf,
|
|
23
|
-
VIABLE_FLOW_SCHEMAS, VIABLE_PROJECT_FLOW, VIABLE_PROJECT_FLOW_SCHEMA, VIABLE_PROJECT_TYPE,
|
|
24
|
-
VIABLE_PROJECT_TYPE_SCHEMA, VIABLE_RESERVED_TYPE_SCHEMAS, VIABLE_SPEC_TYPE, VIABLE_STORY_FLOW,
|
|
25
|
-
VIABLE_STORY_FLOW_SCHEMA,
|
|
26
|
-
VIABLE_STORY_TYPE, VIABLE_STORY_TYPE_SCHEMA, VIABLE_TYPE_SCHEMAS, ViableChannel,
|
|
27
|
-
ViableProjectFieldsSchema, ViableProjectStatus, ViableProjectTransition, ViableRelationship,
|
|
28
|
-
ViableSpecCategory, ViableStoryFieldsSchema, ViableStoryStatus, ViableStoryTransition,
|
|
29
|
-
} from '../src/planning/index.js'
|
|
30
|
-
import type { ViableProjectCard, ViableStoryCard } from '../src/planning/index.js'
|
|
15
|
+
import { isUserChannel, isViableProject, isViableStory, ProjectAgentOccupied, ProjectNotFound, ProjectStoryMissconfigured, projectBriefOf, storyDraftOf, storyWriteInputOf, userStoryOf, VIABLE_FLOW_SCHEMAS, VIABLE_PROJECT_FLOW, VIABLE_PROJECT_FLOW_SCHEMA, VIABLE_PROJECT_TYPE, VIABLE_PROJECT_TYPE_SCHEMA, VIABLE_RESERVED_TYPE_SCHEMAS, VIABLE_SPEC_TYPE, VIABLE_STORY_FLOW, VIABLE_STORY_FLOW_SCHEMA, VIABLE_STORY_TYPE, VIABLE_STORY_TYPE_SCHEMA, VIABLE_TYPE_SCHEMAS, ViableChannel, ViableProjectFieldsSchema, ViableProjectStatus, ViableProjectTransition, ViableRelationship, ViableSpecCategory, ViableStoryFieldsSchema, ViableStoryStatus, ViableStoryTransition, type ViableProjectCard, type ViableStoryCard } from '../src/planning/index.js'
|
|
31
16
|
|
|
32
17
|
const at = '2026-09-16T10:00:00.000Z'
|
|
33
18
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
AgentStructuredKind, classifyAgentMessage, isAgentMessageHidden,
|
|
5
|
-
} from '../src/agent/presentation.js'
|
|
2
|
+
import { classifyAgentMessage, isAgentMessageHidden } from '../src/agent/presentation.js'
|
|
3
|
+
import { AgentCodeLanguage, AgentMarkdownKind, AgentMessageCategory, AgentMessageRole, AgentStructuredKind } from '../src/agent/consts.js'
|
|
6
4
|
|
|
7
5
|
describe('@owlmeans/viable-common — agent message presentation', () => {
|
|
8
6
|
test('classifies source and unified diffs with their display language', () => {
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { AnyTypeSchema, ProjectTypeSchema, RelationshipType, SpecificationSlot, StatusFlowSchema, WorkcardTypeSchema } from '@owlmeans/planning';
|
|
2
|
-
/**
|
|
3
|
-
* The story flow.
|
|
4
|
-
*
|
|
5
|
-
* `failed` maps to PLANNED: a failed story is work still to do, so "done" is the closed count and
|
|
6
|
-
* a retry is simply `start` again. `reset` from anywhere is the manual recovery — the one move a
|
|
7
|
-
* completed story still accepts.
|
|
8
|
-
*/
|
|
9
|
-
export declare const VIABLE_STORY_FLOW_SCHEMA: StatusFlowSchema;
|
|
10
|
-
/**
|
|
11
|
-
* The project flow.
|
|
12
|
-
*
|
|
13
|
-
* A create lands at `draft`; confirming the brief is `confirm`; the end of an initialization is
|
|
14
|
-
* `activate`. A reinitialization and a failed initialization are SLOT facts, not transitions, and
|
|
15
|
-
* destroying a project is a `delete` plus the platform's cascade — never `archive`.
|
|
16
|
-
*/
|
|
17
|
-
export declare const VIABLE_PROJECT_FLOW_SCHEMA: StatusFlowSchema;
|
|
18
|
-
/** A document is written or revised; it has no lifecycle to move through. */
|
|
19
|
-
export declare const VIABLE_SPEC_FLOW_SCHEMA: StatusFlowSchema;
|
|
20
|
-
/** The brief a person confirms, and the plan the scaffold draws from it. */
|
|
21
|
-
export declare const VIABLE_PROJECT_SLOTS: SpecificationSlot[];
|
|
22
|
-
/** A story's design — the payload the implementation stage consumes. */
|
|
23
|
-
export declare const VIABLE_STORY_SLOTS: SpecificationSlot[];
|
|
24
|
-
export declare const VIABLE_STORY_RELATIONSHIPS: RelationshipType[];
|
|
25
|
-
export declare const VIABLE_PROJECT_TYPE_SCHEMA: ProjectTypeSchema;
|
|
26
|
-
export declare const VIABLE_STORY_TYPE_SCHEMA: WorkcardTypeSchema;
|
|
27
|
-
export declare const VIABLE_SPEC_TYPE_SCHEMA: WorkcardTypeSchema;
|
|
28
|
-
/** Registered so their prefixes and flow are decided once; not creatable under a project yet. */
|
|
29
|
-
export declare const VIABLE_RESERVED_TYPE_SCHEMAS: WorkcardTypeSchema[];
|
|
30
|
-
/** Every Viable type — what a planning plugin registers. */
|
|
31
|
-
export declare const VIABLE_TYPE_SCHEMAS: AnyTypeSchema[];
|
|
32
|
-
/** Every Viable flow — registered beside the types. */
|
|
33
|
-
export declare const VIABLE_FLOW_SCHEMAS: StatusFlowSchema[];
|
|
34
|
-
//# sourceMappingURL=flows.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../src/planning/flows.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EACvF,kBAAkB,EACnB,MAAM,oBAAoB,CAAA;AAgB3B;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,gBA6BtC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,EAAE,gBA6BxC,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,EAAE,gBAOrC,CAAA;AAMD,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EAOnD,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,EAOjD,CAAA;AAKD,eAAO,MAAM,0BAA0B,EAAE,gBAAgB,EAIxD,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,iBAUxC,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAUtC,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,kBAOrC,CAAA;AAaD,iGAAiG;AACjG,eAAO,MAAM,4BAA4B,EAAE,kBAAkB,EAI5D,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,mBAAmB,EAAE,aAAa,EAK9C,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAIjD,CAAA"}
|
package/build/planning/flows.js
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import { IntrinsicPolicy, IntrinsicStatus, SpecificationFormat, WorkcardKind } from '@owlmeans/planning';
|
|
2
|
-
import { STORY_DESIGN_VERSION } from '../design/consts.js';
|
|
3
|
-
import { StoryDesignSchema } from '../design/schemas.js';
|
|
4
|
-
import { ScaffoldPlanSchema } from '../scaffold/schemas.js';
|
|
5
|
-
import { VIABLE_BUG_CODE, VIABLE_BUG_TYPE, VIABLE_DESIGN_REVISIONS_KEPT, VIABLE_IMPROVEMENT_CODE, VIABLE_IMPROVEMENT_TYPE, VIABLE_PROJECT_CODE, VIABLE_PROJECT_FLOW, VIABLE_PROJECT_TYPE, VIABLE_REQUIREMENT_CODE, VIABLE_REQUIREMENT_TYPE, VIABLE_SPEC_FLOW, VIABLE_SPEC_TYPE, VIABLE_STORY_CODE, VIABLE_STORY_FLOW, VIABLE_STORY_TYPE, ViableProjectStatus, ViableProjectTransition, ViableRelationship, ViableSpecCategory, ViableSpecStatus, ViableStoryStatus, ViableStoryTransition, ViableTone, } from './consts.js';
|
|
6
|
-
import { ViableOpenFieldsSchema, ViableProjectFieldsSchema, ViableSpecFieldsSchema, ViableStoryFieldsSchema, } from './schemas.js';
|
|
7
|
-
/**
|
|
8
|
-
* The story flow.
|
|
9
|
-
*
|
|
10
|
-
* `failed` maps to PLANNED: a failed story is work still to do, so "done" is the closed count and
|
|
11
|
-
* a retry is simply `start` again. `reset` from anywhere is the manual recovery — the one move a
|
|
12
|
-
* completed story still accepts.
|
|
13
|
-
*/
|
|
14
|
-
export const VIABLE_STORY_FLOW_SCHEMA = {
|
|
15
|
-
id: VIABLE_STORY_FLOW,
|
|
16
|
-
version: 1,
|
|
17
|
-
statuses: [
|
|
18
|
-
{ key: ViableStoryStatus.Planned, intrinsic: IntrinsicStatus.Planned, initial: true, tone: ViableTone.Blue },
|
|
19
|
-
{ key: ViableStoryStatus.InProgress, intrinsic: IntrinsicStatus.InProgress, tone: ViableTone.Yellow },
|
|
20
|
-
{ key: ViableStoryStatus.Completed, intrinsic: IntrinsicStatus.Closed, tone: ViableTone.Green },
|
|
21
|
-
{ key: ViableStoryStatus.Failed, intrinsic: IntrinsicStatus.Planned, tone: ViableTone.Red },
|
|
22
|
-
],
|
|
23
|
-
transitions: [
|
|
24
|
-
{
|
|
25
|
-
name: ViableStoryTransition.Start,
|
|
26
|
-
from: [ViableStoryStatus.Planned, ViableStoryStatus.Failed],
|
|
27
|
-
to: ViableStoryStatus.InProgress,
|
|
28
|
-
explicit: true,
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
name: ViableStoryTransition.Complete,
|
|
32
|
-
from: [ViableStoryStatus.InProgress],
|
|
33
|
-
to: ViableStoryStatus.Completed,
|
|
34
|
-
explicit: true,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
name: ViableStoryTransition.Fail,
|
|
38
|
-
from: [ViableStoryStatus.InProgress],
|
|
39
|
-
to: ViableStoryStatus.Failed,
|
|
40
|
-
},
|
|
41
|
-
{ name: ViableStoryTransition.Reset, from: '*', to: ViableStoryStatus.Planned, explicit: true },
|
|
42
|
-
],
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* The project flow.
|
|
46
|
-
*
|
|
47
|
-
* A create lands at `draft`; confirming the brief is `confirm`; the end of an initialization is
|
|
48
|
-
* `activate`. A reinitialization and a failed initialization are SLOT facts, not transitions, and
|
|
49
|
-
* destroying a project is a `delete` plus the platform's cascade — never `archive`.
|
|
50
|
-
*/
|
|
51
|
-
export const VIABLE_PROJECT_FLOW_SCHEMA = {
|
|
52
|
-
id: VIABLE_PROJECT_FLOW,
|
|
53
|
-
version: 1,
|
|
54
|
-
statuses: [
|
|
55
|
-
{ key: ViableProjectStatus.Draft, intrinsic: IntrinsicStatus.Planned, initial: true, tone: ViableTone.Blue },
|
|
56
|
-
{ key: ViableProjectStatus.Confirmed, intrinsic: IntrinsicStatus.InProgress, tone: ViableTone.Yellow },
|
|
57
|
-
{ key: ViableProjectStatus.Active, intrinsic: IntrinsicStatus.InProgress, tone: ViableTone.Green },
|
|
58
|
-
{ key: ViableProjectStatus.Archived, intrinsic: IntrinsicStatus.Closed, tone: ViableTone.Neutral },
|
|
59
|
-
],
|
|
60
|
-
transitions: [
|
|
61
|
-
{
|
|
62
|
-
name: ViableProjectTransition.Confirm,
|
|
63
|
-
from: [ViableProjectStatus.Draft],
|
|
64
|
-
to: ViableProjectStatus.Confirmed,
|
|
65
|
-
explicit: true,
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
name: ViableProjectTransition.Activate,
|
|
69
|
-
from: [ViableProjectStatus.Confirmed],
|
|
70
|
-
to: ViableProjectStatus.Active,
|
|
71
|
-
},
|
|
72
|
-
{ name: ViableProjectTransition.Archive, from: '*', to: ViableProjectStatus.Archived, explicit: true },
|
|
73
|
-
{
|
|
74
|
-
name: ViableProjectTransition.Reopen,
|
|
75
|
-
from: [ViableProjectStatus.Archived],
|
|
76
|
-
to: ViableProjectStatus.Active,
|
|
77
|
-
explicit: true,
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
};
|
|
81
|
-
/** A document is written or revised; it has no lifecycle to move through. */
|
|
82
|
-
export const VIABLE_SPEC_FLOW_SCHEMA = {
|
|
83
|
-
id: VIABLE_SPEC_FLOW,
|
|
84
|
-
version: 1,
|
|
85
|
-
statuses: [
|
|
86
|
-
{ key: ViableSpecStatus.Current, intrinsic: IntrinsicStatus.Closed, initial: true, tone: ViableTone.Neutral },
|
|
87
|
-
],
|
|
88
|
-
transitions: [],
|
|
89
|
-
};
|
|
90
|
-
const slot = (category, format, extra = {}) => ({ category, format, type: VIABLE_SPEC_TYPE, ...extra });
|
|
91
|
-
/** The brief a person confirms, and the plan the scaffold draws from it. */
|
|
92
|
-
export const VIABLE_PROJECT_SLOTS = [
|
|
93
|
-
slot(ViableSpecCategory.Specification, SpecificationFormat.Markdown, { required: true }),
|
|
94
|
-
slot(ViableSpecCategory.Vision, SpecificationFormat.Markdown),
|
|
95
|
-
slot(ViableSpecCategory.DesignSystem, SpecificationFormat.Markdown),
|
|
96
|
-
slot(ViableSpecCategory.Scaffold, SpecificationFormat.Json, {
|
|
97
|
-
revisioned: true, keepRevisions: VIABLE_DESIGN_REVISIONS_KEPT, schema: ScaffoldPlanSchema,
|
|
98
|
-
}),
|
|
99
|
-
];
|
|
100
|
-
/** A story's design — the payload the implementation stage consumes. */
|
|
101
|
-
export const VIABLE_STORY_SLOTS = [
|
|
102
|
-
slot(ViableSpecCategory.Design, SpecificationFormat.Json, {
|
|
103
|
-
revisioned: true,
|
|
104
|
-
keepRevisions: VIABLE_DESIGN_REVISIONS_KEPT,
|
|
105
|
-
schema: StoryDesignSchema,
|
|
106
|
-
version: STORY_DESIGN_VERSION,
|
|
107
|
-
}),
|
|
108
|
-
];
|
|
109
|
-
const storyLink = (name) => ({ name, from: [VIABLE_STORY_TYPE], to: [VIABLE_STORY_TYPE], single: true });
|
|
110
|
-
export const VIABLE_STORY_RELATIONSHIPS = [
|
|
111
|
-
storyLink(ViableRelationship.Follows),
|
|
112
|
-
storyLink(ViableRelationship.SharesWidget),
|
|
113
|
-
storyLink(ViableRelationship.SharesScreen),
|
|
114
|
-
];
|
|
115
|
-
export const VIABLE_PROJECT_TYPE_SCHEMA = {
|
|
116
|
-
type: VIABLE_PROJECT_TYPE,
|
|
117
|
-
kind: WorkcardKind.Project,
|
|
118
|
-
version: 1,
|
|
119
|
-
fields: ViableProjectFieldsSchema,
|
|
120
|
-
flows: [VIABLE_PROJECT_FLOW],
|
|
121
|
-
intrinsic: IntrinsicPolicy.Primary,
|
|
122
|
-
specifications: VIABLE_PROJECT_SLOTS,
|
|
123
|
-
code: VIABLE_PROJECT_CODE,
|
|
124
|
-
cardTypes: [VIABLE_STORY_TYPE],
|
|
125
|
-
};
|
|
126
|
-
export const VIABLE_STORY_TYPE_SCHEMA = {
|
|
127
|
-
type: VIABLE_STORY_TYPE,
|
|
128
|
-
kind: WorkcardKind.Card,
|
|
129
|
-
version: 1,
|
|
130
|
-
fields: ViableStoryFieldsSchema,
|
|
131
|
-
flows: [VIABLE_STORY_FLOW],
|
|
132
|
-
intrinsic: IntrinsicPolicy.Primary,
|
|
133
|
-
specifications: VIABLE_STORY_SLOTS,
|
|
134
|
-
relationships: VIABLE_STORY_RELATIONSHIPS,
|
|
135
|
-
code: VIABLE_STORY_CODE,
|
|
136
|
-
};
|
|
137
|
-
export const VIABLE_SPEC_TYPE_SCHEMA = {
|
|
138
|
-
type: VIABLE_SPEC_TYPE,
|
|
139
|
-
kind: WorkcardKind.Specification,
|
|
140
|
-
version: 1,
|
|
141
|
-
fields: ViableSpecFieldsSchema,
|
|
142
|
-
flows: [VIABLE_SPEC_FLOW],
|
|
143
|
-
specifications: [],
|
|
144
|
-
};
|
|
145
|
-
const reserved = (type, code) => ({
|
|
146
|
-
type,
|
|
147
|
-
kind: WorkcardKind.Card,
|
|
148
|
-
version: 1,
|
|
149
|
-
fields: ViableOpenFieldsSchema,
|
|
150
|
-
flows: [VIABLE_STORY_FLOW],
|
|
151
|
-
intrinsic: IntrinsicPolicy.Primary,
|
|
152
|
-
specifications: [],
|
|
153
|
-
code,
|
|
154
|
-
});
|
|
155
|
-
/** Registered so their prefixes and flow are decided once; not creatable under a project yet. */
|
|
156
|
-
export const VIABLE_RESERVED_TYPE_SCHEMAS = [
|
|
157
|
-
reserved(VIABLE_BUG_TYPE, VIABLE_BUG_CODE),
|
|
158
|
-
reserved(VIABLE_IMPROVEMENT_TYPE, VIABLE_IMPROVEMENT_CODE),
|
|
159
|
-
reserved(VIABLE_REQUIREMENT_TYPE, VIABLE_REQUIREMENT_CODE),
|
|
160
|
-
];
|
|
161
|
-
/** Every Viable type — what a planning plugin registers. */
|
|
162
|
-
export const VIABLE_TYPE_SCHEMAS = [
|
|
163
|
-
VIABLE_PROJECT_TYPE_SCHEMA,
|
|
164
|
-
VIABLE_STORY_TYPE_SCHEMA,
|
|
165
|
-
VIABLE_SPEC_TYPE_SCHEMA,
|
|
166
|
-
...VIABLE_RESERVED_TYPE_SCHEMAS,
|
|
167
|
-
];
|
|
168
|
-
/** Every Viable flow — registered beside the types. */
|
|
169
|
-
export const VIABLE_FLOW_SCHEMAS = [
|
|
170
|
-
VIABLE_PROJECT_FLOW_SCHEMA,
|
|
171
|
-
VIABLE_STORY_FLOW_SCHEMA,
|
|
172
|
-
VIABLE_SPEC_FLOW_SCHEMA,
|
|
173
|
-
];
|
|
174
|
-
//# sourceMappingURL=flows.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flows.js","sourceRoot":"","sources":["../../src/planning/flows.ts"],"names":[],"mappings":"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"}
|
package/src/planning/flows.ts
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { IntrinsicPolicy, IntrinsicStatus, SpecificationFormat, WorkcardKind } from '@owlmeans/planning'
|
|
2
|
-
import type {
|
|
3
|
-
AnyTypeSchema, ProjectTypeSchema, RelationshipType, SpecificationSlot, StatusFlowSchema,
|
|
4
|
-
WorkcardTypeSchema,
|
|
5
|
-
} from '@owlmeans/planning'
|
|
6
|
-
import { STORY_DESIGN_VERSION } from '../design/consts.js'
|
|
7
|
-
import { StoryDesignSchema } from '../design/schemas.js'
|
|
8
|
-
import { ScaffoldPlanSchema } from '../scaffold/schemas.js'
|
|
9
|
-
import {
|
|
10
|
-
VIABLE_BUG_CODE, VIABLE_BUG_TYPE, VIABLE_DESIGN_REVISIONS_KEPT, VIABLE_IMPROVEMENT_CODE,
|
|
11
|
-
VIABLE_IMPROVEMENT_TYPE, VIABLE_PROJECT_CODE, VIABLE_PROJECT_FLOW, VIABLE_PROJECT_TYPE,
|
|
12
|
-
VIABLE_REQUIREMENT_CODE, VIABLE_REQUIREMENT_TYPE, VIABLE_SPEC_FLOW, VIABLE_SPEC_TYPE,
|
|
13
|
-
VIABLE_STORY_CODE, VIABLE_STORY_FLOW, VIABLE_STORY_TYPE, ViableProjectStatus,
|
|
14
|
-
ViableProjectTransition, ViableRelationship, ViableSpecCategory, ViableSpecStatus,
|
|
15
|
-
ViableStoryStatus, ViableStoryTransition, ViableTone,
|
|
16
|
-
} from './consts.js'
|
|
17
|
-
import {
|
|
18
|
-
ViableOpenFieldsSchema, ViableProjectFieldsSchema, ViableSpecFieldsSchema, ViableStoryFieldsSchema,
|
|
19
|
-
} from './schemas.js'
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The story flow.
|
|
23
|
-
*
|
|
24
|
-
* `failed` maps to PLANNED: a failed story is work still to do, so "done" is the closed count and
|
|
25
|
-
* a retry is simply `start` again. `reset` from anywhere is the manual recovery — the one move a
|
|
26
|
-
* completed story still accepts.
|
|
27
|
-
*/
|
|
28
|
-
export const VIABLE_STORY_FLOW_SCHEMA: StatusFlowSchema = {
|
|
29
|
-
id: VIABLE_STORY_FLOW,
|
|
30
|
-
version: 1,
|
|
31
|
-
statuses: [
|
|
32
|
-
{ key: ViableStoryStatus.Planned, intrinsic: IntrinsicStatus.Planned, initial: true, tone: ViableTone.Blue },
|
|
33
|
-
{ key: ViableStoryStatus.InProgress, intrinsic: IntrinsicStatus.InProgress, tone: ViableTone.Yellow },
|
|
34
|
-
{ key: ViableStoryStatus.Completed, intrinsic: IntrinsicStatus.Closed, tone: ViableTone.Green },
|
|
35
|
-
{ key: ViableStoryStatus.Failed, intrinsic: IntrinsicStatus.Planned, tone: ViableTone.Red },
|
|
36
|
-
],
|
|
37
|
-
transitions: [
|
|
38
|
-
{
|
|
39
|
-
name: ViableStoryTransition.Start,
|
|
40
|
-
from: [ViableStoryStatus.Planned, ViableStoryStatus.Failed],
|
|
41
|
-
to: ViableStoryStatus.InProgress,
|
|
42
|
-
explicit: true,
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: ViableStoryTransition.Complete,
|
|
46
|
-
from: [ViableStoryStatus.InProgress],
|
|
47
|
-
to: ViableStoryStatus.Completed,
|
|
48
|
-
explicit: true,
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
name: ViableStoryTransition.Fail,
|
|
52
|
-
from: [ViableStoryStatus.InProgress],
|
|
53
|
-
to: ViableStoryStatus.Failed,
|
|
54
|
-
},
|
|
55
|
-
{ name: ViableStoryTransition.Reset, from: '*', to: ViableStoryStatus.Planned, explicit: true },
|
|
56
|
-
],
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The project flow.
|
|
61
|
-
*
|
|
62
|
-
* A create lands at `draft`; confirming the brief is `confirm`; the end of an initialization is
|
|
63
|
-
* `activate`. A reinitialization and a failed initialization are SLOT facts, not transitions, and
|
|
64
|
-
* destroying a project is a `delete` plus the platform's cascade — never `archive`.
|
|
65
|
-
*/
|
|
66
|
-
export const VIABLE_PROJECT_FLOW_SCHEMA: StatusFlowSchema = {
|
|
67
|
-
id: VIABLE_PROJECT_FLOW,
|
|
68
|
-
version: 1,
|
|
69
|
-
statuses: [
|
|
70
|
-
{ key: ViableProjectStatus.Draft, intrinsic: IntrinsicStatus.Planned, initial: true, tone: ViableTone.Blue },
|
|
71
|
-
{ key: ViableProjectStatus.Confirmed, intrinsic: IntrinsicStatus.InProgress, tone: ViableTone.Yellow },
|
|
72
|
-
{ key: ViableProjectStatus.Active, intrinsic: IntrinsicStatus.InProgress, tone: ViableTone.Green },
|
|
73
|
-
{ key: ViableProjectStatus.Archived, intrinsic: IntrinsicStatus.Closed, tone: ViableTone.Neutral },
|
|
74
|
-
],
|
|
75
|
-
transitions: [
|
|
76
|
-
{
|
|
77
|
-
name: ViableProjectTransition.Confirm,
|
|
78
|
-
from: [ViableProjectStatus.Draft],
|
|
79
|
-
to: ViableProjectStatus.Confirmed,
|
|
80
|
-
explicit: true,
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
name: ViableProjectTransition.Activate,
|
|
84
|
-
from: [ViableProjectStatus.Confirmed],
|
|
85
|
-
to: ViableProjectStatus.Active,
|
|
86
|
-
},
|
|
87
|
-
{ name: ViableProjectTransition.Archive, from: '*', to: ViableProjectStatus.Archived, explicit: true },
|
|
88
|
-
{
|
|
89
|
-
name: ViableProjectTransition.Reopen,
|
|
90
|
-
from: [ViableProjectStatus.Archived],
|
|
91
|
-
to: ViableProjectStatus.Active,
|
|
92
|
-
explicit: true,
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/** A document is written or revised; it has no lifecycle to move through. */
|
|
98
|
-
export const VIABLE_SPEC_FLOW_SCHEMA: StatusFlowSchema = {
|
|
99
|
-
id: VIABLE_SPEC_FLOW,
|
|
100
|
-
version: 1,
|
|
101
|
-
statuses: [
|
|
102
|
-
{ key: ViableSpecStatus.Current, intrinsic: IntrinsicStatus.Closed, initial: true, tone: ViableTone.Neutral },
|
|
103
|
-
],
|
|
104
|
-
transitions: [],
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const slot = (
|
|
108
|
-
category: ViableSpecCategory, format: SpecificationFormat, extra: Partial<SpecificationSlot> = {},
|
|
109
|
-
): SpecificationSlot => ({ category, format, type: VIABLE_SPEC_TYPE, ...extra })
|
|
110
|
-
|
|
111
|
-
/** The brief a person confirms, and the plan the scaffold draws from it. */
|
|
112
|
-
export const VIABLE_PROJECT_SLOTS: SpecificationSlot[] = [
|
|
113
|
-
slot(ViableSpecCategory.Specification, SpecificationFormat.Markdown, { required: true }),
|
|
114
|
-
slot(ViableSpecCategory.Vision, SpecificationFormat.Markdown),
|
|
115
|
-
slot(ViableSpecCategory.DesignSystem, SpecificationFormat.Markdown),
|
|
116
|
-
slot(ViableSpecCategory.Scaffold, SpecificationFormat.Json, {
|
|
117
|
-
revisioned: true, keepRevisions: VIABLE_DESIGN_REVISIONS_KEPT, schema: ScaffoldPlanSchema,
|
|
118
|
-
}),
|
|
119
|
-
]
|
|
120
|
-
|
|
121
|
-
/** A story's design — the payload the implementation stage consumes. */
|
|
122
|
-
export const VIABLE_STORY_SLOTS: SpecificationSlot[] = [
|
|
123
|
-
slot(ViableSpecCategory.Design, SpecificationFormat.Json, {
|
|
124
|
-
revisioned: true,
|
|
125
|
-
keepRevisions: VIABLE_DESIGN_REVISIONS_KEPT,
|
|
126
|
-
schema: StoryDesignSchema,
|
|
127
|
-
version: STORY_DESIGN_VERSION,
|
|
128
|
-
}),
|
|
129
|
-
]
|
|
130
|
-
|
|
131
|
-
const storyLink = (name: ViableRelationship): RelationshipType =>
|
|
132
|
-
({ name, from: [VIABLE_STORY_TYPE], to: [VIABLE_STORY_TYPE], single: true })
|
|
133
|
-
|
|
134
|
-
export const VIABLE_STORY_RELATIONSHIPS: RelationshipType[] = [
|
|
135
|
-
storyLink(ViableRelationship.Follows),
|
|
136
|
-
storyLink(ViableRelationship.SharesWidget),
|
|
137
|
-
storyLink(ViableRelationship.SharesScreen),
|
|
138
|
-
]
|
|
139
|
-
|
|
140
|
-
export const VIABLE_PROJECT_TYPE_SCHEMA: ProjectTypeSchema = {
|
|
141
|
-
type: VIABLE_PROJECT_TYPE,
|
|
142
|
-
kind: WorkcardKind.Project,
|
|
143
|
-
version: 1,
|
|
144
|
-
fields: ViableProjectFieldsSchema,
|
|
145
|
-
flows: [VIABLE_PROJECT_FLOW],
|
|
146
|
-
intrinsic: IntrinsicPolicy.Primary,
|
|
147
|
-
specifications: VIABLE_PROJECT_SLOTS,
|
|
148
|
-
code: VIABLE_PROJECT_CODE,
|
|
149
|
-
cardTypes: [VIABLE_STORY_TYPE],
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export const VIABLE_STORY_TYPE_SCHEMA: WorkcardTypeSchema = {
|
|
153
|
-
type: VIABLE_STORY_TYPE,
|
|
154
|
-
kind: WorkcardKind.Card,
|
|
155
|
-
version: 1,
|
|
156
|
-
fields: ViableStoryFieldsSchema,
|
|
157
|
-
flows: [VIABLE_STORY_FLOW],
|
|
158
|
-
intrinsic: IntrinsicPolicy.Primary,
|
|
159
|
-
specifications: VIABLE_STORY_SLOTS,
|
|
160
|
-
relationships: VIABLE_STORY_RELATIONSHIPS,
|
|
161
|
-
code: VIABLE_STORY_CODE,
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export const VIABLE_SPEC_TYPE_SCHEMA: WorkcardTypeSchema = {
|
|
165
|
-
type: VIABLE_SPEC_TYPE,
|
|
166
|
-
kind: WorkcardKind.Specification,
|
|
167
|
-
version: 1,
|
|
168
|
-
fields: ViableSpecFieldsSchema,
|
|
169
|
-
flows: [VIABLE_SPEC_FLOW],
|
|
170
|
-
specifications: [],
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const reserved = (type: string, code: WorkcardTypeSchema['code']): WorkcardTypeSchema => ({
|
|
174
|
-
type,
|
|
175
|
-
kind: WorkcardKind.Card,
|
|
176
|
-
version: 1,
|
|
177
|
-
fields: ViableOpenFieldsSchema,
|
|
178
|
-
flows: [VIABLE_STORY_FLOW],
|
|
179
|
-
intrinsic: IntrinsicPolicy.Primary,
|
|
180
|
-
specifications: [],
|
|
181
|
-
code,
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
/** Registered so their prefixes and flow are decided once; not creatable under a project yet. */
|
|
185
|
-
export const VIABLE_RESERVED_TYPE_SCHEMAS: WorkcardTypeSchema[] = [
|
|
186
|
-
reserved(VIABLE_BUG_TYPE, VIABLE_BUG_CODE),
|
|
187
|
-
reserved(VIABLE_IMPROVEMENT_TYPE, VIABLE_IMPROVEMENT_CODE),
|
|
188
|
-
reserved(VIABLE_REQUIREMENT_TYPE, VIABLE_REQUIREMENT_CODE),
|
|
189
|
-
]
|
|
190
|
-
|
|
191
|
-
/** Every Viable type — what a planning plugin registers. */
|
|
192
|
-
export const VIABLE_TYPE_SCHEMAS: AnyTypeSchema[] = [
|
|
193
|
-
VIABLE_PROJECT_TYPE_SCHEMA,
|
|
194
|
-
VIABLE_STORY_TYPE_SCHEMA,
|
|
195
|
-
VIABLE_SPEC_TYPE_SCHEMA,
|
|
196
|
-
...VIABLE_RESERVED_TYPE_SCHEMAS,
|
|
197
|
-
]
|
|
198
|
-
|
|
199
|
-
/** Every Viable flow — registered beside the types. */
|
|
200
|
-
export const VIABLE_FLOW_SCHEMAS: StatusFlowSchema[] = [
|
|
201
|
-
VIABLE_PROJECT_FLOW_SCHEMA,
|
|
202
|
-
VIABLE_STORY_FLOW_SCHEMA,
|
|
203
|
-
VIABLE_SPEC_FLOW_SCHEMA,
|
|
204
|
-
]
|