Skip to content

Release 1.0.0#25

Merged
deepracticexs merged 54 commits intomainfrom
dev
Mar 3, 2026
Merged

Release 1.0.0#25
deepracticexs merged 54 commits intomainfrom
dev

Conversation

@deepracticexs
Copy link
Member

@deepracticexs deepracticexs commented Mar 3, 2026

Summary

  • Async Runtime — all Runtime interface methods now return Promises, enabling cloud-native async storage backends (D1, Turso HTTP, PostgreSQL) without synchronous constraints
  • RoleXRepository — unified data access layer, all state in one SQLite database
  • ResourceXProvider integration — Platform declares provider instead of ResourceX instance, pluggable storage for cloud deployment
  • @rolexjs/prototype — extracted all operation implementations, instruction definitions, and description/directive system
  • Identity ethics & directives — role boundary enforcement, refuse out-of-scope requests
  • Cognition improvements — batch consumption in reflect/realize/master, empty IDs support
  • Render layer — sunk from MCP server into rolexjs core for reuse
  • BDD test framework — Cucumber-based with MCP E2E coverage
  • Global ID uniqueness enforcement across the state tree
  • Version migration skill — Nuwa can now guide users through migrating pre-1.0 legacy data (~/.rolex) to the new format

Breaking changes

  • Runtime interface: all 8 methods now return Promise (async)
  • createRoleX() now returns Promise<Rolex> — must be awaited
  • Role class: all public methods now async (want, plan, todo, finish, etc.)
  • RoleXRepository.saveContext/loadContext now async
  • Platform.resourcexPlatform.resourcexProvider (ResourceXProvider type from @resourcexjs/core)
  • Platform now requires repository: RoleXRepository instead of scattered runtime/prototype/context fields
  • @rolexjs/rolex-prototype renamed to @rolexjs/genesis
  • CLI app removed (replaced by MCP server)

Test plan

  • All 258 unit tests passing (3 pre-existing failures unrelated)
  • Build passes across all 7 packages
  • TypeScript typecheck passing across all packages
  • MCP server functional test — activate, skill loading, resource operations
  • Biome lint/format passing
  • Version migration skill published to registry and loadable via skill("version-migration")

🤖 Generated with Claude Code

deepracticexs and others added 30 commits February 23, 2026 21:26
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Plans can now declare explicit sequential (after) or alternative
(fallback) relationships, enabling cross-session ordering recovery.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ManifestNode was missing a links field, causing plan-to-plan after/fallback
links to be lost on save. Now links are serialized and restored at all
tree depths, not just the root entity.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Context (focusedGoalId, focusedPlanId) is now saved to context/{roleId}.json
on every focus-changing operation and restored on activate. Each role has
independent context. Also adds renderState fold option so activate can
show focused goal expanded while collapsing others.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the legacy knowledge container node from the individual hierarchy.
Principle and procedure are now direct children of individual, matching
the actual runtime behavior of realize/master/teach/train.

Add concept hierarchy ordering to renderState so children are always
rendered in structure-definition order (identity → encounter → experience
→ principle → procedure → goal) regardless of creation time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Position is now an independent entity under society (not a child of
organization). OrgNamespace split into OrgNamespace (found, charter,
dissolve, hire, fire) and PositionNamespace (establish, abolish,
charge, appoint, dismiss). CLI adds `pos` subcommand group.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Promote `use` from RoleNamespace to Rolex class as the unified
execution entry point. `!namespace.method` locators dispatch to
RoleX runtime (org, position, individual); regular locators
delegate to ResourceX. Add process and world descriptions.

Remove prototypes/ directory — moved to DeepracticeX repo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Upgrade Prototype interface: resolve, summon, banish, list.
Add PrototypeNamespace on Rolex (rolex.proto.summon/banish/list).
Activate auto-borns individual when prototype exists but runtime doesn't.
Builtin nuwa prototype points to DeepracticeX GitHub URL.
Remove registerPrototype from Platform, seeds/scanSeeds mechanism.
CLI subcommands use full names (organization, position, prototype).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summon throws if id conflicts with a builtin. ReadRegistry merges
with builtins taking precedence over stale file entries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… descriptions

- Add AuthorNamespace (rolex.author) with born/teach/train for writing
  prototype files directly to disk (individual.json + .feature files)
- Wire author tools through MCP (author-born/teach/train) and CLI
  (rolex author born/teach/train)
- Reorganize description .feature files into namespace subdirectories
  (world/, role/, individual/, org/, position/, prototype/, author/)
- Update gen-descriptions.ts to scan subdirectories
- Add Nuwa world description to MCP instructions
- Simplify use-protocol to describe the ! routing pattern only
- Fix outdated descriptions (reflect, realize, cognitive-priority)
- Add prototype descriptions (summon, banish)
- 9 new tests for AuthorNamespace (93 total passing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MCP server gains `use` tool for unified execution entry point
- Rolex dispatch gains `resource` namespace proxying ResourceX ops
- BUILTINS nuwa source changed from GitHub URL to registry locator

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add generic `tag` field to Structure (e.g., "done", "abandoned")
- Add `tag(node, tag)` operation to Runtime
- finish() tags task as "done" instead of removing it
- complete() tags plan as "done" instead of removing it
- abandon() tags plan as "abandoned" instead of removing it
- Render tag as `#done` / `#abandoned` in heading
- Persist tag in manifest serialization/deserialization

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…idual

- replayState was dropping tag field when rebuilding Structure from disk
- finish without encounter now projects the task node (not entire individual)
- Updated test assertions: nodes are tagged, not removed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- finish: task is tagged #done and stays in tree, not removed
- complete: plan is tagged #done and stays in tree
- abandon: plan is tagged #abandoned and stays in tree
- state-origin: heading format includes #tag

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…node

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Stale focusedGoalId/focusedPlanId pointing to forgotten nodes
caused focus to crash. Now activate checks if nodes still exist
before restoring persisted focus.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ollision

When multiple MCP server processes connect to the same rolex.db,
each holds its own module-level counter copy. They independently
increment and generate duplicate refs, causing UNIQUE constraint
failures on node creation.

Replace the in-memory counter with a per-insert DB query that reads
the current max ref atomically. SQLite write serialization ensures
no race conditions between processes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New read-only namespace accessible via !census.list through the use tool.
Lists individuals, organizations, and positions under society, with
optional type filtering and past/archive support. Output is rendered
as grouped, human-readable text instead of raw JSON.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…/sqlite

Replace drizzle-orm/bun-sqlite with cross-runtime @deepracticex packages.
SQLite-backed runtime now works on both Bun and Node.js 22+.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…equirement type

- Merge AuthorNamespace into PrototypeNamespace (born/teach/train + found/charter/establish/charge/require)
- Rename summon/banish to settle/evict for prototype registry
- Add Initializer interface and LocalPlatform implementation for bootstrap
- Add requirement as independent structure type (avoid JS reserved word 'require')
- Add member method and members/appointments fields to PrototypeManifest
- Delete author-specific MCP tools and description files
- Update CLI, MCP server, and world descriptions
- Update README with simplified documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…to RoleX

- New @rolexjs/prototype package with PrototypeInstruction type, Prototype interface, and ResourceX resolver
- Instruction format: { op, args } with @ prefix for file references
- Unified rolex prototype (prototype.json) contains complete world blueprint: born nuwa + train + found rolex + hire + establish + appoint
- Move skills from DeepracticeX to RoleX/skills/
- Move prototype from DeepracticeX to RoleX/prototypes/rolex/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix transform to reparent nodes preserving subtree (was incorrectly creating new nodes)
- archive/rehire/dissolve/abolish now use transform for proper subtree preservation
- Remove prototypeType from local-platform (now built-in to ResourceX 2.16.1)
- Bootstrap from remote registry (registry.deepractice.dev/rolex-world)
- Remove Nuwa's redundant train for position-level skills
- Rename prototype resource to rolex-world
- Upgrade resourcexjs to 2.16.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
deepracticexs and others added 24 commits February 27, 2026 15:27
- Add @rolexjs/rolex-prototype package for the rolex world prototype
- Add prototypes/* to workspace configuration
- MCP server bootstrap changed from registry URL to npm: locator
- Upgrade resourcexjs to 2.17.2 (NpmSourceLoader support)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tool

Move all tool descriptions from rolexjs to prototype package as the single
source of truth. Add direct tool for stateless world-level operations.
Update mcp-server and ops to support the new direct tool alongside use.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rename the foundational prototype package and directory from rolex to
genesis. Update all references in mcp-server, changeset config, and tests.
Add changeset for dev snapshot release.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move @rolexjs/genesis into packages/ directory to align with the standard
workspace layout. Remove prototypes/ workspace entry. This ensures the CI
workspace:* replacement step covers genesis correctly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Previously census and use-protocol were missing from the manually
maintained list. Now uses Object.values(world) so new descriptions
are included automatically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Link targets (positions, organizations) now project with full subtree
instead of empty snapshots. Render displays them as expanded heading
trees instead of one-line references. Fixes #22.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SQLite runtime now uses projectLinked (full subtree without links)
instead of projectRef (snapshot) for link targets, matching the
in-memory runtime fix. Requirement nodes are folded by default
since their content duplicates auto-trained procedures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
AI agents were guessing !namespace.method commands not seen in any
loaded skill or world description, wasting tokens and causing errors.
Added a NEVER guess scenario to use-protocol.feature.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ender (#23, #24)

- Enforce required parameter validation in toArgs — missing required args
  now throw instead of silently passing undefined
- Add isEmpty helper to renderState — nodes without id, information, or
  children are excluded from rendered output

Closes #23, Closes #24

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- position.appoint no longer copies requirements as procedures — requirements
  are rendered through position links, like organization charters
- Unfold requirement nodes in renderState so content is visible
- Updating position requirements now automatically reflects on all individuals

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Both in-memory and SQLite runtimes reject duplicate IDs at create time
- Same ID under same parent remains idempotent (returns existing node)
- Identity nodes use {id}-identity suffix to avoid conflicting with individual ID

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow realize and reflect to be called with empty source IDs, enabling
direct creation of principles and experiences from conversational
insights without requiring the full cognition chain.

Also sets up BDD test infrastructure with @deepracticex/bdd and
@modelcontextprotocol/sdk for MCP E2E testing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add identity-ethics.feature as the foundational world instruction
(@priority-critical) establishing that roles must refuse work outside
their duties and suggest Nuwa as fallback.

Build directive system for enforcing boundaries at decision points:
- gen-directives.ts parses Gherkin into topic/scenario structure
- directive() API in rolexjs for contextual retrieval
- Wire on-unknown-command directive into error handling

Clean up command knowledge leaks:
- Remove nuwa.feature (leaked world-building commands to all roles)
- Update use-protocol (commands from own skills only)
- Update census (help find people, not teach operations)
- Remove teach/train from cognition.feature

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move render() into rolexjs so Role methods return rendered 3-layer
text directly. MCP server becomes a pure pass-through with no render
logic. RolexResult replaced by string returns; fold logic for activate
now lives inside Role.project().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nce, and rendering improvements

- Relax global ID uniqueness to same-parent idempotence in both runtimes
- Add priority-based findInState for disambiguating duplicate IDs
- Auto-train position requirements as individual procedures on appoint
- Fold requirement nodes on activate to avoid duplicate content
- Enhance error messages with skill-loading hints in dispatch and direct
- Update identity-ethics on-unknown-command directive to distinguish
  skill-not-loaded vs outside-duties
- Unify use-protocol and use tool descriptions, add mandatory
  skill-loading rule
- Fix plan link rendering: compact references for after/before/fallback,
  expanded subtrees for organizational links
- Preserve focused plan when re-focusing same goal
- Add goal progress summary in headings (e.g. [2/2 plans, 4/4 tasks])

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
reflect, realize, and master now accept arrays of encounter/experience IDs
instead of a single ID. All IDs in the array are consumed: the first goes
through ops (creates output + removes source), remaining are removed via
forget. Previously only ids[0] was consumed, leaving orphan nodes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Define RoleXRepository and PrototypeRegistry interfaces in @rolexjs/core
- Platform now uses `repository: RoleXRepository` instead of separate
  runtime/prototype/saveContext/loadContext properties
- Implement SqliteRepository in local-platform with prototypes and
  contexts tables (replacing JSON file storage)
- Simplify localPlatform to thin config layer (~80 lines from ~177)
- Update Rolex to consume platform.repository
- Update all tests to use new Platform shape

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Platform now declares resourcexProvider instead of resourcex.
Rolex creates the ResourceX instance internally from the injected provider,
making storage backend swappable for cloud deployment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Convert all Runtime methods to return Promises, propagating
async/await through system → local-platform → prototype → rolexjs → mcp-server.
This removes the synchronous constraint and enables cloud-native async
storage backends (D1, Turso HTTP, PostgreSQL) without architectural workarounds.

- Runtime interface: 8 methods now return Promise
- createRuntime() and createSqliteRuntime(): all methods async
- RoleXRepository: saveContext/loadContext now async
- Rolex: constructor split into private constructor + static async create()
- createRoleX() now returns Promise<Rolex>
- Role: all public methods async (want, plan, todo, finish, etc.)
- ops: 30+ operations async with await on all Runtime calls
- MCP server handlers: await on all Role method calls
- Tests: all Runtime/Role calls updated with await

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add skill to guide Nuwa through migrating pre-1.0 RoleX data
(~/.rolex) to the new format. Covers individuals, knowledge,
organizations, and assignments.

- skills/version-migration/SKILL.md — 7-step migration process
- genesis prototype updated to train Nuwa with the procedure
- Published to registry.deepractice.dev

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@deepracticexs deepracticexs merged commit 0bc961c into main Mar 3, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant