23 of 26 closed · 3 open
View issues on GitHubRoadmap
What ships next
The next release of each product, read from its GitHub milestones every hour. Open ones come first; closed ones sit below, collapsed.
26 open issues across the repositories, read from GitHub every hour
1 of 1 closed · 0 open
View issues on GitHub1 of 5 closed · 4 open
View issues on GitHub0 of 1 closed · 1 open
View issues on GitHub0 of 11 closed · 11 open
View issues on GitHub28 of 29 closed · 1 open
View issues on GitHub9 of 11 closed · 2 open
View issues on GitHub0 of 3 closed · 3 open
View issues on GitHub8 of 9 closed · 1 open
View issues on GitHubNo issues yet
View issues on GitHubClosed milestones (35)
No issues yet
View issues on GitHub1 of 1 closed · 0 open
View issues on GitHub8 of 8 closed · 0 open
View issues on GitHub2 of 2 closed · 0 open
View issues on GitHub2 of 2 closed · 0 open
View issues on GitHub10 of 10 closed · 0 open
View issues on GitHub9 of 9 closed · 0 open
View issues on GitHub4 of 4 closed · 0 open
View issues on GitHub8 of 8 closed · 0 open
View issues on GitHub10 of 10 closed · 0 open
View issues on GitHubNo issues yet
View issues on GitHub2 of 2 closed · 0 open
View issues on GitHub11 of 11 closed · 0 open
View issues on GitHubNo issues yet
View issues on GitHub7 of 7 closed · 0 open
View issues on GitHub21 of 21 closed · 0 open
View issues on GitHubNo issues yet
View issues on GitHub26 of 26 closed · 0 open
View issues on GitHub14 of 14 closed · 0 open
View issues on GitHubNo issues yet
View issues on GitHubNo issues yet
View issues on GitHub149 of 149 closed · 0 open
View issues on GitHub27 of 27 closed · 0 open
View issues on GitHub6 of 6 closed · 0 open
View issues on GitHub8 of 8 closed · 0 open
View issues on GitHub14 of 14 closed · 0 open
View issues on GitHub5 of 5 closed · 0 open
View issues on GitHub6 of 6 closed · 0 open
View issues on GitHub15 of 15 closed · 0 open
View issues on GitHub1 of 1 closed · 0 open
View issues on GitHub49 of 49 closed · 0 open
View issues on GitHubNo issues yet
View issues on GitHub10 of 10 closed · 0 open
View issues on GitHub8 of 8 closed · 0 open
View issues on GitHubNo issues yet
View issues on GitHubHow to read a big number
A milestone holding a lot of open issues is a bucket, not a plan. Work is filed against the release it is not blocking, so the far milestones collect anything that is real but not next. The nearest milestone for each product is the one being worked.
Due dates are the ones set on the GitHub milestone, not typed here. A milestone past its date shows as Overdue.
Decisions (37)
D1The event-sourced flag belongs to the content type NAMEimplemented
22 Aug 2026
Rules out
storing the flag on the content type document.
Wrong if
content type names stop being the stable identity for content. If types are ever keyed by id with a mutable display name, this moves to that id.
D2An event-sourced type may not hold non-Public fieldsimplemented
22 Aug 2026
Rules out
documenting the erasure limitation and relying on operators to respect it; tombstone-and-rebuild; crypto-shredding.
Wrong if
crypto-shredding gets built. Then the restriction can be lifted for types that use it.
D3Event-sourced types use expected-version concurrencyimplemented
22 Aug 2026
Rules out
matching last-write-wins everywhere for API consistency.
D4The event stream is internal, and nothing may leak it through the APIaccepted
22 Aug 2026
Rules out
returning raw events from the history endpoint, or adding an event-type discriminator
to VersionResponse.
D5Events carry when they happenedimplemented
22 Aug 2026
Rules out
deriving the document's timestamps from Marten's IEvent.Timestamp at rebuild time;
tolerating the drift.
D6Every write to content goes through one writerimplemented
21 Aug 2026
Rules out
endpoints appending events and storing documents themselves.
D7A rebuild test must not compare against a stored documentimplemented
22 Aug 2026
Rules out
the obvious version of the test.
D8Backfills must make a partial run visibleopen
22 Aug 2026
D9Erasure is a configured mode, and a mode that cannot deliver is refused at startupimplemented
30 Aug 2026
Rules out
picking one mechanism for everyone, and letting an operator change mode freely.
Wrong if
If content turns out to hold personal data in
the ordinary case rather than the exceptional one, the default is backwards: CryptoShred should be
the default and Delete the opt-out. The signal to watch is what customers actually model in their
first content type.
D10An unverified self-registration is not an account, it is a pending rowimplemented
1 Sep 2026
Rules out
The obvious alternative, and the one the issue suggested: keep creating the
user and carry an EmailVerified flag, then refuse login (or issue a restricted session) until it
is set. That was rejected.
Wrong if
If the address ever stops being the join key, if
external sign-in matched on a provider subject id recorded at first link instead, then a flag on
User would be enough and the pending row would be ceremony. That is a better design for the
external providers anyway (an address can change hands), and if it is ever built, this decision is
the one to revisit.
D11Authorisation is enforced in the application; the database enforces tenancy onlyimplemented
2 Sep 2026
Rules out
the database-first backend shape. No PostgREST-style layer that maps HTTP straight onto SQL, no per-end-user Postgres role, no row-level security carrying business rules, and no browser holding a database connection.
Wrong if
If BarakoCMS ever grows a path where an untrusted client talks to Postgres directly (a realtime subscription, a published read replica, an embedded SQL surface for customers) then the database is the only boundary that exists on that path and the answer flips. The signal to watch is a feature request for direct data access that does not go through the API.
D12Scheduled is a real content status, not a condition derived from a dateimplemented
2 Sep 2026
Rules out
Leaving it derived, which is what the admin does today: a draft with a
non-null ScheduledPublishAt is shown as scheduled by whoever is looking at it. That keeps the write
path and the sweeper untouched and needs no migration, and it was the cheaper answer.
D13The client is a hand-written base plus generated slices, and we do not write the generatorunspecified
18 August 2026
Rules out
Writing the client by hand, which is where this started. It reads well and
it drifts, and every module author has to be talked into contributing to it. Also ruled out:
generating the whole thing, which produces one ApiClient class with every method on it and none of
the ergonomics, and is the reason "generated clients are unpleasant" is a fair objection to the
naive version of this.
D14The delivery API is not versioned in the URL; it follows the package versionunspecified
4 September 2026
Rules out
A version segment in the URL (/api/v1/public), a version header, or a
version query parameter. FastEndpoints supports all three and the issue named the URL form as the
most legible and the easiest to cache, which is true.
Wrong if
A second consumer class with a long upgrade
cycle, such as a native app store review queue, that cannot take a breaking change on the notice
window and cannot pin the package version it talks to. If that appears, the door is still open:
adding a v2 prefix later breaks nothing, while removing one that exists would.
D15The queue owns retry, and an enqueue rides the request's sessionimplemented
4 Sep 2026
D16Document types get expected-version concurrency too, and 4.0 is the only free momentimplemented
5 Sept 2026
Rules out
leaving document types on last-write-wins indefinitely, which is what D3 accepted as an interim state; adding this after the 4.0 tag.
Wrong if
the 3.x upgrade path stops mattering, in which case the flag defaults to true immediately and there is no interim.
D17A money value stays a number; currency and rounding live on the field definitionaccepted
5 Sept 2026
Rules out
storing money as { "amount": 1200, "currency": "PHP" }.
Wrong if
a single field genuinely has to carry its own currency and a sibling field cannot express it. No requirement seen so far needs that.
D18What module authors are promised, and what they are notaccepted
5 Sept 2026
Rules out
inviting outside module authors while the only route to a projection is a hook we have
announced we are deleting; changing an extension point without a deprecation window; treating
MODULES.md as covering the module contract when it covers only part of it.
Wrong if
modules stop being a supported extension point and become an internal implementation detail, in which case none of this is owed to anybody.
D19Durable execution stays ours, and a workflow definition stays dataaccepted
9 Sept 2026. Superseded in part by D32
Rules out
a first-party Temporal module; a second durable execution engine shipped in core alongside the runner and the queue; wholesale replacement of the runner by a module, as opposed to per-definition routing; a workflow definition that can express iteration or recursion; treating Temporal Cloud as a supported deployment target for anything BaryoDev ships.
Wrong if
workflow definitions stop being documents and become code that developers write, compile and deploy. Then output binding, versioning and determinism replay all become real problems rather than avoided ones, and the calculus inverts completely. Also wrong if a single deployment ever needs concurrent runs at a volume where a Postgres-polling runner cannot keep up, which is a different argument from any made here and should be made with numbers.
D20Where a developer extends, and where they do notaccepted
11 Sept 2026. Superseded in part by D22
Rules out
Brew plugins. Business rules in the renderer. A console screen that only one deployment can use. Modules written for something a workflow already does.
D21It runs wherever containers run, and BaryoVM is one option rather than the pathaccepted
11 Sept 2026
Rules out
Positioning this as a self-hosting product. That is a smaller market and a weaker argument, and it is not even accurate. The position is that you own the software and choose how much of the operating you want to do.
D22A site is configuration; developers extend with plugins; rules go to workflows before modulesaccepted
14 Sept 2026
Rules out
Per-site forks of barakoPress. press.config.ts literals for identity. Site
specific code in a client repository. A module for something a workflow can do.
Wrong if
A site that cannot be expressed as blocks and settings without bending the block model out of shape. rckoronadal.org, baryo.dev and barakocms.com are the three tests (#722); if one of them needs site code, the ladder needs another rung, not an exception.
D23BaryoVM is the one deploy engine: VMs first, then Azure and AWS container platformsaccepted
14 Sept 2026
Wrong if
A cloud target whose deploy cannot be driven from its own CLI without BaryoVM holding a long-lived credential. That target stays the cloud pipeline's job.
D24The engines stay MPL-2.0; everything built on them is MITaccepted
14 Sept 2026
Wrong if
A module or client needing an engine file under MIT to be usable at all. MPL-2.0 permits use in closed products, so that should not happen; if it does, it is a reason to revisit D24, not to copy the file.
D25A tenant is a data boundary, not a siteaccepted
15 Sept 2026
Wrong if
A deployment where units share data rather than processes. That is one tenant with permissions, not several tenants.
D26Every setting, secret and operation is either per tenant or per deployment, never neitheraccepted
15 Sept 2026
D27The API owns the site model; barakoPress renders itaccepted
15 Sept 2026
D28A module declares itself once, and is enabled per tenantaccepted
15 Sept 2026
D29The API is the only home of schema, rules and dry runaccepted
15 Sept 2026
D30A content type is a versioned schemaaccepted
15 Sept 2026
D31A principal is an identity plus a membership per tenantaccepted
15 Sept 2026
D32Wolverine runs durable work, behind seams barakoCMS ownsaccepted
15 Sept 2026
Wrong if
The spike in #687 failing on transactional enqueue, conjoined tenancy or migrations. Then the seams stay and the implementation stays ours.
D33Content varies by language per field, not per entryaccepted
15 Sept 2026
D34Frameworks stay behind the contracts others build on, and are used directly inside coreaccepted
15 Sept 2026
D35The package contract is an assembly, not a paragraphaccepted
20 Sept 2026
D36No configured origins outside Development means no cross-origin accessaccepted
20 Sept 2026
D37A workflow keeps an action's outputs by allowlistaccepted
12 Oct 2026