Skip to content

Commit ae0b9ce

Browse files
chore: version packages (rc)
1 parent 7631964 commit ae0b9ce

153 files changed

Lines changed: 6700 additions & 83 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/pre.json

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
"action-crash-vs-rejection",
8888
"action-execute-target-precedence",
8989
"action-governance-engine-owned",
90+
"action-no-placement-lint",
9091
"action-param-inline-lookup-reference",
9192
"action-param-strict-unknown-keys",
9293
"action-record-write-discarded-lint",
@@ -152,7 +153,9 @@
152153
"agents-md-worktree-staleness",
153154
"agents-pd12-alias-retirement-path",
154155
"agents-pd12-shim-retired",
156+
"agents-releases-freeze-merge-queue",
155157
"agents-spec-generated-artifacts-map",
158+
"aggregate-bulk-dispatch-selected-ids",
156159
"aggregate-temporal-output",
157160
"aggregation-vocabulary-lockstep",
158161
"ai-agent-authoring-and-tools-removal",
@@ -177,6 +180,7 @@
177180
"analytics-order-by-display-label",
178181
"analytics-query-bare-shape-entry-validation",
179182
"analytics-read-scope-bridge-order",
183+
"analytics-record-scoping-and-measure-fields",
180184
"analytics-timedimension-projection",
181185
"analytics-widget-query-options",
182186
"api-exposure-failopen-observability",
@@ -194,6 +198,7 @@
194198
"approval-attachment-descriptors",
195199
"approval-dead-run-ordering-invariant",
196200
"approval-dead-run-record-lock",
201+
"approval-decision-survives-restart",
197202
"approval-empty-position-admin-override",
198203
"approval-lock-schedule-run-provenance",
199204
"approval-participant-visibility",
@@ -214,6 +219,7 @@
214219
"auth-validationerror-4xx-mapping",
215220
"authorable-surface-ratchet",
216221
"authoring-key-lint-full-coverage",
222+
"authoring-rule-command-coverage-registry",
217223
"authz-ledger-flow-runas",
218224
"automation-client-resume-screen-flow",
219225
"automation-resume-authority-gate",
@@ -222,6 +228,7 @@
222228
"batch-dropped-fields-observability",
223229
"better-auth-1-7-0-rc-2-and-prod-dep-batch",
224230
"better-auth-team-member-count",
231+
"blueprint-summary-operations",
225232
"body-write-lint-message-driver-truth",
226233
"boot-api-merge",
227234
"builtin-node-config-reconciliation",
@@ -238,6 +245,7 @@
238245
"ci-node-eol-guard",
239246
"ci-performance-optimization",
240247
"ci-rerun-safety-and-timeouts",
248+
"ci-shard-test-core",
241249
"ci-test-completeness-guard",
242250
"cli-json-pipe-truncation-sweep",
243251
"cli-stale-dist-tests-and-project-root",
@@ -246,6 +254,7 @@
246254
"client-keys-sharelinks-security",
247255
"client-meta-automation-descriptors",
248256
"client-packages-lifecycle",
257+
"client-readme-retired-validate-only",
249258
"client-retires-parking-spot-read",
250259
"client-url-conformance-capstone",
251260
"close-approvals-and-record-shares-gaps",
@@ -254,8 +263,10 @@
254263
"close-the-eight-reports-rest-gaps",
255264
"close-the-final-nine-rest-gaps",
256265
"close-the-nine-metadata-rest-gaps",
266+
"cold-boot-flow-bind-read-decorations",
257267
"connector-authoring-guide",
258268
"connector-descriptors-meet-their-contract",
269+
"connector-template-cluster-removed",
259270
"console-09c6a177bb4a",
260271
"console-1bb77aa24514",
261272
"console-2cb8d78e24ad",
@@ -280,12 +291,15 @@
280291
"datasource-admin-503-names-its-own-service",
281292
"datasource-availability-observability",
282293
"datasource-bound-connect-failfast",
294+
"datasource-config-driver-contract",
295+
"datasource-read-replicas-removed",
283296
"datasource-routes-catch-service-throws",
284297
"datasource-teardown-ownership",
285298
"date-bucket-parity-gate",
286299
"date-now-default-utc",
287300
"datetime-canonical-utc-storage",
288301
"datetime-storage-form-memory-mongodb",
302+
"decision-branch-routing-enforced",
289303
"decision-outputs-surface-3447",
290304
"declared-unique-index-not-legacy",
291305
"default-datasource-adopt-seam",
@@ -300,6 +314,7 @@
300314
"dev-plugin-production-hatch-brands",
301315
"dev-plugin-protocol-family-removed",
302316
"dev-plugin-security-stubs-and-prod-guard",
317+
"discovery-cache-queue-job-no-route",
303318
"discovery-data-slot-computed",
304319
"discovery-metadata-slot-computed",
305320
"discovery-remedy-names-a-real-package",
@@ -333,6 +348,8 @@
333348
"drop-require-auth",
334349
"drop-undeclared-actions-valve",
335350
"dropped-fields-bulk-graphql-client",
351+
"dual-source-export-ratchet",
352+
"duplicate-package-flow-canonicalization",
336353
"empty-capability-answers-501",
337354
"empty-group-bucket-key-null",
338355
"empty-state-gate-object-surface",
@@ -362,14 +379,18 @@
362379
"filter-no-silent-drop",
363380
"filter-tokens-runtime-resolver",
364381
"find-data-wire-context",
382+
"findone-requires-a-predicate",
365383
"fix-stale-hono-changeset-ref",
366384
"fix-stale-scaffolder-changeset-refs",
367385
"fix-unmounted-local-file-url",
368386
"flow-action-record-id-seeding",
387+
"flow-branch-gates-and-inert-condition",
388+
"flow-condition-bare-string-is-cel",
369389
"flow-create-record-write-lint",
370390
"flow-error-object-serialization",
371391
"flow-executors-parse-config",
372392
"flow-filter-collapse-and-write-path-tokens",
393+
"flow-function-declared-effect",
373394
"flow-lookup-expand",
374395
"flow-max-retries-single-default",
375396
"flow-nested-region-walk",
@@ -384,6 +405,7 @@
384405
"flow-trigger-unknown-event-lint",
385406
"form-section-pane",
386407
"formview-buttons-defaults-live",
408+
"govern-remaining-nine-metadata-types",
387409
"govern-report-dashboard-liveness",
388410
"govern-sys-member-writes",
389411
"govern-webhook-liveness",
@@ -429,6 +451,7 @@
429451
"isLikelyEmail-no-control-char",
430452
"job-placeholder-migrates-to-db-adapter",
431453
"job-retry-timeout-3494",
454+
"kernel-metadata-loader-envelope-removed",
432455
"keyset-batch-walks",
433456
"lazy-deps-dist-probe-timeout",
434457
"lifecycle-event-registry-enforced",
@@ -440,6 +463,7 @@
440463
"lint-unique-double-declaration",
441464
"list-column-prefix-summary-object",
442465
"liveness-evidence-path-resolution",
466+
"liveness-governs-every-registered-type",
443467
"liveness-ledger-ai-scope-honesty",
444468
"liveness-orphan-row-gate",
445469
"liveness-register-orphan-proofs",
@@ -456,11 +480,13 @@
456480
"memory-datasource-ephemeral-per-pool",
457481
"memory-driver-opt-in-persistence",
458482
"messaging-declares-its-event-object",
483+
"meta-migrate-stored-route",
459484
"meta-type-gate-plural",
460485
"metadata-form-zod-reconciliation",
461486
"metadata-remove-artifact-api-source",
462487
"metadata-type-registration-names-a-real-hook",
463488
"metadata-unresolvable-posture-fail-closed",
489+
"migrate-meta-stored-rewrite",
464490
"migrate-occupancy-and-deferred-ddl",
465491
"migrate-occupancy-file-descriptor-signal",
466492
"migrate-plan-lists-datetime-convergence",
@@ -516,8 +542,10 @@
516542
"query-having-enforced",
517543
"rbac-objects-bulk-primitive",
518544
"react-block-field-props-lint",
545+
"react-blocks-declaration-parity-not-conformance",
519546
"react-listview-searchable-fields-lint",
520547
"react-page-props-joins-the-suite",
548+
"react-tier-record-blocks-withdrawn",
521549
"readme-fde-audience",
522550
"readonly-flow-write-json-warning",
523551
"readonly-flow-write-lint",
@@ -591,12 +619,14 @@
591619
"runtime-domain-extraction-batch3",
592620
"runtime-domain-handler-registry",
593621
"runtime-meta-data-extraction",
622+
"runtime-overlay-not-artifact",
594623
"runtime-packages-extraction",
595624
"runtime-share-links-extraction",
596625
"sandbox-structured-error-passthrough",
597626
"savemeta-persists-normalized-operators",
598627
"scaffolds-drop-memory-driver",
599628
"schemaless-node-config-contracts",
629+
"schemaless-node-expression-ledger",
600630
"scim-provider-key-and-sso-scim-parity",
601631
"scoped-invitation-placement",
602632
"screen-field-visible-when-on-the-wire",
@@ -630,6 +660,7 @@
630660
"sharing-rule-criteria-required",
631661
"sharing-rule-recipient-reconcile",
632662
"sharing-rule-unknown-sort-and-stale-help",
663+
"sharing-rule-withdrawal-and-delete",
633664
"showcase-action-disabled-specimen",
634665
"showcase-approver-and-picker-specimens",
635666
"showcase-bulk-actions-example",
@@ -661,13 +692,16 @@
661692
"storage-adapter-swap-verdict",
662693
"storage-download-filename",
663694
"stored-metadata-replays-the-chain",
695+
"stored-migration-covers-flows",
664696
"strictness-ledger-gate",
665697
"strictness-ledger-recursive-coverage",
666698
"strip-read-decorations-on-save",
699+
"summary-index-registry-revision",
667700
"sweep-close-out",
668701
"sys-migration-ledger-platform-infra",
669702
"sys-secret-store-platform-infra",
670703
"sys-view-definition-default-open",
704+
"system-field-name-injected-columns",
671705
"temporal-conformance-matrix",
672706
"temporal-conformance-stall-guard",
673707
"temporal-conformance-token-axis",
@@ -676,17 +710,20 @@
676710
"temporal-hooks-on-contract",
677711
"temporal-storage-form-axis-tests",
678712
"temporal-time-axis",
713+
"tenancy-default-org-fail-closed",
679714
"tender-hats-brush",
680715
"test-core-stall-guard",
681716
"tests-off-memory-driver",
682717
"tombstone-agent-tools",
683718
"tool-inert-keys-removed",
684719
"tool-requires-confirmation-not-enforced",
685720
"tool-requires-confirmation-removed",
721+
"trigger-registry-connector-cluster-removed",
686722
"two-factor-lockout-and-object-translations",
687723
"two-factor-lockout-extension",
688724
"two-factor-lockout-follows-settings",
689725
"type-blind-temporal-date-operands",
726+
"type-bulk-action-defs",
690727
"typecheck-covers-the-test-layer",
691728
"typed-decision-outputs-3447",
692729
"ui-discovery-reads-the-protocol-service",
@@ -702,13 +739,16 @@
702739
"unordered-paged-read-determinism",
703740
"update-record-dropped-field-warnings",
704741
"url-field-accepts-relative-urls",
742+
"user-field-implicit-target",
705743
"user-less-run-data-ops-refused",
706744
"user-level-export-axis",
707745
"v17-dissolve-protocol-alias",
708746
"v17-page-console-gap-and-nav",
709747
"v17-page-rc1-window",
710748
"v17-rc-anchor",
711749
"v17-release-page",
750+
"v17-rest-envelope-defects",
751+
"v17-verification-defects-docs",
712752
"vacuous-filter-carveouts",
713753
"validate-runs-build-authoring-lints",
714754
"variant-doc-drift-gate",
@@ -721,6 +761,7 @@
721761
"webhook-liveness-ledger-flip",
722762
"webhooks-drop-dead-delivery-i18n",
723763
"wildcard-fallthrough-guard",
724-
"withdraw-adr-0107-drop-writes-proposal"
764+
"withdraw-adr-0107-drop-writes-proposal",
765+
"workflow-slot-retired"
725766
]
726767
}

examples/app-crm/CHANGELOG.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,132 @@
11
# @objectstack/example-crm
22

3+
## 4.0.92-rc.2
4+
5+
### Patch Changes
6+
7+
- 5293114: fix(automation): a decision's three declared ways to route a branch are now one working model (#4414)
8+
9+
A `decision` node advertised three mechanisms for splitting a path and only one
10+
of them did anything. The other two were the ADR-0049 `declared ≠ enforced`
11+
shape, and the pair of them shipped a guard that does not guard in
12+
`examples/app-crm`.
13+
14+
| mechanism | before | now |
15+
| :--------------------------------------------------- | :----------------------------------------------------------------------------------------------------- | :---------------------------------------------------- |
16+
| `edge.condition` | ✅ the only one that worked | unchanged |
17+
| `edge.isDefault` | **zero readers** anywhere but the schema declaration | BPMN default flow, enforced in `traverseNext` |
18+
| `decision.config.conditions[].label``branchLabel` | matched **0** out-edge labels across every example app, then fell back to the full edge set in silence | routes; an unclaimable label is logged, not swallowed |
19+
20+
## What was broken, end to end
21+
22+
`crm_convert_lead_wizard` means "already converted → abort screen; otherwise →
23+
the wizard". It ran **both**: an already-converted lead got
24+
"This lead has already been converted" and then walked straight into the
25+
conversion wizard behind it. Four independent silences stacked up:
26+
27+
1. the decision's first condition was authored `{lead_record.status} ==
28+
'converted'` — braces in a slot declared bare CEL, so it was string-compared
29+
and never true;
30+
2. the second (`'true'`) therefore won, yielding `branchLabel: 'No — proceed'`;
31+
3. no out-edge carried that label (they were `'Yes'` / `'No'`), so traversal
32+
discarded the branch and considered every out-edge;
33+
4. `e3b` was unconditional, so it ran regardless — and the natural fix, marking
34+
it `isDefault: true`, was a dead key.
35+
36+
## The model
37+
38+
`branchLabel` narrows the edge set → `condition` gates each edge → `isDefault`
39+
catches whatever is left. Concretely:
40+
41+
- **`isDefault` is enforced.** A default edge is traversed only when no
42+
conditional sibling of the same source node matched, and it is no longer part
43+
of the unconditional parallel fan-out — that distinction is the whole point of
44+
the marker. Passed over because a real branch won, its target records the same
45+
`skipped` step a closed gate does (#4354).
46+
- **An unclaimable branch label warns.** Traversal still falls back to the full
47+
edge set (a run mid-flight must not die on a metadata error) but says so,
48+
naming the computed branch and the out-edge labels that exist.
49+
- **A decision that declares no `conditions` reports no branch.** It used to
50+
report `'default'` unconditionally — a label no out-edge in the repo ever
51+
carried — which is why every decision node fell back to the full edge set.
52+
The `'default'` sentinel survives for the case it actually describes (declared
53+
conditions, none matched) and is now claimed by the `isDefault` edge as well
54+
as by an edge literally labelled `'default'`.
55+
- **`conditions[].expression` is evaluated as the bare CEL it is declared to
56+
be.** The raw string went to the legacy `{var}` template path, where
57+
`lead.status == 'converted'` cannot resolve and the branch is decided by
58+
string comparison. Unlike `edge.condition` this slot carries no
59+
`ExpressionInput` envelope — the decision descriptor is deliberately
60+
schemaless — so the executor supplies the dialect. A brace-in-CEL predicate
61+
now fails loudly (ADR-0032 §1c) instead of deciding `false`.
62+
63+
## Caught at authoring time too
64+
65+
Four new `os build` / `os validate` warnings, because a wrong route is silent at
66+
run time by nature (Prime Directive #12):
67+
68+
`flow-branch-label-unmatched` (the shipped shape),
69+
`flow-decision-unconditional-branch` (a guarded decision with an unconditional
70+
sibling — the actual hole), `flow-default-edge-with-condition` and
71+
`flow-multiple-default-edges`.
72+
73+
Both of the first two fire on the pre-fix `convert-lead.flow.ts` and are silent
74+
after it.
75+
76+
## Effect on flows that already exist
77+
78+
Enforcing `isDefault` changes how a **stored** flow behaves, and the flows it
79+
changes are mostly Studio's own. `objectui`'s flow edge inspector has always
80+
written `isDefault: true` when you bind an out-edge to a decision's default/else
81+
branch — into a key with zero readers, so that edge ran unconditionally, in
82+
parallel with whichever branch actually matched. Those flows now take exactly
83+
one branch. That is the fix, but it is a behaviour change on existing data
84+
rather than only on newly authored metadata, so it is worth knowing before
85+
upgrading: a flow that quietly ran two paths will now run one.
86+
87+
Nothing changes for an edge that never carried the marker — `isDefault` defaults
88+
to `false`, and an ordinary unconditional out-edge still fans out in parallel
89+
exactly as before.
90+
91+
## The example app
92+
93+
`crm_convert_lead_wizard`'s guard is now a plain exclusive gateway: the
94+
redundant `config.conditions` is gone and `e3b` carries `isDefault: true`. One
95+
mechanism per decision, and exactly one branch runs.
96+
97+
Verified: 11 new engine/executor tests (including the reported repro in both
98+
directions), 12 new linter tests; `@objectstack/service-automation` 577 tests
99+
and `@objectstack/cli` 652 tests green, all three example apps build with no new
100+
findings.
101+
102+
- Updated dependencies [e6b1b69]
103+
- Updated dependencies [2826d1e]
104+
- Updated dependencies [462d9c4]
105+
- Updated dependencies [5b843fb]
106+
- Updated dependencies [b4487aa]
107+
- Updated dependencies [cdf4d9a]
108+
- Updated dependencies [9ca2d85]
109+
- Updated dependencies [5293114]
110+
- Updated dependencies [20bc357]
111+
- Updated dependencies [7631964]
112+
- Updated dependencies [ec975f1]
113+
- Updated dependencies [eb4204b]
114+
- Updated dependencies [4f13be2]
115+
- Updated dependencies [cf2c9b7]
116+
- Updated dependencies [0f9faa2]
117+
- Updated dependencies [8aacf94]
118+
- Updated dependencies [9c93465]
119+
- Updated dependencies [ebb209c]
120+
- Updated dependencies [f3141d8]
121+
- Updated dependencies [04f1182]
122+
- Updated dependencies [c57f3cf]
123+
- Updated dependencies [97faca3]
124+
- Updated dependencies [ad5fe25]
125+
- Updated dependencies [ea90179]
126+
- Updated dependencies [dadb43f]
127+
- @objectstack/spec@17.0.0-rc.2
128+
- @objectstack/runtime@17.0.0-rc.2
129+
3130
## 4.0.92-rc.1
4131

5132
### Patch Changes

0 commit comments

Comments
 (0)