- @objectstack/spec@15.1.1
- @objectstack/core@15.1.1
- @objectstack/types@15.1.1
- @objectstack/metadata-core@15.1.1
- @objectstack/metadata-fs@15.1.1
- @objectstack/platform-objects@15.1.1
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [3fe9df1]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [4109153]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [627f225]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- Updated dependencies [f531a26]
- @objectstack/spec@15.1.0
- @objectstack/platform-objects@15.1.0
- @objectstack/core@15.1.0
- @objectstack/types@15.1.0
- @objectstack/metadata-core@15.1.0
- @objectstack/metadata-fs@15.1.0
- Updated dependencies [02a014b]
- Updated dependencies [28b7c28]
- Updated dependencies [13749ec]
- Updated dependencies [e62c233]
- Updated dependencies [ed61c9b]
- Updated dependencies [31d04d4]
- @objectstack/platform-objects@15.0.0
- @objectstack/spec@15.0.0
- @objectstack/core@15.0.0
- @objectstack/metadata-core@15.0.0
- @objectstack/types@15.0.0
- @objectstack/metadata-fs@15.0.0
- Updated dependencies [16b4bf6]
- Updated dependencies [16b4bf6]
- Updated dependencies [10e8983]
- Updated dependencies [607aaf4]
- Updated dependencies [bb71321]
- @objectstack/spec@14.8.0
- @objectstack/platform-objects@14.8.0
- @objectstack/core@14.8.0
- @objectstack/metadata-core@14.8.0
- @objectstack/types@14.8.0
- @objectstack/metadata-fs@14.8.0
- Updated dependencies [d6a72eb]
- Updated dependencies [824a395]
- @objectstack/spec@14.7.0
- @objectstack/types@14.7.0
- @objectstack/core@14.7.0
- @objectstack/metadata-core@14.7.0
- @objectstack/platform-objects@14.7.0
- @objectstack/metadata-fs@14.7.0
- Updated dependencies [609cb13]
- Updated dependencies [ce6d151]
- @objectstack/spec@14.6.0
- @objectstack/platform-objects@14.6.0
- @objectstack/core@14.6.0
- @objectstack/metadata-core@14.6.0
- @objectstack/types@14.6.0
- @objectstack/metadata-fs@14.6.0
- Updated dependencies [526805e]
- Updated dependencies [d79ca07]
- Updated dependencies [33ebd34]
- Updated dependencies [c044f08]
- Updated dependencies [01274eb]
- Updated dependencies [8f23746]
- Updated dependencies [b97af7e]
- Updated dependencies [6da03ee]
- @objectstack/spec@14.5.0
- @objectstack/platform-objects@14.5.0
- @objectstack/core@14.5.0
- @objectstack/metadata-core@14.5.0
- @objectstack/types@14.5.0
- @objectstack/metadata-fs@14.5.0
- Updated dependencies [7953832]
- Updated dependencies [82e745e]
- Updated dependencies [f3035bd]
- Updated dependencies [82c0d94]
- Updated dependencies [7449476]
- @objectstack/spec@14.4.0
- @objectstack/platform-objects@14.4.0
- @objectstack/metadata-core@14.4.0
- @objectstack/core@14.4.0
- @objectstack/types@14.4.0
- @objectstack/metadata-fs@14.4.0
-
02f6af4: ADR-0090 follow-through wave: enforce book audience at the read layer; finish the D2/D3 cleanup the P1 rename missed.
- rest:
/meta/book,/meta/doc, and/meta/book/:name/treenow ENFORCE the ADR-0046 §6.7 audience model (ADR-0049 — no unenforced security properties): anonymous callers see onlypublicbooks/docs;{ permissionSet }-gated books require the caller to hold the named set; a doc's effective audience is the union over the books that CLAIM it (unclaimed docs default toorg; orphan rendering never inheritspublic). Gated evaluation fails CLOSED when holdings cannot be resolved.doc/booksingle-item reads bypass the shared meta cache (per-caller gate vs shared ETag). - spec: new pure helpers powering that gate —
audienceAllows,resolveDocAudiences,docAudienceAllows,resolveBookClaimedDocs(+AudienceCaller/AudienceBooktypes). BREAKING but ships as aminorper the launch-window convention (pre-1.0 semantics — breaking changes do not burn a major version number while the whole stack is in lockstep):METADATA_FORM_REGISTRYkeysrole/profileare gone —positionis the registered form (thepositiontype had LOST its form layout in the P1 rename);EnvironmentArtifactMetadataSchemadeclarespositionsinstead of retiredroles/profiles. - plugin-security: the
securityservice exposesresolvePermissionSetNames(ctx)— the same resolution as data-plane enforcement, for the docs gate. - metadata: artifact ingestion maps
positions → 'position'(the staleroles → 'role'mapping matched nothing since the P1 rename, silently dropping compiled positions from metadata registration). - lint: books join the D3 role-word scan (their
audienceis a permission-model reference now), and a new advisory rulesecurity-book-audience-unknown-setflags a{ permissionSet }audience naming a set the stack does not declare (runtime fails closed — the typo cost is "nobody can read the book", so say it at author time). - platform-objects: metadata-form translations regain
position(all four locales) and drop the retiredrole/profilegroups, with a vocabulary regression test.
- rest:
- Updated dependencies [2a71f48]
- Updated dependencies [02f6af4]
- Updated dependencies [c1064f1]
- @objectstack/platform-objects@14.3.0
- @objectstack/spec@14.3.0
- @objectstack/core@14.3.0
- @objectstack/metadata-core@14.3.0
- @objectstack/types@14.3.0
- @objectstack/metadata-fs@14.3.0
- Updated dependencies [ac8f029]
- Updated dependencies [4ab9958]
- @objectstack/spec@14.2.0
- @objectstack/platform-objects@14.2.0
- @objectstack/core@14.2.0
- @objectstack/metadata-core@14.2.0
- @objectstack/types@14.2.0
- @objectstack/metadata-fs@14.2.0
- Updated dependencies [5a8465f]
- Updated dependencies [7f8620b]
- Updated dependencies [82ba3a6]
- @objectstack/spec@14.1.0
- @objectstack/core@14.1.0
- @objectstack/metadata-core@14.1.0
- @objectstack/platform-objects@14.1.0
- @objectstack/types@14.1.0
- @objectstack/metadata-fs@14.1.0
- Updated dependencies [0a8e685]
- Updated dependencies [afa8115]
- Updated dependencies [80f12ca]
- Updated dependencies [332b711]
- Updated dependencies [e2fa074]
- Updated dependencies [23c8668]
- Updated dependencies [29f017d]
- Updated dependencies [216fa9a]
- Updated dependencies [6c22b12]
- Updated dependencies [d0531c4]
- Updated dependencies [cff5aac]
- @objectstack/spec@14.0.0
- @objectstack/platform-objects@14.0.0
- @objectstack/core@14.0.0
- @objectstack/metadata-core@14.0.0
- @objectstack/types@14.0.0
- @objectstack/metadata-fs@14.0.0
-
6d83431: ADR-0090 P1 breaking wave — permission model v2 concept convergence.
Pre-launch one-step renames and secure defaults (no compatibility aliases, per ADR-0090 D3/D4 superseding ADR-0057 D5/D7's alias discipline):
sys_role→sys_position,sys_user_role→sys_user_position(fieldrole→position),sys_role_permission_set→sys_position_permission_set(fieldrole_id→position_id);RoleSchema/defineRole→PositionSchema/definePositionwith noparent(positions are flat; hierarchy lives on the business-unit tree).ExecutionContext.roles[]→positions[]; the EvalUser/CEL contractcurrent_user.roles→current_user.positions(formula validators updated); stack propertyroles:→positions:; metadata kindsrole/profile→position(profile kind removed).isProfileremoved fromPermissionSetSchema(ADR-0090 D2);isDefaultnarrows to an install-time suggestion;appDefaultProfileName→appDefaultPermissionSetName(isDefault-only).- OWD enum drops legacy aliases
read/read_write/full; new optionalexternalSharingModel(external dial,privatedefault) lands as P1 spec shape (ADR-0090 D11). - Secure default (D1): a custom object with an owner field and NO
sharingModelnow resolvesprivate(was: fully public). System objects keep their explicit posture. Unrecognised stored values fail closed. - ExecutionContext gains the P1 principal-taxonomy shape (D10):
principalKind/audience/onBehalfOf(optional, semantics phase in later). - Sharing recipients:
role→position(expanded viasys_user_position∪ the better-auth membership transition source);role_and_subordinatesremoved —unit_and_subordinatesnow expands the business-unit subtree (finishes ADR-0057 D5's re-homing).
- Updated dependencies [6d83431]
- Updated dependencies [01917c2]
- Updated dependencies [b271691]
- Updated dependencies [a5a1e41]
- Updated dependencies [466adf6]
- Updated dependencies [57b89b4]
- Updated dependencies [5be00c3]
- Updated dependencies [466adf6]
- Updated dependencies [2bee609]
- Updated dependencies [9fa84f9]
- Updated dependencies [fc7e7f7]
- @objectstack/spec@13.0.0
- @objectstack/core@13.0.0
- @objectstack/platform-objects@13.0.0
- @objectstack/types@13.0.0
- @objectstack/metadata-core@13.0.0
- @objectstack/metadata-fs@13.0.0
- Updated dependencies [6cebf22]
- Updated dependencies [21420d9]
- @objectstack/spec@12.6.0
- @objectstack/core@12.6.0
- @objectstack/metadata-core@12.6.0
- @objectstack/platform-objects@12.6.0
- @objectstack/types@12.6.0
- @objectstack/metadata-fs@12.6.0
- Updated dependencies [8b3d363]
- @objectstack/spec@12.5.0
- @objectstack/core@12.5.0
- @objectstack/metadata-core@12.5.0
- @objectstack/platform-objects@12.5.0
- @objectstack/types@12.5.0
- @objectstack/metadata-fs@12.5.0
- Updated dependencies [60dc3ba]
- @objectstack/spec@12.4.0
- @objectstack/metadata-core@12.4.0
- @objectstack/core@12.4.0
- @objectstack/platform-objects@12.4.0
- @objectstack/types@12.4.0
- @objectstack/metadata-fs@12.4.0
- Updated dependencies [e7eceec]
- @objectstack/spec@12.3.0
- @objectstack/core@12.3.0
- @objectstack/metadata-core@12.3.0
- @objectstack/platform-objects@12.3.0
- @objectstack/types@12.3.0
- @objectstack/metadata-fs@12.3.0
- Updated dependencies [fce8ff4]
- Updated dependencies [3962023]
- Updated dependencies [2bb193d]
- Updated dependencies [0426d27]
- Updated dependencies [da807f7]
- Updated dependencies [4f5b791]
- @objectstack/spec@12.2.0
- @objectstack/metadata-core@12.2.0
- @objectstack/core@12.2.0
- @objectstack/platform-objects@12.2.0
- @objectstack/types@12.2.0
- @objectstack/metadata-fs@12.2.0
- Updated dependencies [93e6d02]
- @objectstack/spec@12.1.0
- @objectstack/core@12.1.0
- @objectstack/metadata-core@12.1.0
- @objectstack/platform-objects@12.1.0
- @objectstack/types@12.1.0
- @objectstack/metadata-fs@12.1.0
-
9860de4: Surface view-key collisions during view container expansion instead of renaming silently.
expandViewContainerkeeps its backward-compatible rename behaviour (<object>.<key>→<object>.<key>_2on collision) but now stamps a machine-readable_diagnostics.warningsentry on the renamedExpandedViewItem, explaining that references targeting the requested name (form action targets, navigationviewNames) will resolve to the other view. Both flattening loaders — the ObjectQL engine and the MetadataPlugin — log these warnings at boot so the collision is visible instead of manifesting as a form action opening a list view (#2554). -
Updated dependencies [a8df396]
-
Updated dependencies [e695fe0]
-
Updated dependencies [07f055c]
-
Updated dependencies [7c09621]
-
Updated dependencies [7709db4]
-
Updated dependencies [2082109]
-
Updated dependencies [7c09621]
-
Updated dependencies [9860de4]
-
Updated dependencies [069c205]
- @objectstack/spec@12.0.0
- @objectstack/platform-objects@12.0.0
- @objectstack/core@12.0.0
- @objectstack/metadata-core@12.0.0
- @objectstack/types@12.0.0
- @objectstack/metadata-fs@12.0.0
- Updated dependencies [6a9397e]
- Updated dependencies [c0efe5d]
- @objectstack/spec@11.10.0
- @objectstack/core@11.10.0
- @objectstack/metadata-core@11.10.0
- @objectstack/platform-objects@11.10.0
- @objectstack/types@11.10.0
- @objectstack/metadata-fs@11.10.0
- Updated dependencies [d3595d9]
- @objectstack/spec@11.9.0
- @objectstack/core@11.9.0
- @objectstack/metadata-core@11.9.0
- @objectstack/platform-objects@11.9.0
- @objectstack/types@11.9.0
- @objectstack/metadata-fs@11.9.0
- Updated dependencies [53d491a]
- Updated dependencies [b84726b]
- @objectstack/platform-objects@11.8.0
- @objectstack/spec@11.8.0
- @objectstack/core@11.8.0
- @objectstack/types@11.8.0
- @objectstack/metadata-core@11.8.0
- @objectstack/metadata-fs@11.8.0
- Updated dependencies [5178906]
- @objectstack/spec@11.7.0
- @objectstack/platform-objects@11.7.0
- @objectstack/core@11.7.0
- @objectstack/metadata-core@11.7.0
- @objectstack/types@11.7.0
- @objectstack/metadata-fs@11.7.0
- @objectstack/spec@11.6.0
- @objectstack/core@11.6.0
- @objectstack/types@11.6.0
- @objectstack/metadata-core@11.6.0
- @objectstack/metadata-fs@11.6.0
- @objectstack/platform-objects@11.6.0
- Updated dependencies [6ee4f04]
- Updated dependencies [c1e3a65]
- @objectstack/spec@11.5.0
- @objectstack/core@11.5.0
- @objectstack/metadata-core@11.5.0
- @objectstack/platform-objects@11.5.0
- @objectstack/types@11.5.0
- @objectstack/metadata-fs@11.5.0
- Updated dependencies [5821c51]
- Updated dependencies [a0fce3f]
- @objectstack/spec@11.4.0
- @objectstack/core@11.4.0
- @objectstack/metadata-core@11.4.0
- @objectstack/platform-objects@11.4.0
- @objectstack/types@11.4.0
- @objectstack/metadata-fs@11.4.0
- Updated dependencies [58e8e31]
- Updated dependencies [b4a5df0]
- @objectstack/spec@11.3.0
- @objectstack/core@11.3.0
- @objectstack/metadata-core@11.3.0
- @objectstack/platform-objects@11.3.0
- @objectstack/types@11.3.0
- @objectstack/metadata-fs@11.3.0
- Updated dependencies [d0f4b13]
- Updated dependencies [302bdab]
- @objectstack/spec@11.2.0
- @objectstack/core@11.2.0
- @objectstack/metadata-core@11.2.0
- @objectstack/platform-objects@11.2.0
- @objectstack/types@11.2.0
- @objectstack/metadata-fs@11.2.0
- Updated dependencies [cbc8c02]
- Updated dependencies [07c2773]
- Updated dependencies [d7a88df]
- Updated dependencies [4f8f108]
- Updated dependencies [ce0b4f6]
- Updated dependencies [90bce88]
- Updated dependencies [3209ec6]
- Updated dependencies [e011d42]
- Updated dependencies [6e5bdd5]
- Updated dependencies [9ccfcd6]
- Updated dependencies [ecf193f]
- Updated dependencies [51bec81]
- Updated dependencies [3e593a7]
- Updated dependencies [fdb41c0]
- Updated dependencies [63d5403]
- @objectstack/platform-objects@11.1.0
- @objectstack/core@11.1.0
- @objectstack/spec@11.1.0
- @objectstack/types@11.1.0
- @objectstack/metadata-core@11.1.0
- @objectstack/metadata-fs@11.1.0
-
4b5ec6e: fix(automation): re-bind scheduled-flow jobs on
os devhot-reloadEditing a schedule-triggered flow under
objectstack devsilently kept firing the OLD definition until a full server restart. The dev watcher recompilesdist/objectstack.jsonand MetadataPlugin reloads it into the MetadataManager (so GET /meta reads + UI HMR are fresh), but the AutomationEngine pulls its flow definitions and trigger/job bindings ONCE at boot — nothing re-registered them on reload. So the scheduled job bound at boot kept running the pre-edit flow (oldrunAs, schedule, or logic) on its timer, with no signal that the edit had no effect.Fix: MetadataPlugin now fires a generic
metadata:reloadedhook after each artifact reload (the HMR POST handler and the server-side artifact-file watcher; never on the initial boot load). AutomationServicePlugin subscribes and re-syncs the engine from the metadata service — re-registering every current flow (idempotent:registerFlowre-binds the trigger, andScheduleTrigger.startcancels + reschedules the job) and unregistering flows removed from the artifact so their jobs stop firing. This covers all auto-triggered flow types (schedule / record-change / api), not just scheduled ones, since record-change flows were also executing their boot-time definitions after an edit. Production deployments are unaffected — nothing reloads the artifact there. -
Updated dependencies [4d99a5c]
-
Updated dependencies [9b5bf3d]
-
Updated dependencies [cb5b393]
-
Updated dependencies [ab5718a]
-
Updated dependencies [4845c12]
-
Updated dependencies [c1a754a]
-
Updated dependencies [6fbe91f]
-
Updated dependencies [715d667]
-
Updated dependencies [5eef4cf]
-
Updated dependencies [72759e1]
-
Updated dependencies [6c4fbd9]
-
Updated dependencies [ef3ed67]
-
Updated dependencies [cd51229]
-
Updated dependencies [7697a0e]
-
Updated dependencies [e7e04f1]
-
Updated dependencies [cfd5ac4]
-
Updated dependencies [2be5c1f]
-
Updated dependencies [ad143ce]
-
Updated dependencies [5c4a8c8]
-
Updated dependencies [3afaeed]
-
Updated dependencies [5737261]
-
Updated dependencies [a619a3a]
-
Updated dependencies [f44c1bd]
-
Updated dependencies [795b6d1]
-
Updated dependencies [8801c02]
-
Updated dependencies [3d04e06]
-
Updated dependencies [4a84c98]
-
Updated dependencies [c715d25]
-
Updated dependencies [aa33b02]
-
Updated dependencies [d980f0d]
-
Updated dependencies [a658523]
-
Updated dependencies [82ff91c]
-
Updated dependencies [638f472]
- @objectstack/metadata-core@11.0.0
- @objectstack/platform-objects@11.0.0
- @objectstack/spec@11.0.0
- @objectstack/types@11.0.0
- @objectstack/core@11.0.0
- @objectstack/metadata-fs@11.0.0
- @objectstack/spec@10.3.0
- @objectstack/core@10.3.0
- @objectstack/types@10.3.0
- @objectstack/metadata-core@10.3.0
- @objectstack/metadata-fs@10.3.0
- @objectstack/platform-objects@10.3.0
- Updated dependencies [b496498]
- @objectstack/spec@10.2.0
- @objectstack/core@10.2.0
- @objectstack/metadata-core@10.2.0
- @objectstack/platform-objects@10.2.0
- @objectstack/types@10.2.0
- @objectstack/metadata-fs@10.2.0
- Updated dependencies [49da36e]
- Updated dependencies [ac79f16]
- @objectstack/spec@10.1.0
- @objectstack/core@10.1.0
- @objectstack/metadata-core@10.1.0
- @objectstack/platform-objects@10.1.0
- @objectstack/types@10.1.0
- @objectstack/metadata-fs@10.1.0
- Updated dependencies [d7ff626]
- Updated dependencies [2a1b16b]
- Updated dependencies [2256e93]
- Updated dependencies [7108ff3]
- Updated dependencies [30c0313]
- Updated dependencies [e16f2a8]
- Updated dependencies [e411a82]
- Updated dependencies [ae271d0]
- Updated dependencies [61ed5c7]
- Updated dependencies [a581385]
- Updated dependencies [d5f6d29]
- Updated dependencies [220ce5b]
- Updated dependencies [3efe334]
- Updated dependencies [0df063e]
- Updated dependencies [ce13bb8]
- Updated dependencies [feead7e]
- Updated dependencies [6ca20b3]
- Updated dependencies [5f875fe]
- Updated dependencies [b469950]
- Updated dependencies [47d978a]
- @objectstack/spec@10.0.0
- @objectstack/platform-objects@10.0.0
- @objectstack/core@10.0.0
- @objectstack/metadata-core@10.0.0
- @objectstack/types@10.0.0
- @objectstack/metadata-fs@10.0.0
- Updated dependencies [e7f6539]
- Updated dependencies [2365d07]
- Updated dependencies [6595b53]
- Updated dependencies [fa8964d]
- Updated dependencies [36138c7]
- Updated dependencies [a8e4f3b]
- Updated dependencies [4c213c2]
- Updated dependencies [2afb612]
- @objectstack/spec@9.11.0
- @objectstack/core@9.11.0
- @objectstack/metadata-core@9.11.0
- @objectstack/platform-objects@9.11.0
- @objectstack/types@9.11.0
- @objectstack/metadata-fs@9.11.0
- Updated dependencies [db02bd5]
- Updated dependencies [641675d]
- Updated dependencies [94e9040]
- Updated dependencies [4331adb]
- Updated dependencies [1f88fd9]
- Updated dependencies [1f88fd9]
- @objectstack/spec@9.10.0
- @objectstack/platform-objects@9.10.0
- @objectstack/core@9.10.0
- @objectstack/metadata-core@9.10.0
- @objectstack/types@9.10.0
- @objectstack/metadata-fs@9.10.0
- @objectstack/spec@9.9.1
- @objectstack/core@9.9.1
- @objectstack/types@9.9.1
- @objectstack/metadata-core@9.9.1
- @objectstack/metadata-fs@9.9.1
- @objectstack/platform-objects@9.9.1
- Updated dependencies [84249a4]
- Updated dependencies [11af299]
- Updated dependencies [d5774b5]
- Updated dependencies [134043a]
- Updated dependencies [90108e0]
- Updated dependencies [9afeb2d]
- Updated dependencies [6bec07e]
- Updated dependencies [601cc11]
- Updated dependencies [575448d]
- @objectstack/spec@9.9.0
- @objectstack/core@9.9.0
- @objectstack/metadata-core@9.9.0
- @objectstack/platform-objects@9.9.0
- @objectstack/types@9.9.0
- @objectstack/metadata-fs@9.9.0
- Updated dependencies [97c55b3]
- Updated dependencies [1b1f490]
- @objectstack/spec@9.8.0
- @objectstack/core@9.8.0
- @objectstack/metadata-core@9.8.0
- @objectstack/platform-objects@9.8.0
- @objectstack/types@9.8.0
- @objectstack/metadata-fs@9.8.0
- @objectstack/spec@9.7.0
- @objectstack/core@9.7.0
- @objectstack/types@9.7.0
- @objectstack/metadata-core@9.7.0
- @objectstack/metadata-fs@9.7.0
- @objectstack/platform-objects@9.7.0
- Updated dependencies [d1e930a]
- Updated dependencies [71578f2]
- Updated dependencies [5e3a301]
- Updated dependencies [5db2742]
- @objectstack/spec@9.6.0
- @objectstack/core@9.6.0
- @objectstack/metadata-core@9.6.0
- @objectstack/platform-objects@9.6.0
- @objectstack/types@9.6.0
- @objectstack/metadata-fs@9.6.0
- Updated dependencies [ee72aae]
- @objectstack/spec@9.5.1
- @objectstack/core@9.5.1
- @objectstack/metadata-core@9.5.1
- @objectstack/platform-objects@9.5.1
- @objectstack/types@9.5.1
- @objectstack/metadata-fs@9.5.1
- Updated dependencies [d08551c]
- Updated dependencies [5be7102]
- Updated dependencies [707aeed]
- Updated dependencies [7a103d4]
- Updated dependencies [4b01250]
- @objectstack/spec@9.5.0
- @objectstack/platform-objects@9.5.0
- @objectstack/core@9.5.0
- @objectstack/metadata-core@9.5.0
- @objectstack/types@9.5.0
- @objectstack/metadata-fs@9.5.0
-
2c8e607: fix(ADR-0046): serve package docs at runtime, not just in the compiled artifact
Package docs (
src/docs/*.md) compiled into a bundle were never reaching the runtime, soGET /meta/docreturned an empty list and the docs were invisible even thoughos buildproduced them.Two gaps:
os dev/os serve(config-load path) re-derives metadata fromdefineStack(...), which never carries the markdown docs — those are collected only at compile time.serve.tsnow collectssrc/docs/*.mdinto the stack on the config-load path too (collection only — additive, never blocks boot), so docs serve in dev exactly as from a built artifact.- The MetadataPlugin artifact loader (
ARTIFACT_FIELD_TO_TYPE) omitted thedocs→docmapping, so the bundle'sdocsarray was skipped when loading through that path. Added the mapping (with a regression test) for parity with the ObjectQL engine'smetadataArrayKeys.
-
Updated dependencies [060467a]
-
Updated dependencies [0856476]
-
Updated dependencies [fef38ec]
-
Updated dependencies [b678d8c]
-
Updated dependencies [b678d8c]
-
Updated dependencies [b678d8c]
- @objectstack/spec@9.4.0
- @objectstack/metadata-core@9.4.0
- @objectstack/core@9.4.0
- @objectstack/platform-objects@9.4.0
- @objectstack/types@9.4.0
- @objectstack/metadata-fs@9.4.0
- b10aa78: Metadata registered through the metadata-service path now carries package provenance.
loadMetadataFromServiceandMetadataFacade.registerpass each item's own_packageIdthrough toregistry.registerItemsoapplyProtectionstamps_packageId/_provenance: 'package'(never a synthetic id —isArtifactBacked()write authorization keys off_packageId). NewMetadataPluginOptions.packageIdlets hosts running the filesystem scanner declare the owning package id for scanned source-file metadata, closing the same gap for hand-wired kernels. GET /api/v1/meta/:type consumers (e.g. objectui NavigationSyncEffect) can now distinguish package-shipped items from user-authored rows without name heuristics.
- Updated dependencies [1ada658]
- Updated dependencies [3219191]
- Updated dependencies [290f631]
- Updated dependencies [50b7b47]
- Updated dependencies [f15d6f6]
- Updated dependencies [f8684ea]
- Updated dependencies [c802327]
- Updated dependencies [b4765be]
- @objectstack/spec@9.3.0
- @objectstack/platform-objects@9.3.0
- @objectstack/core@9.3.0
- @objectstack/metadata-core@9.3.0
- @objectstack/types@9.3.0
- @objectstack/metadata-fs@9.3.0
- Updated dependencies [2f57b75]
- Updated dependencies [2f57b75]
- @objectstack/spec@9.2.0
- @objectstack/core@9.2.0
- @objectstack/metadata-core@9.2.0
- @objectstack/platform-objects@9.2.0
- @objectstack/types@9.2.0
- @objectstack/metadata-fs@9.2.0
- Updated dependencies [b9062c9]
- @objectstack/spec@9.1.0
- @objectstack/core@9.1.0
- @objectstack/metadata-core@9.1.0
- @objectstack/platform-objects@9.1.0
- @objectstack/types@9.1.0
- @objectstack/metadata-fs@9.1.0
- Updated dependencies [1817845]
- @objectstack/spec@9.0.1
- @objectstack/core@9.0.1
- @objectstack/metadata-core@9.0.1
- @objectstack/platform-objects@9.0.1
- @objectstack/types@9.0.1
- @objectstack/metadata-fs@9.0.1
- Updated dependencies [4c3f693]
- Updated dependencies [0bf39f1]
- Updated dependencies [f533f42]
- Updated dependencies [1c83ee8]
- @objectstack/spec@9.0.0
- @objectstack/core@9.0.0
- @objectstack/metadata-core@9.0.0
- @objectstack/platform-objects@9.0.0
- @objectstack/types@9.0.0
- @objectstack/metadata-fs@9.0.0
- @objectstack/spec@8.0.1
- @objectstack/core@8.0.1
- @objectstack/types@8.0.1
- @objectstack/metadata-core@8.0.1
- @objectstack/metadata-fs@8.0.1
- @objectstack/platform-objects@8.0.1
- Updated dependencies [a46c017]
- Updated dependencies [b990b89]
- Updated dependencies [99111ec]
- Updated dependencies [d5a8161]
- Updated dependencies [5cf1f1b]
- Updated dependencies [9ef89d4]
- Updated dependencies [3306d2f]
- Updated dependencies [c262301]
- Updated dependencies [bc44195]
- Updated dependencies [9e2e229]
- @objectstack/spec@8.0.0
- @objectstack/core@8.0.0
- @objectstack/metadata-core@8.0.0
- @objectstack/platform-objects@8.0.0
- @objectstack/types@8.0.0
- @objectstack/metadata-fs@8.0.0
- @objectstack/spec@7.9.0
- @objectstack/core@7.9.0
- @objectstack/types@7.9.0
- @objectstack/metadata-core@7.9.0
- @objectstack/metadata-fs@7.9.0
- @objectstack/platform-objects@7.9.0
- Updated dependencies [06f2bbb]
- Updated dependencies [36719db]
- Updated dependencies [424ab26]
- @objectstack/spec@7.8.0
- @objectstack/core@7.8.0
- @objectstack/metadata-core@7.8.0
- @objectstack/platform-objects@7.8.0
- @objectstack/types@7.8.0
- @objectstack/metadata-fs@7.8.0
-
764c747: fix(metadata): home the metadata-storage objects in metadata-core and register them from ObjectQL
Standalone "host config" apps boot without
@objectstack/metadata's MetadataPlugin, so nobody registered the metadata-storage objects (sys_metadata,_history,_audit,sys_view_definition) into ObjectQL — their tables were never schema-synced and ObjectQL's own protocol (loadMetaFromDb/getMetaItems) failed withno such table: sys_metadataon every read.- Move the four storage-object definitions from
@objectstack/platform-objects/metadatato@objectstack/metadata-core(the lowest package shared by their real consumers);platform-objects/metadatanow re-exports them for back-compat. ObjectQLPluginregisters these objects itself (gated onenvironmentId === undefined, mirroringrestoreMetadataFromDb) so their tables always sync on platform/standalone kernels.- Gate the SQL driver's tenant-audit warning on actual multi-tenant mode —
organization_idnow exists on every table, so column presence alone no longer implies "tenant-scoped"; single-tenant boots no longer spam the warning for system writes.
- Move the four storage-object definitions from
-
Updated dependencies [b391955]
-
Updated dependencies [f06b64e]
-
Updated dependencies [023bf93]
-
Updated dependencies [764c747]
- @objectstack/spec@7.7.0
- @objectstack/platform-objects@7.7.0
- @objectstack/metadata-core@7.7.0
- @objectstack/core@7.7.0
- @objectstack/types@7.7.0
- @objectstack/metadata-fs@7.7.0
- Updated dependencies [955d4c8]
- Updated dependencies [c4a4cbd]
- Updated dependencies [b046ec2]
- Updated dependencies [2170ad9]
- Updated dependencies [02d6359]
- Updated dependencies [7648242]
- Updated dependencies [8fa1e7f]
- Updated dependencies [7ae6abc]
- Updated dependencies [55866f5]
- Updated dependencies [60f9c45]
- @objectstack/spec@7.6.0
- @objectstack/platform-objects@7.6.0
- @objectstack/core@7.6.0
- @objectstack/types@7.6.0
- @objectstack/metadata-core@7.6.0
- @objectstack/metadata-fs@7.6.0
- @objectstack/spec@7.5.0
- @objectstack/core@7.5.0
- @objectstack/types@7.5.0
- @objectstack/metadata-core@7.5.0
- @objectstack/metadata-fs@7.5.0
- @objectstack/platform-objects@7.5.0
- @objectstack/spec@7.4.1
- @objectstack/core@7.4.1
- @objectstack/types@7.4.1
- @objectstack/metadata-core@7.4.1
- @objectstack/metadata-fs@7.4.1
- @objectstack/platform-objects@7.4.1
-
13632b1: ADR-0030 P0 (framework) — converge notifications onto a single ingress and the layered model. Every producer now publishes through
NotificationService.emit(EmitInput); the in-app inbox is a materialization of delivery, not a row producers write.Single ingress (
@objectstack/service-messaging) — breakingMessagingService.emittakes the newEmitInputcontract (topic/audience/payload/severity/dedupKey/source/actorId/organizationId/channels) instead of the flatNotificationshape. It writes the L2sys_notificationevent (idempotent ondedupKey), resolves the audience, then fans out; it returns{ notificationId, deduped, deliveries, delivered, failed }.- New
sys_notification_receiptobject — the read-state spine (delivered|read|clicked|dismissed), keyed(notification_id, user_id, channel). The inbox channel writes adeliveredreceipt on materialization. sys_inbox_message: addsnotification_id/delivery_id, dropsread(read-state moved to the receipt), adds the userminelist view.
Event re-model (
@objectstack/platform-objects) — breakingsys_notificationis re-modeled from a per-user inbox into the L2 event (topic,payload,severity,dedup_key,source_*,actor_id). Removesrecipient_id/is_read/read_at/type/title/body/url/actor_nameand the inbox actions/views. App-nav: the account inbox points atsys_inbox_message; Setup shows the notification event log.
Producers routed through
emit()@objectstack/service-automation: thenotifynode maps its config toEmitInput.@objectstack/plugin-audit: collaboration@mention→collab.mentionand assignment →collab.assignment(both with adedupKey); no more directsys_notificationwrites. Collaboration notifications now requireMessagingServicePlugin(they degrade to a warn otherwise).
Migration (
@objectstack/metadata)- Idempotent
migrateSysNotificationToEventsplits legacysys_notificationinbox rows intosys_inbox_message+ receipts and rewrites the event row.
Startup (
@objectstack/cli,@objectstack/runtime)messagingis now a foundational capability. Onobjectstack serveit is added toALWAYS_ON_CAPABILITIES(every non-minimalpreset starts it); on cloud per-project kernels the capability loader expandsrequiresto addmessagingwheneverauditis present. This keeps collaboration@mention/ assignment notifications (which now flow through the pipeline) working out of the box on both paths.--preset minimalopts out.
The Console bell repoint (objectui) and phases P1–P3 are tracked in
docs/handoff/adr-0030-notification-convergence.md.
- Updated dependencies [23c7107]
- Updated dependencies [c72daad]
- Updated dependencies [4404572]
- Updated dependencies [eea3f1b]
- Updated dependencies [e478e0c]
- Updated dependencies [4cc2ced]
- Updated dependencies [13632b1]
- Updated dependencies [f115182]
- Updated dependencies [2faf9f2]
- Updated dependencies [2faf9f2]
- Updated dependencies [2faf9f2]
- Updated dependencies [58b450b]
- Updated dependencies [82eb6cf]
- Updated dependencies [c381977]
- Updated dependencies [13d8653]
- Updated dependencies [ff3d006]
- Updated dependencies [5e831de]
- @objectstack/spec@7.4.0
- @objectstack/platform-objects@7.4.0
- @objectstack/core@7.4.0
- @objectstack/types@7.4.0
- @objectstack/metadata-core@7.4.0
- @objectstack/metadata-fs@7.4.0
- Updated dependencies [5e7c554]
- @objectstack/spec@7.3.0
- @objectstack/core@7.3.0
- @objectstack/platform-objects@7.3.0
- @objectstack/types@7.3.0
- @objectstack/metadata-core@7.3.0
- @objectstack/metadata-fs@7.3.0
- Updated dependencies [9096dfe]
- @objectstack/types@7.2.1
- @objectstack/spec@7.2.1
- @objectstack/core@7.2.1
- @objectstack/metadata-core@7.2.1
- @objectstack/metadata-fs@7.2.1
- @objectstack/platform-objects@7.2.1
- @objectstack/spec@7.2.0
- @objectstack/core@7.2.0
- @objectstack/types@7.2.0
- @objectstack/metadata-core@7.2.0
- @objectstack/metadata-fs@7.2.0
- @objectstack/platform-objects@7.2.0
-
47a92f4: Promote
email_templateto a first-class metadata type using the canonicalEmailTemplateDefinitionSchema.Previously
email_templatehad two competing Zod schemas (Prime Directive #8 violation): the legacyEmailTemplateSchema(a sub-shape ofNotification) and the richerEmailTemplateDefinitionSchema. The runtime metadata protocol (packages/objectql/src/protocol.ts) and Studio's property panel registered the legacy one, which is why all the new fields (name,label,category,locale,bodyHtml,bodyText, …) were reported as “declared in form layout but missing from schema”.This change:
- Repoints the
email_templateentry inTYPE_TO_SCHEMA(packages/objectql/src/protocol.ts) and inBUILTIN_METADATA_TYPE_SCHEMAS(packages/spec/src/kernel/metadata-type-schemas.ts) toEmailTemplateDefinitionSchema. The legacyEmailTemplateSchemais kept only as an inline sub-shape insideNotification. - Adds an
emailTemplatescollection todefineStack()input (packages/spec/src/stack.zod.ts), registers it inMAP_SUPPORTED_FIELDS/PLURAL_TO_SINGULAR(packages/spec/src/shared/metadata-collection.zod.ts), wires it intoARTIFACT_FIELD_TO_TYPE(packages/metadata/src/plugin.ts) andAPP_CATEGORY_KEYS(packages/runtime/src/app-plugin.ts). - Rewrites
packages/spec/src/system/email-template.form.tsfor the new schema with sections for Identity, Subject, HTML body, Plain-text body, Variables, Delivery overrides, Status. - Ships three reference templates in
examples/app-crm/src/emails/:crm.deal_won(rewritten to canonical shape),crm.welcome(new),crm.lead_followup(new), and wires them into the CRM stack viaemailTemplates: Object.values(emails).
End-to-end verified in Studio: list view at
/_console/apps/studio/metadata/email_templateshows all three entries; the detail view renders the EmailTemplatePreview iframe and the property panel cleanly renders every canonical field (no missing-schema warnings).GET /api/v1/metanow returns the newpropertiesset (name, label, category, locale, subject, bodyHtml, bodyText, variables, fromOverride, replyTo, active, isSystem, description). - Repoints the
-
Updated dependencies [6228609]
-
Updated dependencies [47a92f4]
- @objectstack/platform-objects@7.1.0
- @objectstack/spec@7.1.0
- @objectstack/core@7.1.0
- @objectstack/types@7.1.0
- @objectstack/metadata-core@7.1.0
- @objectstack/metadata-fs@7.1.0
- Updated dependencies [74470ad]
- Updated dependencies [d29617e]
- Updated dependencies [dc72172]
- Updated dependencies [d29617e]
- Updated dependencies [010757b]
- Updated dependencies [257954d]
- @objectstack/spec@7.0.0
- @objectstack/platform-objects@7.0.0
- @objectstack/core@7.0.0
- @objectstack/types@7.0.0
- @objectstack/metadata-core@7.0.0
- @objectstack/metadata-fs@7.0.0
- @objectstack/spec@6.9.0
- @objectstack/core@6.9.0
- @objectstack/types@6.9.0
- @objectstack/metadata-core@6.9.0
- @objectstack/metadata-fs@6.9.0
- @objectstack/platform-objects@6.9.0
- @objectstack/spec@6.8.1
- @objectstack/core@6.8.1
- @objectstack/types@6.8.1
- @objectstack/metadata-core@6.8.1
- @objectstack/metadata-fs@6.8.1
- @objectstack/platform-objects@6.8.1
- Updated dependencies [6e88f77]
- Updated dependencies [c8b9f57]
- Updated dependencies [45d27c5]
- @objectstack/spec@6.8.0
- @objectstack/platform-objects@6.8.0
- @objectstack/core@6.8.0
- @objectstack/types@6.8.0
- @objectstack/metadata-core@6.8.0
- @objectstack/metadata-fs@6.8.0
- @objectstack/spec@6.7.1
- @objectstack/core@6.7.1
- @objectstack/types@6.7.1
- @objectstack/metadata-core@6.7.1
- @objectstack/metadata-fs@6.7.1
- @objectstack/platform-objects@6.7.1
- Updated dependencies [430067b]
- Updated dependencies [4f9e9d4]
- Updated dependencies [4f9e9d4]
- @objectstack/spec@6.7.0
- @objectstack/platform-objects@6.7.0
- @objectstack/core@6.7.0
- @objectstack/types@6.7.0
- @objectstack/metadata-core@6.7.0
- @objectstack/metadata-fs@6.7.0
- Updated dependencies [a49cfc2]
- @objectstack/spec@6.6.0
- @objectstack/core@6.6.0
- @objectstack/platform-objects@6.6.0
- @objectstack/types@6.6.0
- @objectstack/metadata-core@6.6.0
- @objectstack/metadata-fs@6.6.0
- @objectstack/spec@6.5.1
- @objectstack/core@6.5.1
- @objectstack/types@6.5.1
- @objectstack/metadata-core@6.5.1
- @objectstack/metadata-fs@6.5.1
- @objectstack/platform-objects@6.5.1
- @objectstack/spec@6.5.0
- @objectstack/core@6.5.0
- @objectstack/types@6.5.0
- @objectstack/metadata-core@6.5.0
- @objectstack/metadata-fs@6.5.0
- @objectstack/platform-objects@6.5.0
- Updated dependencies [f8651cc]
- Updated dependencies [f8651cc]
- Updated dependencies [0bf6f9a]
- @objectstack/spec@6.4.0
- @objectstack/core@6.4.0
- @objectstack/platform-objects@6.4.0
- @objectstack/types@6.4.0
- @objectstack/metadata-core@6.4.0
- @objectstack/metadata-fs@6.4.0
- @objectstack/spec@6.3.0
- @objectstack/core@6.3.0
- @objectstack/types@6.3.0
- @objectstack/metadata-core@6.3.0
- @objectstack/metadata-fs@6.3.0
- @objectstack/platform-objects@6.3.0
- Updated dependencies [b4c74a9]
- @objectstack/spec@6.2.0
- @objectstack/core@6.2.0
- @objectstack/platform-objects@6.2.0
- @objectstack/types@6.2.0
- @objectstack/metadata-core@6.2.0
- @objectstack/metadata-fs@6.2.0
- @objectstack/spec@6.1.1
- @objectstack/core@6.1.1
- @objectstack/types@6.1.1
- @objectstack/metadata-core@6.1.1
- @objectstack/metadata-fs@6.1.1
- @objectstack/platform-objects@6.1.1
- Updated dependencies [93c0589]
- @objectstack/spec@6.1.0
- @objectstack/core@6.1.0
- @objectstack/platform-objects@6.1.0
- @objectstack/types@6.1.0
- @objectstack/metadata-core@6.1.0
- @objectstack/metadata-fs@6.1.0
-
944f187: # v5.0 —
project→environmenthard renameThe runtime concept previously called "project" (per-tenant business workspace; Org → Project → Branch hierarchy; per-project ObjectKernel, per-project DB, per-project artifact) is now uniformly called "environment".
This is a hard rename with no aliases, deprecation shims, or compatibility layer. Upgrade requires a coordinated update of CLI, runtime, server, and any clients calling the REST API.
Note: "project" in the npm / monorepo sense (the framework itself,
package.json, tsconfig project references, vitestprojectsconfig) is unchanged.- Flags renamed:
--project/-p→--environment/-e(os publish,os rollback)--project-id→--environment-id(os dev)
- Default local env id:
proj_local→env_local. - Env var:
OS_PROJECT_ID→OS_ENVIRONMENT_ID. - Command group renamed:
os projects ...→os environments ...(bind,create,list,show,switch). - Persisted auth-config key:
activeProjectId→activeEnvironmentId.
- Scoped routes:
/api/v1/projects/:projectId/...→/api/v1/environments/:environmentId/.... - Cloud control-plane routes:
/api/v1/cloud/projects/...→/api/v1/cloud/environments/...(including/cloud/environments/:id/artifact,/cloud/environments/:id/metadata,/cloud/environments/:id/credentials/rotate, etc.). - Header:
X-Project-Id(and lowercasex-project-id) →X-Environment-Id(x-environment-id). - Route param name in handlers:
req.params.projectId→req.params.environmentId. - Hostname-routing and tenant-resolution code-paths use
environmentIdend-to-end.
- Exported symbols (no aliases):
createSystemProjectPlugin→createSystemEnvironmentPluginSYSTEM_PROJECT_ID→SYSTEM_ENVIRONMENT_IDProjectArtifactSchema→EnvironmentArtifactSchemaPROJECT_ARTIFACT_SCHEMA_VERSION→ENVIRONMENT_ARTIFACT_SCHEMA_VERSIONObjectOSProjectPlugin→ObjectOSEnvironmentPlugincreateSingleProjectPlugin→createSingleEnvironmentPlugin
- Plugin identifier strings:
com.objectstack.runtime.objectos-project→objectos-environmentcom.objectstack.studio.single-project→single-environmentcom.objectstack.multi-project→multi-environmentcom.objectstack.runtime.system-project→system-environment
- Provisioning hook:
provisionSystemProject→provisionSystemEnvironment.
- Column renames on
sys_metadataandsys_metadata_history:project_id→environment_id. - Column renames on
sys_activity:project_id→environment_id(plus index). - Object renames in platform-objects metadata:
sys_project→sys_environment(lookup targets),sys_project_member→sys_environment_member,sys_project_credential→sys_environment_credential. - Auth-context field:
active_project_id→active_environment_id. - JSON schemas under
packages/spec/json-schema/system/:ProjectArtifact*.json→EnvironmentArtifact*.json(regenerated at build).
A new migration
migrateProjectIdToEnvironmentId(packages/metadata/src/migrations/migrate-project-id-to-environment-id.ts) auto-runs fromDatabaseLoader.ensureSchema()on bootstrap and rewrites any existingproject_idcolumn onsys_metadata/sys_metadata_historytoenvironment_id(idempotent, best-effort). Existing rows are preserved.The legacy reverse migration
migrateEnvIdToProjectIdis retained verbatim for historical / disaster-recovery use; it is not auto-run.-os publish --project proj_xyz +os publish --environment env_xyz -curl -H "X-Project-Id: env_xyz" https://api.example.com/api/v1/data/customer +curl -H "X-Environment-Id: env_xyz" https://api.example.com/api/v1/data/customer -OS_PROJECT_ID=env_xyz os dev +OS_ENVIRONMENT_ID=env_xyz os dev -import { createSystemProjectPlugin, SYSTEM_PROJECT_ID } from "@objectstack/runtime"; +import { createSystemEnvironmentPlugin, SYSTEM_ENVIRONMENT_ID } from "@objectstack/runtime"; -import { ProjectArtifactSchema } from "@objectstack/spec"; +import { EnvironmentArtifactSchema } from "@objectstack/spec";
If you maintain a Cloud control-plane deployment, the
cloudrepository must be updated in lockstep to pick up the new plugin identifier strings (single-environment,multi-environment,objectos-environment). - Flags renamed:
- Updated dependencies [629a716]
- Updated dependencies [dbc4f7d]
- Updated dependencies [944f187]
- @objectstack/spec@6.0.0
- @objectstack/platform-objects@6.0.0
- @objectstack/core@6.0.0
- @objectstack/types@6.0.0
- @objectstack/metadata-core@6.0.0
- @objectstack/metadata-fs@6.0.0
- Updated dependencies [bab2b20]
- Updated dependencies [fa011d8]
- Updated dependencies [f0f7c27]
- Updated dependencies [b806f58]
- @objectstack/platform-objects@5.2.0
- @objectstack/spec@5.2.0
- @objectstack/metadata-core@5.2.0
- @objectstack/core@5.2.0
- @objectstack/types@5.2.0
- @objectstack/metadata-fs@5.2.0
-
75f4ee6: feat(metadata): introduce
executionPinnedcapability for runtime version pinning (ADR-0009)Adds a new capability flag on the metadata type registry so that types whose runtime transaction rows reference a specific historical version (flow, workflow, approval) get unified pinning behavior — instead of every business table re-implementing its own snapshot column.
MetadataTypeRegistryEntrySchemagainsexecutionPinned: boolean, enforced invariantexecutionPinned ⇒ supportsVersioning.flow,workflow,approvalflipped toexecutionPinned: true.approvalalso corrected tosupportsVersioning: true(it was wronglyfalse).MetadataRepository.getByHash(ref, hash)added to the interface. Production implementation inSysMetadataRepositoryresolves historical bodies throughsys_metadata_historykeyed by(organization_id, type, name, checksum). In-memory and FS repositories serve HEAD-only matches.sys_metadata_historygains an index on(organization_id, type, name, checksum)to keep hash lookups O(log n).HistoryCleanupManagerskips pinned types entirely (both age-based and count-based retention) — pinned-type history must never be GC'd.
See
docs/adr/0009-execution-pinned-metadata.mdfor full rationale and the list of rejected alternatives (no shared snapshot table, no inlined snapshot column). -
823d559: Remove
sys_metadata_history.metadata_idcolumn.The column was originally a
Field.lookupFK intosys_metadata.id, then downgraded to plaintextduring the M1 history-writes work so that DELETE tombstones could keep an orphaned ref. After M1 we concluded the column carries no business value:- Audit-time joins use
(organization_id, type, name, version), which is already a UNIQUE composite key. - The physical row id is a database-internal detail with no logical identity — it cannot follow an item through delete + recreate.
- No code reader was ever added.
This release removes the column outright:
- Dropped
metadata_idfromSysMetadataHistoryObject(@objectstack/platform-objects). - Dropped
metadataIdfromMetadataHistoryRecordSchema(@objectstack/spec). SysMetadataRepository.put/deleteno longer write the column.- Legacy
DatabaseLoader.createHistoryRecordno longer writes it;getHistoryRecord/queryHistoryfilter by(type, name)directly (no parent-row lookup needed). MetadataHistoryCleanupmaxVersionspolicy groups by(type, name)instead ofmetadata_id.
Migration: Drop the column from existing
sys_metadata_historytables in a follow-up SQL migration. Existing history rows remain queryable since(organization_id, type, name, version)is already the canonical lookup key. No consumer code should be readingmetadata_id— if you are, switch to(organization_id, type, name, version).See ADR-0008 §14 for the full rationale.
- Audit-time joins use
-
Updated dependencies [75f4ee6]
-
Updated dependencies [823d559]
- @objectstack/spec@5.1.0
- @objectstack/metadata-core@5.1.0
- @objectstack/platform-objects@5.1.0
- @objectstack/metadata-fs@5.1.0
- @objectstack/core@5.1.0
- @objectstack/types@5.1.0
-
5e9dcb4: BREAKING — metadata: remove
projectandbranchfromMetaRefThe metadata layer no longer models project or branch. Customisation is now scoped purely to organisation. Project remains exclusively as an artifact packaging concept (the
objectstack.jsonbundle envelope); branching is left to Git.What changed:
MetaRefis now{ org, type, name, version? }(was{ org, project, branch, type, name, version? }).refKey()is the two segment string${org}/${type}/${name}(was five segments).MetadataItem.seqis monotonic per org (was per branch).BranchRef,MergeStrategy,MergeResulttypes and the optionalfork/mergemethods onMetadataRepositoryare removed.ListFilter/WatchFilter/HistoryOptionsno longer acceptprojectorbranch.FileSystemRepositorydisk layout simplified to<root>/<type>/<name>.json(was<root>/<project>/<branch>/<type>/<name>.json); change-log path is now.objectstack/.log/main.jsonlregardless of any branch concept. Constructor no longer acceptsproject/branch.SysMetadataRepository: removedprojectLabel/branchLabeloptions; thesys_metadataschema'sproject_id/branchcolumns (if present) are ignored. A future major release willDROPthem.MetadataManager.setRepository(repo, opts)no longer takes an opts object withbranch.
Migration:
-const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' }; +const ref = { org: 'acme', type: 'view', name: 'home' }; -new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' }); +new FileSystemRepository({ root, org: 'acme' });
Existing
sys_metadatarows continue to load; the deprecated columns are ignored at read time. -
8b298c7: Attach an
@objectstack/metadata-coreMetadataRepositoryas a supplementary event source onMetadataManager(ADR-0008 M0 PR-6).When a repository is configured via
manager.setRepository(repo):- the manager subscribes to
repo.watch({ branch: 'main' })and re-emits each event through the legacyMetadataWatchEventchannel thatmanager.subscribe(type, cb)already exposes, so existing HMR / SSE pipelines pick up changes from the new layer automatically; - each event also invalidates the in-memory registry entry and the
list()cache for the affected type, so subsequent reads fall through to the repository / loaders instead of returning stale data; - a new
manager.dispose()method drains the watch loop and the FS watcher cleanly.MetadataPlugin.stop()calls it.
MetadataPlugin.start()now instantiates aFileSystemRepositoryrooted at<rootDir>/.objectstack/metadata/(separate from user source files) and attaches it automatically when not inartifact-onlymode.No write-mirroring yet —
register()/unregister()/save()keep their existing semantics; the canonical write path migrates in PR-10. - the manager subscribes to
-
9e51868: Server-side artifact-file watcher; CLI no longer posts to the HMR endpoint on recompile (ADR-0008 M0 PR-8).
MetadataPlugin.start()now attaches a chokidar watcher on theartifactSource.pathwhen running in local-file mode withwatch !== false. On every artifact change it re-invokes_loadFromLocalFileand broadcasts areloadevent through the HMR hub. This replaces the previous arrangement whereos dev's watch-recompile loop POSTed/api/v1/dev/metadata-eventsto trigger a reload — the server is now autonomous.The CLI
devcommand's recompile loop drops the POST call; the/api/v1/dev/metadata-eventsroute remains available for external trigger sources (cloud webhooks, git hooks, ad-hoc curl).MetadataPlugin.stop()closes the artifact watcher cleanly. -
ddf8080: ADR-0008 M0 PR-9: thread the canonical server-side change-log
seqfromMetadataRepositoryevents through to the Studio HMR badge. TheuseMetadataHmr()hook now exposeslastSeqalongside the localversioncounter, and the badge tooltip renders "Repo seq: #N" so operators can correlate Studio reloads with what other replicas observe. Legacy chokidar-driven events still work — they simply leavesequndefined and consumers fall back to the local counter.
-
96ad4df: Fix dev-mode HMR data-reload for
*.view.ts/*.flow.tssource-file edits.Three coordinated fixes close the long-standing gap where editing a declarative-metadata source file in dev (e.g.
case.view.ts) would recompiledist/objectstack.jsonbut the running server kept serving the stale boot-time value:-
@objectstack/objectql—ObjectStackProtocolImplementation.getMetaItemnow consultsMetadataService(HMR-aware) before the in-memorySchemaRegistry(boot-time cache). Previously the registry shadowed freshly-registered values:manager.register('view','case',newDef)updated MetadataManager butgetMetaItemreturned the stale registry copy because step 2 (registry) ran before step 3 (service). Reordered to "1. sys_metadata overlay → 2. MetadataService → 3. SchemaRegistry". -
@objectstack/runtime—createStandaloneStacknow enables theMetadataPluginartifact-file watcher in non-production environments (NODE_ENV !== 'production'). Previously hard-coded towatch: false, leaving nothing watchingdist/objectstack.jsonwhen the CLI dev mode recompiled it. -
@objectstack/metadata&@objectstack/metadata-fs— Both chokidar watchers now useusePolling: trueto avoidfs.watchEMFILE on macOS / busy dev hosts where the native file-descriptor pool can be exhausted by other long-running node processes.
With these three changes:
- CLI edits source → recompile artifact (~400ms)
- Server's polling chokidar detects artifact change →
_loadFromLocalFile _loadFromLocalFilecallsmanager.register(type, name, item)- MetadataService now has the fresh value
- Read path returns the fresh value via the new step-2 lookup
- Studio SSE listeners re-render
-
-
df18ae9: Fix dev-mode HMR data-reload for view metadata.
MetadataPlugin._parseAndRegisterArtifactpreviously required a top-levelnameon every artifact item and silently skipped those without one. View bundles in the compiled artifact carry no top-levelname(their identity is the target object, encoded underlist.data.object/form.data.object— same pattern used byObjectQL.SchemaRegistry'sresolveMetadataItemName). As a result, artifact-loaded views never reachedMetadataManager, and HMR file pushes never affected the read path: API responses kept returning the boot-timeSchemaRegistrycopy.This change derives the registration key from
list.data.object(orform.data.object) when no top-levelnameis present, mirroring the ObjectQL convention.Also splits the
MetadataPluginwatch flag into two independent options so dev mode can enable artifact-file HMR without paying the cost of the source-file scanner:watch— controlsNodeMetadataManager's recursive source scan (defaultfalse; turning it on in artifact mode would polling-scan the entire project root includingnode_modules).artifactWatch— controls the cheap single-file polling watcher on the compiled artifact (dist/objectstack.json). The standalone stack enables this automatically whenNODE_ENV !== 'production'.
-
Updated dependencies [5e9dcb4]
-
Updated dependencies [4150fe4]
-
Updated dependencies [8337cdb]
-
Updated dependencies [58835a6]
-
Updated dependencies [8cc30b4]
-
Updated dependencies [32ce912]
-
Updated dependencies [888a5c1]
-
Updated dependencies [96ad4df]
-
Updated dependencies [2f9073a]
- @objectstack/metadata-core@5.0.0
- @objectstack/metadata-fs@5.0.0
- @objectstack/platform-objects@5.0.0
- @objectstack/spec@5.0.0
- @objectstack/core@5.0.0
- @objectstack/types@5.0.0
-
3a99239: Metadata HMR via SSE — close the agent-edits → preview-refresh loop.
@objectstack/metadata: register/api/v1/dev/metadata-eventsSSE endpoint unconditionally; addPOSTtrigger that reloads the artifact and broadcasts areloadevent to all listeners.@objectstack/cli(os dev): chokidar-based watch onobjectstack.config.tsandsrc/; debounced recompile +POSTto the HMR endpoint so the server reloads without restart.@objectstack/studio:useMetadataHmrprovider opens anEventSource, exposes a version counter; previews include it in their query deps, and a top-bar badge surfaces connection state and event counts for diagnostics.
-
Updated dependencies [2869891]
- @objectstack/spec@4.2.0
- @objectstack/core@4.2.0
- @objectstack/platform-objects@4.2.0
- @objectstack/types@4.2.0
- @objectstack/spec@4.1.1
- @objectstack/core@4.1.1
- @objectstack/types@4.1.1
- @objectstack/platform-objects@4.1.1
-
1234920: v3.1 — Runtime controls & read-through cache.
- Generic
LRUCache(lazy TTL, promote-on-get, size cap, hits/misses/hitRate stats) wired intoDatabaseLoader.{load,loadMany,list,stat}with write invalidation. Configured viacache.databaseLoader. MetadataPluginConfig.bootstrapmodes:eager(default),lazy,artifact-only.artifact-onlyrequiresartifactSource.mode = 'local-file'.MetadataManagerConfig.persistencetwo-axis write gates:writable(gatesregister()) andoverlayWritable(gatessaveOverlay()). Both defaulttrue; either becomes a throw undervalidation.throwOnError.- Single-source schema discipline: canonical
MetadataManagerConfigSchema/MetadataFallbackStrategySchemalive inkernel/metadata-loader.zod.tsand are re-exported fromsystem/metadata-persistence.zod.ts.
- Generic
- Updated dependencies [2108c30]
- Updated dependencies [23db640]
- @objectstack/spec@4.1.0
- @objectstack/core@4.1.0
- @objectstack/platform-objects@4.1.0
- @objectstack/types@4.1.0
- 15e0df6: chore: unify all package versions to a single patch release
- Updated dependencies [15e0df6]
- @objectstack/spec@4.0.5
- @objectstack/core@4.0.5
- @objectstack/types@4.0.5
- @objectstack/platform-objects@4.0.5
- Updated dependencies [326b66b]
- @objectstack/spec@4.0.4
- @objectstack/core@4.0.4
- @objectstack/types@4.0.4
- @objectstack/spec@4.0.3
- @objectstack/core@4.0.3
- @objectstack/types@4.0.3
- Updated dependencies [5f659e9]
- @objectstack/spec@4.0.2
- @objectstack/core@4.0.2
- @objectstack/types@4.0.2
- Updated dependencies [f08ffc3]
- Updated dependencies [e0b0a78]
- @objectstack/spec@4.0.0
- @objectstack/core@4.0.0
- @objectstack/types@4.0.0
- @objectstack/spec@3.3.1
- @objectstack/core@3.3.1
- @objectstack/types@3.3.1
- Fix ERR_MODULE_NOT_FOUND on Vercel: add
"type": "module"and update exports to use.js/.cjspattern (consistent with @objectstack/core, @objectstack/runtime) - @objectstack/spec@3.3.0
- @objectstack/core@3.3.0
- @objectstack/types@3.3.0
- @objectstack/spec@3.2.9
- @objectstack/core@3.2.9
- @objectstack/types@3.2.9
- @objectstack/spec@3.2.8
- @objectstack/core@3.2.8
- @objectstack/types@3.2.8
- @objectstack/spec@3.2.7
- @objectstack/core@3.2.7
- @objectstack/types@3.2.7
- @objectstack/spec@3.2.6
- @objectstack/core@3.2.6
- @objectstack/types@3.2.6
- @objectstack/spec@3.2.5
- @objectstack/core@3.2.5
- @objectstack/types@3.2.5
- @objectstack/spec@3.2.4
- @objectstack/core@3.2.4
- @objectstack/types@3.2.4
- @objectstack/spec@3.2.3
- @objectstack/core@3.2.3
- @objectstack/types@3.2.3
- Updated dependencies [46defbb]
- @objectstack/spec@3.2.2
- @objectstack/core@3.2.2
- @objectstack/types@3.2.2
- Updated dependencies [850b546]
- @objectstack/spec@3.2.1
- @objectstack/core@3.2.1
- @objectstack/types@3.2.1
- Updated dependencies [5901c29]
- @objectstack/spec@3.2.0
- @objectstack/core@3.2.0
- @objectstack/types@3.2.0
- Updated dependencies [953d667]
- @objectstack/spec@3.1.1
- @objectstack/core@3.1.1
- @objectstack/types@3.1.1
- Updated dependencies [0088830]
- @objectstack/spec@3.1.0
- @objectstack/core@3.1.0
- @objectstack/types@3.1.0
- Updated dependencies [92d9d99]
- @objectstack/spec@3.0.11
- @objectstack/core@3.0.11
- @objectstack/types@3.0.11
- Updated dependencies [d1e5d31]
- @objectstack/spec@3.0.10
- @objectstack/core@3.0.10
- @objectstack/types@3.0.10
- Updated dependencies [15e0df6]
- @objectstack/spec@3.0.9
- @objectstack/core@3.0.9
- @objectstack/types@3.0.9
- Updated dependencies [5a968a2]
- @objectstack/spec@3.0.8
- @objectstack/core@3.0.8
- @objectstack/types@3.0.8
- Updated dependencies [0119bd7]
- Updated dependencies [5426bdf]
- @objectstack/spec@3.0.7
- @objectstack/core@3.0.7
- @objectstack/types@3.0.7
- Updated dependencies [5df254c]
- @objectstack/spec@3.0.6
- @objectstack/core@3.0.6
- @objectstack/types@3.0.6
- Updated dependencies [23a4a68]
- @objectstack/spec@3.0.5
- @objectstack/core@3.0.5
- @objectstack/types@3.0.5
- Updated dependencies [d738987]
- @objectstack/spec@3.0.4
- @objectstack/core@3.0.4
- @objectstack/types@3.0.4
- c7267f6: Patch release for maintenance updates and improvements.
- Updated dependencies [c7267f6]
- @objectstack/spec@3.0.3
- @objectstack/core@3.0.3
- @objectstack/types@3.0.3
- Updated dependencies [28985f5]
- @objectstack/spec@3.0.2
- @objectstack/core@3.0.2
- @objectstack/types@3.0.2
- Updated dependencies [389725a]
- @objectstack/spec@3.0.1
- @objectstack/core@3.0.1
- @objectstack/types@3.0.1
- Release v3.0.0 — unified version bump for all ObjectStack packages.
- Updated dependencies
- @objectstack/spec@3.0.0
- @objectstack/core@3.0.0
- @objectstack/types@3.0.0
- Updated dependencies
- @objectstack/spec@2.0.7
- @objectstack/core@2.0.7
- @objectstack/types@2.0.7
- Patch release for maintenance and stability improvements
- Updated dependencies
- @objectstack/spec@2.0.6
- @objectstack/core@2.0.6
- @objectstack/types@2.0.6
- Updated dependencies
- @objectstack/spec@2.0.5
- @objectstack/core@2.0.5
- @objectstack/types@2.0.5
- Patch release for maintenance and stability improvements
- Updated dependencies
- @objectstack/spec@2.0.4
- @objectstack/core@2.0.4
- @objectstack/types@2.0.4
- Patch release for maintenance and stability improvements
- Updated dependencies
- @objectstack/spec@2.0.3
- @objectstack/core@2.0.3
- @objectstack/types@2.0.3
- Updated dependencies [1db8559]
- @objectstack/spec@2.0.2
- @objectstack/core@2.0.2
- @objectstack/types@2.0.2
- Patch release for maintenance and stability improvements
- Updated dependencies
- @objectstack/spec@2.0.1
- @objectstack/core@2.0.1
- @objectstack/types@2.0.1
- Updated dependencies [38e5dd5]
- Updated dependencies [38e5dd5]
- @objectstack/spec@2.0.0
- @objectstack/core@2.0.0
- @objectstack/types@2.0.0
- Updated dependencies
- @objectstack/spec@1.0.12
- @objectstack/core@1.0.12
- @objectstack/types@1.0.12
- @objectstack/spec@1.0.11
- @objectstack/core@1.0.11
- @objectstack/types@1.0.11
- Updated dependencies [10f52e1]
- @objectstack/core@1.0.10
- @objectstack/spec@1.0.10
- @objectstack/types@1.0.10
- @objectstack/spec@1.0.9
- @objectstack/core@1.0.9
- @objectstack/types@1.0.9
- @objectstack/spec@1.0.8
- @objectstack/core@1.0.8
- @objectstack/types@1.0.8
- @objectstack/spec@1.0.7
- @objectstack/core@1.0.7
- @objectstack/types@1.0.7
- Updated dependencies [a7f7b9d]
- @objectstack/spec@1.0.6
- @objectstack/core@1.0.6
- @objectstack/types@1.0.6
- b1d24bd: refactor: migrate build system from tsc to tsup for faster builds
- Replaced
tscwithtsup(using esbuild) across all packages - Added shared
tsup.config.tsin workspace root - Added
tsupas workspace dev dependency - significantly improved build performance
- Replaced
- Updated dependencies [b1d24bd]
- @objectstack/core@1.0.5
- @objectstack/types@1.0.5
- @objectstack/spec@1.0.5
- @objectstack/spec@1.0.4
- @objectstack/core@1.0.4
- @objectstack/types@1.0.4
- Updated dependencies [fb2eabd]
- @objectstack/core@1.0.3
- @objectstack/spec@1.0.3
- @objectstack/types@1.0.3
-
a0a6c85: Infrastructure and development tooling improvements
- Add changeset configuration for automated version management
- Add comprehensive GitHub Actions workflows (CI, CodeQL, linting, releases)
- Add development configuration files (.cursorrules, .github/prompts)
- Add documentation files (ARCHITECTURE.md, CONTRIBUTING.md, workflows docs)
- Update test script configuration in package.json
- Add @objectstack/cli to devDependencies for better development experience
-
109fc5b: Unified patch release to align all package versions.
-
Updated dependencies [a0a6c85]
-
Updated dependencies [109fc5b]
- @objectstack/spec@1.0.2
- @objectstack/core@1.0.2
- @objectstack/types@1.0.2
- @objectstack/spec@1.0.1
- @objectstack/core@1.0.1
- @objectstack/types@1.0.1
- Major version release for ObjectStack Protocol v1.0.
- Stabilized Protocol Definitions
- Enhanced Runtime Plugin Support
- Fixed Type Compliance across Monorepo
- Updated dependencies
- @objectstack/spec@1.0.0
- @objectstack/core@1.0.0
- @objectstack/types@1.0.0
- Updated dependencies
- @objectstack/spec@0.9.2
- @objectstack/core@0.9.2
- @objectstack/types@0.9.2
- Patch release for maintenance and stability improvements. All packages updated with unified versioning.
- Updated dependencies
- @objectstack/spec@0.9.1
- @objectstack/core@0.9.1
- @objectstack/types@0.9.1
- Updated dependencies [555e6a7]
- @objectstack/spec@0.8.2
- @objectstack/core@0.8.2
- @objectstack/types@0.8.2
- @objectstack/spec@0.8.1
- @objectstack/core@0.8.1
- @objectstack/types@0.8.1
-
This release includes a major upgrade to the core validation engine (Zod v4) and aligns all protocol definitions with stricter type safety.
- Updated dependencies
- @objectstack/spec@1.0.0
- @objectstack/core@1.0.0
- @objectstack/types@1.0.0
- Updated dependencies [fb41cc0]
- @objectstack/spec@0.7.2
- @objectstack/core@0.7.2
- @objectstack/types@0.7.2
- Updated dependencies
- @objectstack/spec@0.7.1
- @objectstack/types@0.7.1
- @objectstack/core@0.7.1