All notable changes to the ACM Node.js Framework will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fast mode planner context carry-over (
@ddse/acm-planner): whenskipThinking=true(viaACMPlanRequest.fastMode), Stage 2 Emit now receivescontext.factsdirectly in the prompt when Stage 1 analysis is unavailable. This preserves build/discussion context in fast planning while keeping phased planning behavior unchanged.
- Fast planning mode (
@ddse/acm-framework,@ddse/acm-planner):ACMPlanRequest.fastModeskips the planner's Stage 1 "thinking" LLM call and goes straight to structured plan emission. Cuts planning latency roughly in half — useful for narrow/append goals where full analysis is unnecessary. Default:false(thinking enabled).@ddse/acm-planner@0.5.3:PlannerOptions.skipThinkingguards the thinking stage.@ddse/acm-framework@0.5.5: SurfacesfastModeonACMPlanRequestand passes it through asskipThinkingto the planner.
- Deterministic capability filtering for planning (
@ddse/acm-framework):ACMPlanRequestnow accepts an optionalcapabilitiesarray. When provided, the planner uses the supplied capabilities instead ofcapabilityRegistry.list(), enabling callers to scope plan generation to a specific artifact-type subset. This is essential for role-based DDSE workflows where only a subset of registered capabilities should be considered (e.g., only developer capabilities during an append-to-plan pass).
Broken publish — workspace:* dependencies were not resolved. Use 0.5.4.
- Browser crypto compatibility: Replaced all Node.js
cryptomodule imports (createHash) with a universaluniversalDigest()function that uses dynamicrequire('crypto')in Node.js and FNV-1a 128-bit hashing in browser environments. This fixes the Vite "Module crypto has been externalized for browser compatibility" error that caused blank screens in Electron renderer.acm-sdk:nucleus.ts,context.ts— replacedcreateHashandBuffer.byteLengthwith browser-safe alternatives.acm-runtime:ledger.ts,tool-envelope.ts— replacedcreateHashwithuniversalDigestimported from@ddse/acm-sdk.
- Nucleus round caps enforced:
maxQueryRoundscapped from default 25 to 3; newmaxRetrievalRounds: 1added. Prevents runaway LLM loops where the model keeps requesting retrieval indefinitely. - Preflight/postcheck hooks disabled: Prevents per-task nucleus preflight calls (up to 25 rounds each) that saturated local LLM servers and froze the UI.
universalDigest(input: string): string: New export from@ddse/acm-sdk— cross-platform hash function with Node.js SHA-256 primary path and FNV-1a 128-bit browser fallback. Used internally for ledger digests, context refs, and prompt deduplication.hash.tsmodule: New source file inacm-sdkimplementing the universal digest with dynamic Node.js detection to avoid Vite static analysis.
NucleusConfig.maxQueryRoundsdefault changed from 25 to 3.NucleusConfig.maxRetrievalRoundsadded (default 1) — removes the retrieval tool after the cap is hit, forcing the LLM to answer with available context.ContextBuilderandInternalContextScopeImplnow useTextEncoderfor byte-length calculation instead of Node.jsBuffer.MemoryLedger.computeDigest()andcomputeDigest()in tool-envelope now delegate touniversalDigestfrom@ddse/acm-sdk.
0.5.1 - 2026-02-14
- Nucleus built-in context tools:
query_context(list, read_fact, read_augmentation, read_assumptions, read_artifact) andrequest_context_retrievalauto-injected into every LLM call. - Token budget enforcement:
NucleusConfig.maxContextTokens— callLLM loop estimates cumulative prompt tokens viaestimateTokens()and forces a final answer when usage exceeds 85%. - estimateTokens(text): Exported heuristic token estimator with code-aware char/token ratios.
- NucleusInvokeResult.metrics: Reports
rounds,estimatedPromptTokens, andbudgetExhausted. - Anti-hallucination prompt grounding: GROUNDING RULES, VALIDATION RULES, and GROUNDING CONSTRAINT directives across all prompt stages.
- Task scope filtering:
taskScopeon resumable executor restricts DAG execution to a subset of tasks with early-break optimization. - Configurable query rounds:
NucleusConfig.maxQueryRounds(default 25). - ExternalContextProviderAdapter: Bridges Nucleus retrieval directives to developer-registered tools with auto-promotion.
- ContextBuilder / InternalContextScopeImpl: Fluent context construction with
sizeBytestracking and widened provenance type. - Planner context provider:
contextProvideronPlannerOptionsfor mid-planning context hydration. - Two-stage planner: Thinking + Emit stages for improved plan quality.
- describeType() catalog hints: Context snapshots show type metadata instead of raw JSON dumps.
- Comprehensive test suites: 56 tests (acm-sdk), 13 tests (acm-runtime).
- Provenance type widened with
[key: string]: anyfor production compatibility. - Context snapshot renders catalog with type hints instead of full payloads.
- All prompt templates include ## CONTEXT TOOLS guidance sections.
ACMFramework.execute()now acceptstaskScopeand passescontextProviderto planner/executor.
- Token estimation uses heuristic char/token ratios; for production precision, integrate a tokenizer.
- CLI consolidation (
@ddse/acm-cli) is planned; use package-specific CLIs for now.
0.5.0 - 2025-10-06
- Phase 4 completion for Node: Nucleus contract available across planner/runtime; structured planner tool-call envelopes; expanded replay bundles with Nucleus inferences and policy transcripts.
@ddse/acm-frameworkorchestration helper wiring nucleus, planner, runtime, and adapters with a single API.
- Docs updated to reflect Nucleus availability in Node v0.5.0 and remove "in progress" phrasing.
- CLI consolidation (
@ddse/acm-cli) is planned; use package-specific CLIs for now. - Adapter resumability: LangGraph/MSAF checkpoint/resume path emits warnings; improvements targeted in the next release.
- Ledger enrichment: Additional audit fields (phase/decision for Nucleus inferences, full LLM params, canonical digests) are planned enhancements; current behavior is functional and will be extended without breaking changes.
0.1.0 - 2025-01-XX
-
@ddse/acm-sdk: Core types and abstract classes
- Tool, Task, CapabilityRegistry, ToolRegistry abstracts
- Goal, Context, Plan, TaskSpec, LedgerEntry types
- PolicyEngine and StreamSink interfaces
- DefaultStreamSink implementation
-
@ddse/acm-runtime: Plan execution engine
- executePlan() with full ACM v0.5 semantics
- Guard expression evaluation
- Retry logic with exponential/fixed backoff
- Memory ledger (append-only decision log)
- Policy pre/post hooks
- Verification assertion support
- Streaming progress updates
-
@ddse/acm-llm: LLM integration
- OpenAICompatClient for OpenAI-compatible APIs
- Streaming token generation support
- Ollama and vLLM presets
- Zero external dependencies
-
@ddse/acm-planner: LLM-based plan generation
- StructuredLLMPlanner for Goal → Plan-A/B generation
- Context reference computation (SHA-256)
- Safe fallback on parsing errors
- Streaming support
-
@ddse/acm-examples: Demo and samples
- Complete CLI application
- Sample tools (search, entity extraction, risk assessment, refund, notifications)
- Sample tasks (simple, multi-tool, complex workflows)
- Two example scenarios (refund flow, issues mitigation)
- Concrete registry implementations
- Simple policy engine example
- CLI renderer with beautiful output
- Comprehensive README.md with quickstart and API reference
- CONTRIBUTING.md with development guidelines
- GETTING_STARTED.md with step-by-step tutorial
- IMPLEMENTATION_SUMMARY.md with complete overview
- PUBLISHING.md with npm publishing guide
- Package-specific READMEs for all packages
- CHANGELOG.md (this file)
- pnpm workspace monorepo setup
- TypeScript with strict mode and composite projects
- Unified build/clean/dev scripts
- .gitignore for clean repository
-
ACM v0.5 Compliance: Full specification implementation
- Context lifecycle with content-addressable refs
- Plan alternatives (Plan-A and Plan-B)
- Deterministic guard evaluation
- Task contracts (idempotency, retry, verification)
- Policy enforcement hooks
- Memory ledger for decision tracking
- Streaming for real-time feedback
-
Developer Experience
- Code-first approach (no YAML/JSON authoring)
- Simple, intuitive APIs
- Working examples out of the box
- Comprehensive documentation
- Easy to extend and customize
-
LLM Integration
- Works with local LLM providers (Ollama, vLLM)
- Streaming token generation
- Safe fallback when parsing fails
- Provider-agnostic design
-
Execution Features
- Deterministic plan execution
- Guard-based branching
- Retry with exponential backoff
- Policy authorization gates
- Verification assertions
- Real-time streaming updates
- Complete audit trail
- Guard expressions use JavaScript eval (not sandboxed)
- No advanced DSL for guards or verification (code-first approach)
These features are planned for future releases:
- OPA/Rego policy integration
- JSONLogic verification DSL
- Advanced guard expression grammar
- Distributed tracing support
- Performance benchmarks
- Cloud provider integrations
- Performance optimizations and benchmarks
- Additional example workflows
- Advanced error handling and recovery
- OPA/Rego policy integration
- JSONLogic verification DSL
- Advanced guard expression grammar
- Distributed tracing
- Cloud provider integrations
- Visual workflow designer
- Production-ready stability
- Complete documentation
- Enterprise features
- Repository: https://github.com/ddse-foundation/acm
- ACM Specification v0.5: ../../spec/acm-spec%20v0.5.md
- Issues: https://github.com/ddse-foundation/acm/issues
- Discussions: https://github.com/ddse-foundation/acm/discussions