Releases: cyberuni/cyberplace
Release list
cyberplace@0.2.3
Patch Changes
-
ca8f9ab: Ship the
cyberplace/tavernentry point.exports["./tavern"]resolves to
src/tavern/plugins.ts, butfileslisted onlybin,distandgovernances, so the
file was never in the tarball and the subpath 404'd for every consumer outside this
workspace. In-repo callers resolved through the workspace link, which is why it went
unnoticed.src/tavernis now packed.Also releases the tavern source resolution landed in the plugin extraction: a
git-subdirmarketplace entry rendered asnpm:undefinedbecause the resolver
understood onlystringandnpmsources. It now resolves those to the owning repo's
directory URL.
cyberfleet@0.0.6
Patch Changes
- ca8f9ab: Depend on the published
cyberlegion@^0.3.1instead of the workspace copy.cyberlegion
was extracted to its own repository, so theworkspace:*link no longer exists and the
runtime dependency now resolves from the registry.
cyberplace@0.2.2
Patch Changes
-
e75f4a0: Fix stale
npxversion pins in the readmes.The documented pin-to-an-exact-version examples cited versions that were never
published —cyberplace@0.7.0andcyberfleet@0.1.0return E404 — so anyone
copying them got a hard failure.cyberlegion@0.1.0resolved but was two minors
behind. Each now cites the current published version.
cyberlegion@0.3.1
Patch Changes
-
e75f4a0: Fix stale
npxversion pins in the readmes.The documented pin-to-an-exact-version examples cited versions that were never
published —cyberplace@0.7.0andcyberfleet@0.1.0return E404 — so anyone
copying them got a hard failure.cyberlegion@0.1.0resolved but was two minors
behind. Each now cites the current published version.
cyberfleet@0.0.5
Patch Changes
-
e75f4a0: Fix stale
npxversion pins in the readmes.The documented pin-to-an-exact-version examples cited versions that were never
published —cyberplace@0.7.0andcyberfleet@0.1.0return E404 — so anyone
copying them got a hard failure.cyberlegion@0.1.0resolved but was two minors
behind. Each now cites the current published version. -
Updated dependencies [e75f4a0]
- cyberlegion@0.3.1
cyber-sdd@0.2.1
Patch Changes
-
405b8de: Spec discovery no longer descends into a nested checkout.
The filesystem walk was guarded by a name blocklist —
node_modules,.git,dist,.turbo,
.next,coverage. A name list can say "this is called X"; it cannot say "this is where the tree
stops". A nested git checkout is a full copy of the repository inside the repository, and nothing
stopped the walk from descending into one, so every spec in the corpus was discovered once per
nested checkout.The guard was also one level off from where it was needed:
.gitwas already in the blocklist, so
the walk skipped the metadata directory while descending straight into the checkout that
directory marks.Agent harnesses that isolate work in a git worktree check the repo out inside itself, which is how
this surfaced: seven such worktrees turned a 10-spec corpus into 38 discovered spec files. The loud
symptom wascheck-project-specsfailing with "packages/xis claimed by 8 specs — a project has
exactly one spec", breakingpnpm verify. The quiet symptom was worse:check-suite,
concept-index,check-scenario-overlap,check-spec-structure, and the formation Warden all
reported green over a corpus nearly 4x duplicated. A guard passing over a corpus nobody has is worse
than one that fails.Discovery now skips any directory that is itself a checkout — one carrying its own
.git, whether a
directory (a clone) or a file holding agitdir:pointer (a worktree or a submodule). Both
forms matter: guarding only on the directory form would miss the worktree case that caused this.The rule is structural rather than a name, so it also covers submodules, vendored clones, and
whatever the next harness invents, without naming any of them. A directory that merely resembles a
checkout by name but carries no.gitof its own is still part of this tree and is still scanned.All three walk sites are guarded: the fixed-convention scan, the
**any-depth expansion behind
extra anchors, and the<project>glob frontier.
cyber-sdd@0.2.0
Minor Changes
-
3b8b39a: The
## Use Casessection now carries actor, goal, and extensions — not just entry points.A use case was defined as an entry point: one row per way the capability is invoked, given as
trigger / inputs / outcome and named to its implementation surface. That definition had stood since
the section was introduced. It never drifted; it was narrow from the origin.The requirements-engineering definition is actor + goal + main success path + extensions — the
alternate, error and divergence paths. Extensions is where "what can go wrong for this actor" and
"which of these inputs may be combined" live, and a trigger / inputs / outcome row has nowhere to
put any of it. The practical cost: a spec could satisfy the bar completely and still carry no
analysis of why each element of a designed surface exists, what breaks it, or which combinations
are valid. A judge would then confirm the section existed and each row mapped to a scenario, and
pass it — coverage of what is present cannot detect what should not be present.What changes for spec authors:
- Use cases are enumerated by actor, never by entry point. Walking the interface returns only
the use cases that interface already implies, and is structurally blind to the one nobody built.
List the actors first — including whoever is affected by the outcome without invoking it — then
their goals, then map goals to entry points. Both mismatches are findings: a goal no entry point
serves, and an entry point no listed goal reaches. The enumeration is checkable in both
directions. On a backfill, source yields only the served use cases by construction, and an
inferred set is never reported as complete. - A use case carries four parts — actor / goal (one line each, not a persona), the entry point
(trigger / inputs / outcome, unchanged), and its extensions. An extension is any path from
the trigger that does not reach the success outcome, stated with its cause and outcome. The
recurring kinds (refusal, error, boundary, partial result, contended or absent input) are a
prompt to search with, not a closed set. extensions: none — <why>is written explicitly when a use case has no divergence, so the
claim is contestable rather than silently absent.- Every element of the public surface traces to a use case that needs it — each flag, option,
parameter, prop, or event names the use case requiring it and the elements it may not be combined
with. An element no use case needs is an orphan: cut it or name the use case. This is the same
orphan-detection discipline as## Scenario map, one level up. - Degenerate surfaces stay cheap. A capability with one entry point and no optional elements
records the trace in a line, never a table — the obligation is that nothing on the surface is
unaccounted for, not that a table exists.
The three spec-gate actor bars each take a duty in their own domain rather than a shared copy:
Oracle rules cut-or-justify on unbought surface and treats an actor or goal that restates the
mechanism as an unanswered Why; Builder requires every stated extension to be a
path in the control-flow graph, so the graph supplies the scenario rather than the prose, and judges
extensions: noneas a claim; Architect requires the graph to reach every stated extension,
since an extension with no edge is a dangling branch read from the prose side. Oracle
additionally grades the actor enumeration in both directions.The CFG remains the single source scenarios derive from. Extensions are a discovery
instrument, not a parallel specification: a graph drawn from an implementation reproduces what the
code already does and can never say a branch is missing, whereas asking what can go wrong for this
actor finds it. So an extension earns its scenario by being a path in the graph — never by being
drawn from the stated list, which would make the suite 1:1 with that list by construction and
unable to surface a hole. A use case is therefore not 1:1 with a scenario.Existing specs are not swept — the restored shape applies to new and revised nodes, so no
in-flight change inherits a bar its node has not adopted. Backfilling the existing corpus one node
at a time is tracked separately. - Use cases are enumerated by actor, never by entry point. Walking the interface returns only
cyberplace@0.2.1
Patch Changes
- 09ae959: Direct universal-plugin governance requests to the standalone
universal-pluginpackage.
cyberlegion@0.3.0
Minor Changes
-
82b3c24: BREAKING — the spawn wake now carries the brief instruction, and the SessionStart hook no longer
injects a brief.unit spawn's first-turn doorbell used to be content-free ("Your brief is loaded in context — read it and begin work.") because the peer's brief was injected into its context by the peer's own
mail hookSessionStart branch. That made brief pickup depend on a hook firing in the child — in the
child's harness, with the hub's hook correctly installed — none of which the spawning side can
observe. When the chain broke, the peer was woken and told to read a brief that was not there.The doorbell is now the instruction itself, naming the brief's file path: read your brief at
<path>, then begin work. The brief is still written to its file and still never typed into the
pane, so the wake stays one bounded line however large the brief is.What changes for consumers:
spawnAndWakeis the composed operation to reach for — it spawns the peer AND delivers its first
turn, deriving the doorbell's brief path from the record it just wrote.spawnalone still opens a
peer that sits idle, brief unread.mail hooknever emits a## Your briefsection, on the first call or any later one.- The
spawningagent status is retired —unit spawnregisters a peeractiveoutright, since
nothing flips it any more. A record migrated from an older hub may still carryspawning; reads
preserve it verbatim and never coerce or normalize it. (unit registerstill assertsactive, as
it always has — that is an explicit re-registration, not a read normalizing a value.) --no-wakechanged meaning without changing its flag: previously no turn, brief auto-loaded; now
no turn and brief unread on disk. A caller driving the first turn itself must convey the path.
Supersedes ADR-0027; see ADR-0032.
Note for readers of the 0.2.0 entry: it describes the first-turn doorbell as waking a peer
whose "brief is injected into context by its own SessionStart hook". That was accurate when it
shipped and is what this release retires — the hook injects no brief, and the wake names the file.
cyberfleet@0.0.4
Patch Changes
- Updated dependencies [82b3c24]
- cyberlegion@0.3.0