Conversation
Remove tests, correction logic, and documentation tied to retired alpha/beta migrations. Document that prerelease databases must be recreated and reserve migrations for stable release upgrade paths.
Make every snapshot deterministic from birth. A content manifest is sealed whenever a snapshot's members are written (track creation, release commit, virtual materialization, bundle import, quarantine promotion, track clone) and inherited by reference by every other clone; it is discarded only when no snapshot references it. One closed-member algorithm selects relationships whose source and target IDs are both members and pins them to the member revisions; supporting identities and marking definitions and non-emitted LinkById targets are recorded as dependencies. No secondary SDO is ever discovered through a relationship, and bundle export has exactly one path: replay the manifest. The opt-in graph cache and its create/delete endpoints are removed; the admin-only source-attested reconstruction remains and requires replace_manifest_id. Stop cloning relationships when an endpoint revision advances. Exact pairing for a release lives in the sealed manifest; the create-time endpoint pins stay as authoring context and the release preview reports relationships added, removed, and authored against other revisions. Project the x-mitre-collection object from the snapshot and a new config.publication rule instead of storing it: identity and markings inherit the organization settings unless overridden, collection id and created default to track-derived values and lock after the first release, modified is the snapshot timestamp, and drafts omit x_mitre_version. Release commit freezes the resolved values, assigns a stable bundle id, and stores SHA-256 hashes of both serializations; include is a draft-only preview and includeToc is gone. Notes are immutable once released. Name storage for what it holds: releaseTrackContentManifests and releaseTrackContentManifestEntries with release-track-content-manifest ids, a required seal_reason instead of resolver_version and baseline_reconstruction, outstanding-work-only releaseTrackReconciliations, and no config.include_secondary_objects. The 20260902120000 migration upgrades existing databases in place (dry run: npm run preview:content-manifests), skips unregistered release-track collections, and names the failing snapshot and missing references on any integrity error; the 20260730180000 migration no longer creates manifests. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Restore the ability to remove a tagged snapshot, which the sealed-manifest work had closed off entirely. Only the track's most recent release may be deleted, so the version order of the remaining releases and the provenance of any later release are never disturbed. Deleting a release requires the administrator role (403 otherwise, via the new InsufficientRoleError) and a `confirm_version` query parameter equal to the release version (400 otherwise). The release's ledger entry is retracted from every remaining snapshot so the version becomes available again, its content manifest is discarded when nothing else references it, the registry catalogue is reconciled, later drafts are kept, and a `delete_release` audit event is recorded. Deleting an older release, or one followed by a later release, returns 409. Drafts keep the ordinary editor deletion path; the release branch shares the snapshot deletion route, so the service checks the role itself. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bundle exports replay the sealed content manifest and nothing else. The
draft-only `include=staged,candidates` / `state` bundle preview is removed:
it produced bundles that matched no manifest, duplicated the release preview
(`.../release/preview?format=bundle`, which stays the one live path), and the
frontend's Export Latest was sending `include=all` and getting 400.
`format=bundle` now rejects `include` explicitly so a caller who asked for
workflow tiers never mistakes a members-only bundle for the preview they
requested; `state` is gone from the OpenAPI spec.
Workbench tier entries now carry `type` and `x_mitre_version`, and the
relationship-change preview resolves relationships only (no supporting
objects or LinkById targets). This lets the frontend stop downloading the
entire object catalogue on every release preview.
Tracks gain an optional alias: a URL-safe slug stored on the registry under
a partial unique index and accepted on every `:id` route. An Express
`router.param('id')` resolver rewrites an alias to the canonical track ID
before any handler runs, so services only ever see canonical IDs and an
unknown alias is a 404 rather than a stray collection name. Aliases are set
at creation or through `POST /:id/meta` (`null` clears); an alias-only
update does not clone a snapshot. Workbench snapshot responses and registry
entries carry `alias`.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Release-track bundles no longer discover objects through relationships: a relationship ships only when both of its endpoints are members of the same track. Content whose endpoints can never share a domain track is therefore unpublishable, and nothing surfaced it. `GET /api/reports/domain-consistency` lists the latest revisions of active relationships whose source and target objects share no `x_mitre_domains` value (with the latest endpoint objects and their domains) and the latest revisions of active domain-bearing objects that declare no domain, plus counts. Endpoints are evaluated at their latest revision, so adding the missing domain in a new revision clears the finding. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…etagging Protect virtual dependencies, publish retag hashes atomically, recover interrupted updates, and validate destructive confirmation under the release lock.
Persist validated schedule replacements without cloning snapshots and expose active schedules to configuration clients.
…ng-ui feat(release-tracks): support virtual schedule updates
Include recorded component snapshot metadata in virtual snapshot history summaries. Document exact source versions, creation timestamps, filters, and contribution counts in OpenAPI and user documentation, with regression coverage.
Merge feat/rollback-tagged-snapshot while preserving virtual scheduling and snapshot composition provenance already present on beta. Resolve the TODO conflict by retaining both implementation records and record merge checks. Validation: 84 focused tests; full suite passes (2 OpenAPI, 22 config, 1037 API, 29 middleware, 10 scheduler); lint passes. An intermittent HTTP 404 passed in isolation and on the complete rerun.
Add confirmed release-to-draft conversion and restore guarded draft deletion. Preserve source drafts, composition provenance, dependency checks, and release serialization.
Record the approved responsive header layout, timestamp metadata treatment, and regression verification while preserving unrelated provenance work.
Persist creation causes and invoking users, distinguish standard release creation, and expose safe creator metadata through snapshot GETs.
Normalize Markdown table padding and separator widths without changing content.
Filter duplicate groups in MongoDB before fetching full relationships, limit endpoint lookups to their latest revisions, and consume results through a batched cursor. Add history and lifecycle regressions and document remaining response-size limits.
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## next #496 +/- ##
==========================================
+ Coverage 80.16% 81.12% +0.95%
==========================================
Files 242 245 +3
Lines 38167 39356 +1189
Branches 4646 4820 +174
==========================================
+ Hits 30597 31926 +1329
+ Misses 7483 7342 -141
- Partials 87 88 +1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
🎉 This PR is included in version 4.20.0-beta.30 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 4.21.0 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Features
• Release Track tabs changed to "Board", "Releases", and "Config".
• The ability to delete release tracks is moved to the bottom of the Config tab.
• Metadata for the x-mitre-collection object emitted in STIX 2.1 bundles is now more steerable. Users can select the publishing identity (created_by_ref), collection markings (which appears in the collection's object_marking_refs list), collection ID, and the collection's created timestamp. The latter two cannot be changed after the first snapshot is persisted because it would break the provenance/lineage of snapshots. We hope this will make the x-mitre-collection object less opaque to Workbench editors..
• The publishing identity can optionally be set to inherit from the organization/global identity. Otherwise, users can select from any available STIX identity in the object library..
• Similarly, the collection marking can be set to inherit from the organization/global marking definition. Otherwise, users can select from any available marking definition in the object library..
• Users can now configure custom aliases for their release track ID which maps to a valid URL slug. For example, rather than reach the release track via /api/release-tracks/release-track-${uuid}, users can set alias to something like defense-team and route to the track via /api/release-tracks/defense-team..
• The snapshot cards visible on the Releases tab have been visually overhauled..
• The user workflows for creating snapshots is more simpler and more intuitive. For standard tracks, the "preview and release" button as well as the "create draft" button have been removed. We realized that these were unnecessary because the Workbench automatically creates a new draft whenever a change occurs — now, that draft is always shown at the top of the Releases tab, and it's marked accordingly with a label that says "latest". Thus, users need not think about creating standard track snapshots. Instead, they just need to think about whether and when the latest (draft) snapshot is ready to be tagged and released. For virtual tracks, the "create draft" button still exists..
• Each snapshot card now shows which user identity was causally associated with its creation..
• Each snapshot card now shows the causal operation that triggered the snapshot to be created. For example, "candidates added" indicates that a draft was created as a result of a new candidate being added; "scheduled snapshot" indicates that a snapshot was created through the track's cron-based scheduling mechanism; etc..
• The frontend now fully supports configuring virtual track cron schedules..
• Users can now convert snapshots between tagged and draft status..
• Users can delete draft snapshots. Guardrails exist to ensure that delete operations do not result in fragmented snapshot lineages..
• Users can now change the semver release value of a tagged snapshot after the tagging operation..
• In all such cases where the x-mitre-collection object may be effected, the STIX 2.1 SHA-256 hash will be recomputed..
• Two new data quality dashboards have been added: "Cross-Domain Relationships" and "Objects Without Domains"..
Bugs
• Various bugs were resolved effecting the accuracy of snapshot graph provenance. In some cases, data leaks were occurring whereby unreleased objects in the staged tier were being observed in emitted STIX bundles. These issues have been resolved..
• Fixed an issue with the "Duplicate Relationships" dashboard function that was causing the backend to crash when the Data Quality page was opened.