Changelog
Version history across all UluOps packages.
For the latest versions, see the version badges on individual SDK pages.
July 2026
PDL v1.4.0 — July 11, 2026 (convergence hardening)
Both extensions come straight from the first live convergence run (aristotle-convergence on sdk-core, 4 iterations):
- Stall exit —
stall_iterations(default 2) +on_stall: after N consecutive iterations applying zero mechanical fixes, the loop exitsUNCONVERGED/exit_reason: stalledrather than burning remaining budget on a score that cannot move. A stalled exit is a success of triage — the loop has cleanly separated machine-fixable from human-gated. - Tracker no-save contract —
tracker.suppress_agent_saves(default true) injects a no-save instruction into every loop-stage agent prompt; postflight is the single owner of run persistence (the live run surfaced an investigator autonomously saving its own orphaned sub-run). Executor exception: issue-level updates on pre-existing issues stay allowed. convergence.exit_reason(converged|max_iterations|stalled|user_pause) in the postflight namespace; validator rule 7 warns when the stall window can never fire.- definition-factory 0.46.0 / udl CLI 0.17.0;
aristotle-convergence1.1.0.
PDL v1.3.0 — July 11, 2026 (convergence loops)
- New pipeline-level
convergenceblock — the first executable loop construct in the definition languages. Designatedloop_stagesre-execute until a score gate passes (aggregate of gate-stage agent scores ≥ threshold) ormax_iterationsis reached. The gate evaluates immediately after the gate stages complete — fresh-score exit, no wasted fix cycle.UNCONVERGEDis a first-class outcome; post-loop stages (synthesis) run on both exit paths. Carry-context injects prior-iteration findings, dispositions, and fix summaries into loop-stage prompts. - definition-factory 0.45.0 / udl CLI 0.16.0 — schema + six semantic validation rules (loop-stage existence, gate subset, no gate-stage conditions, min ≤ max, no post-loop dependencies, advisory-gate warning) + convergence-protocol rendering in generated pipeline runbooks.
- First consumer:
aristotle-convergencepipeline — Aristotle validator/analyst/forecaster trio ∥ → finding-investigator → executor, looping to average ≥ 95 (max 5 iterations), post-loop synthesis. - Enforcement boundary documented: enacted by the harness PDL executor (
/pipelines:run);@uluops/coreparses but does not yet enforce the loop.
Docs — July 10, 2026 (cognitive-lens findings)
A four-lens blank-slate analysis (Confucius explorer + analyst, Wittgenstein analyst, Socrates explorer) was run against this site; the actionable findings are folded in:
- Fingerprinting: the
categorydouble role is now stated honestly.categoryis both a fingerprint input (identity-bearing) and the taxonomy-distribution axis — a reclassification moves the distribution and breaks issue identity (phantom resolved+new pair). The previous "distribution is robust even if fingerprints drift" claim is scoped to title/path drift, and the unmeasured category-reassignment rate is flagged as an open question. - Executor ↔ oversight reconciled. The first executor agent is live (
executor, general-purpose fix applier), and both the agent-types and Recursive Appreciation pages now state the scope boundary that keeps executor autonomy compatible with the external-judgment requirement: mechanical fixes are autonomous, judgment-bearing findings surface as PARTIAL, validators re-check, humans keep resolution-labeling authority. - RAH statistics get a drift guard. The corpus-pinned research figures (FP rates, verifiability cliff, convergence stats) now live in a canonical manifest (
lib/rah-stats.json) with an invariant test against the page — the same protection class the homepage method count received. - Spec-version freshness is now mechanical. A new invariant test asserts each spec page's
meta.versionmatches the newest schema copied from definition-factory, closing the one hand-sync seam all three Confucian layers converged on. - Taxonomy falsification test refined. The cross-domain portability test now distinguishes a mode gap (software-derived mode vocabulary not yet ported — extend, don't refute) from domain failure (annotators can't agree on STR/SEM/PRA/EPI at all — the actual refutation signal).
- "Status" disambiguated in-band. A callout on the Definitions page names the four distinct
statusstate machines (definition, issue, model, scan) and thedeprecatedtrap — the same treatmentvalidationalready had. - Agent-type maturity table refreshed to July 2026 registry counts (74 validators, 92 analysts — now the largest type, 41 forecasters, 25 explorers, 8 generators, 1 executor; 556 published definitions total).
Docs — July 10, 2026 (metrics + reference catalogs)
- Ecosystem metrics refreshed to July 2026 90-day windows on Validation, Failure Taxonomy, Fingerprinting, and Recursive Appreciation: 14,471 classified issues in-window, 238 active agents, 104 tracked projects. Notable shifts vs the March snapshot: SEM overtook STR as the largest failure domain, and the EPI share grew 9.8% → 13.7% — the predicted effect of cognitive-lens agents becoming a substantial share of runs. Regression stats now use the tracker's current issue-level shape (5 of 5,229 resolved regressed, 0.10%); RAH-derived percentages remain pinned to the hypothesis document's April 2026 corpus and are labeled as such.
- SDK reference catalogs audited against live exports: core gains the Root Helpers group (
parseRef,classifyDecision,buildVocabularyMap,resolveDecisionCategory,deriveCompleteness); sdk-core gains streaming (requestStream/getStream),isRedirectError, and the integrity-hash utilities; ops-sdk gains the Session group plusgetAgentRunsAnalysis,getAgentLifecycle,getByMetric,getAvatar; registry-sdk gainsisVerdictTrustworthyunder Safety Helpers.
Docs — July 10, 2026
- New: Definition Safety concept page. The publish-time risk analysis system — sync scan vs deep analysis, risk levels (deliberately no
lowtier), the evidence-not-capability design principle, the version-scoped risk profile shape, and the trust contract (scanStatus: 'failed'anddeep.status: 'error'sentinels; gate rendering onisVerdictTrustworthy). - PDL page: Runtime Enforcement section. Stage gates (enacted as of core 0.32.0, abort-by-default), stage output forwarding, opt-in
steps:execution, and condition semantics. - Version catch-up: package badges, SDK/CLI reference catalogs, and MCP tool tables brought current (core 0.32.0, registry-sdk 0.43.0, ops-sdk 5.7.0, sdk-core 0.15.0, cli 0.23.0, ops-mcp 49 tools incl.
update_profile).
core v0.32.0 — July 10, 2026
- PDL stage gates are now enacted.
gate.on_failure: aborthalts the pipeline,warncontinues with a warning, andon_success: skip_remainingearly-exits — previously gate blocks were parsed but never read, so hard build gates silently auto-passed. Skipped downstream stages report why (gate_abort/gate_skip/gate_early_exit). - Integrity pins reachable from every execution entrypoint.
runCommandaccepts pins inoverrides;runWorkflow/runPipeline/startPipeline/runaccept trailing pin options. Pins verify fail-closed on every return path, including registry-cache hits.
cli v0.23.0 — July 10, 2026
- Integrity pins on every exec surface.
--hashis accepted byexec run,exec command,exec workflow, andexec pipeline(previouslyexec agentonly);--prompt-hashbyexec runandexec command. Pins verify the resolved definition fail-closed before anything executes and refuse with exit code 4 on mismatch. - Deep-analysis errors are named at both consumer surfaces.
ulu def getprints "Deep analysis failed (reason) — could not determine" instead of a clean rendering;exec agentemits a pre-run "verdict is sync-only" advisory for sync-clean definitions whose deep audit errored. - Ambiguous-name hints now name commands that exist (the typed
exec <type> <name>subcommands, with the actual name filled in).
registry-sdk v0.43.0 — July 10, 2026
isVerdictTrustworthyis now deep-aware: returnsfalsewhendeep.status === 'error', so a sync-clean definition whose background deep analysis errored no longer reads as trustworthy-clean.deep: null(pending/skipped/legacy) stays trusted.
core v0.31.0 — July 8, 2026
- Pipeline stages forward upstream results into downstream agents' prompts. Inline-agent stages with
depends_onreceive an## Upstream Analysissection (decision, score, summary, top recommendations from each dependency). Producer-sideforward: auto|none|full, consumer-sidereceives: auto|none; deterministic size caps (8K/stage, 32K total). Kill switch:ULUOPS_DISABLE_STAGE_FORWARDING=1.
core v0.30.0 — July 8, 2026
- Custom-vocabulary negative verdicts now gate pipelines. Stage progression is decided on the vocabulary-resolved decision category (so EXPOSED, BEWITCHED, or a WDL-remapped BLOCK fails a stage like FAIL does), propagated as
decisionCategorythrough every aggregation site. Vocabulary maps cannot remap core-register strings (CWE-345 guard).
ops-sdk v5.7.0 / ops-mcp v0.9.2 — July 8, 2026
save_runcorrelation is nullable: idempotent replay of a pre-correlation run returnscorrelation: null(counts not stored, not fabricated). ops-mcp conflict errors now carry cause-specific guidance (name collision vs idempotency reuse vs soft-deleted tombstone).
registry-sdk v0.40.0–0.42.0 / registry-mcp v0.3.0–0.3.2 — July 7, 2026
- Safety-verdict trustworthiness surface (0.42.0):
RiskProfile.scanStatus+scanFailedReason,DeepAnalysisResult.status+errorReason, and theisVerdictTrustworthy(profile)predicate — a failed scan'saggregateRiskLevel: 'none'is a sentinel ("could not determine"), not a clean verdict. - Provenance-aware quality analytics (0.40.0–0.41.0): effectiveness carries
metrics.provenance(independent vs self-reported quality split, voter counts, provisional-until-3-actors confidence); headline numbers are voter-weighted (one actor, one vote); agentpassRateis nownull(participation-based quality) rather than a fabricated rate. registry-mcp passes the provenance block through and documents the semantics in tool descriptions.
cli v0.22.0–0.22.3 — July 2–7, 2026
- A failed safety scan no longer renders as "clean" (0.22.3):
def getprints "Safety scan incomplete (reason) — could not determine";execemits an incomplete-scan advisory before running (suppressible via--no-safety-warnings). - Security-event warnings (0.22.0): blocked upstream redirects (possible MITM), rejected credentials, and failed token refreshes surface to stderr on every ops/registry/core client.
core v0.29.0–0.29.1 — July 7, 2026
- Engine execution of PDL
steps:blocks — opt-in (ULUOPS_ALLOW_STAGE_STEPS=true, default off), sequential shell steps honoring the full PDL contract (timeouts, retries,continue_on_error,expect_match, per-step env) with hardened confinement (secret-class env scrubbed, loader-var overrides rejected,working_dirrealpath-contained). - Condition-expression evaluator: per-agent and per-stage
conditiongating overparams.*andstages.*paths; absent params evaluatefalse(agents gated on an unset param no longer dispatch on every run). - Steps-only stages no longer fabricate
score: 100; stages with no executable content fail loud instead of auto-passing.
ops-sdk v5.3.0 / ops-mcp v0.8.0 — July 2, 2026
- Status-change
reasoncap widened 500 → 1000 chars (matching the API'sstatus_historycolumn).agent_idprovenance field on run agent entries followed in 5.5.0 / ops-mcp 0.9.0.
Docs — July 8, 2026
- New: Export Your Data guide. Covers all three tracker export shapes — single-dataset streaming, whole-project ZIP bundles, and asynchronous whole-organization export jobs — with the paid-tier/publisher-role posture, the
manifest.jsonshape, insert-level coherence, and the job lifecycle (queue → poll/email → download; 72 h retention).
June 2026
core v0.25.0–0.27.0 / sdk-core v0.14.0 — June 26–28, 2026
- Structured security-event channel (core 0.27.0 / sdk-core 0.14.0):
onSecurityEventconfig hook receives typed events (auth_failure, redirect_rejected, token_refresh_failed, credential_swap); sdk-core hardens redirects (RedirectErroron cross-origin) and rejects credentials embedded inbaseUrl. - Token accounting fixes (0.25.1–0.26.0): Google thinking tokens no longer double-counted in
total_effective_tokens; cached input is tracked separately (cached_input_tokens) and subtracted from effective totals;harnessfield identifies the executing harness on metrics. - Semantic analysis record IDs (0.25.0):
recordIdlimit raised 20 → 100 chars so namespaced IDs survive instead of being hashed.
Docs — June 17, 2026
- New:
@uluops/coreSDK reference. Full reference for the execution engine —UluOpsClientand its 18 methods across Execution (runAgent,runCommand,runWorkflow,runPipeline,run,startPipeline), Convenience (validate,security,optimize,ship,postImplementation), Discovery (list,describe,clearCache), and Submission & History. Includes constructor configuration, subpath exports (/types,/errors), and per-method response types. - MCP install instructions. The ops-mcp and registry-mcp pages now show
npm install @uluops/ops-mcp/npm install @uluops/registry-mcp, and their.mcp.jsoncommandvalues now match the bins those packages ship (uluops-ops-mcp/uluops-registry-mcp).
setup v0.8.0 — June 7, 2026
- Multi-target install: one invocation, every detected harness.
--all-detected(or--harness all) installs into every detected stable harness in a single run;--harness claude-code,codexinstalls into a comma-separated subset. Interactive multi-detection uses a checkbox prompt with every option checked by default — the "install everywhere" case is a single Enter press. - Per-target failure isolation: one harness failing does not abort the others. Each per-harness pipeline runs in its own try/catch; failures land in a per-section summary block with
✓ / ⚠ / ✗ / ⊘status icons and aRe-run: npx @uluops/setup --harness <name>hint. - 4-tier exit-code classifier: CI scripts wrapping
--harness allonly fail on operational errors (EACCES, ENOSPC, etc.). User-rejected conflict prompts no longer poison the exit code. --uninstall --harness <name>filter: symmetric to install. Subset uninstall removes only the named harnesses, preserves shared infrastructure (@uluops/cli,@uluops/agent-metrics, shell-profile export), and updates the manifest in place. Unknown harness in the filter fails fast with a helpful error listing what IS in the manifest.--verifypartial-install warning: when a previous install hit a partial-state error (post-MCP step threw), verify surfaces the warning + re-run hint so you know how to recover.- Full Codex harness implementation: TOML
mcp_serverswrite/read/remove + skills install path. Status remainsexperimental(excluded from auto-detection; opt in with--harness codex). - Non-interactive runs preserve today's first-detected behavior to keep CI scripts predictable.
May 2026
ADL v1.16.0 — May 10, 2026
- Tightened:
forecastsection forbidden on non-forecaster agent types (validator, executor, analyst, generator, explorer) via"forecast": falsein the schema's allOf rules. Previouslyforecastvalidated for all types but only the forecaster template rendered it, causing silent absorption — the field passed validation but vanished from output. Discovered by the Bateson pipeline (FD-1). - Non-breaking: no existing definitions used
forecaston non-forecaster types.
ADL v1.15.0 — May 9, 2026
- Added Machiavelli cognitive lens suite (analyst, forecaster, explorer, validator)
- Strategic Terrain composition (Sunzi + Machiavelli + Seneca) now fully operational
- Pipeline definitions fully supported across all definition languages
cli v0.5.0 — May 21, 2026
- Command aliases:
ulu p(projects),ulu r(runs),ulu i(issues),ulu a(analytics),ulu x(exec) - Usage examples on all 17 command groups via
--help - Help shown after every error — no more guessing syntax
- Polished subcommand descriptions across 14 commands
- Suppressed dotenv v17 tip noise via
@uluops/sdk-core0.10.1
ops-sdk v1.4.0 — May 6, 2026
- Added
highpriority level for findings - Multi-model execution support (Claude, GPT, Gemini, Qwen)
- Full billing and tier-gating integration
- 86 methods across all namespaces
registry-sdk v0.16.1 — May 2026
- Format param on
versions.diff() VersionFieldDiff/VersionUnifiedDifftypes- Batch publish support
- Fork lineage and dependency graph APIs
sdk-core v0.5.0 — April 2026
- Unified schema validation
- Extraction confidence scoring
- Semantic deduplication improvements
@uluops/core v0.9.0 — April 2026
- MIT open-source release (thin client architecture)
- DAG executor for pipeline orchestration
- Prompt hash attribution (3-axis: definition, translator, model)
- Trade secret remediation (secrets removed from package)
Tracker MCP — 48 tools (May 2026)
- Full taxonomy analytics (
get_full_taxonomy_analytics) - Agent lifecycle and reliability tracking
- Run archiving and diff capabilities
- Burndown and velocity analytics
Registry MCP — 44 tools (May 2026)
- Batch publish and batch user management
- Execution stats and webhook recording
- Translation analytics and model sync
- Fork lineage and ecosystem overview
April 2026
Database Consolidation — April 29, 2026
- Consolidated 3 databases to 1 unified MySQL instance
- Eliminated 2 HTTP bridge services
- Added real foreign key constraints (previously application-enforced)
- 50 tables unified under single connection pool
Multi-Target Architecture — April 30, 2026
- ADL → IR → target adapter pattern shipped
- 4 adapters: Claude Code, OpenCode (GPT/Qwen), Gemini CLI, generic
- Definitions are now model-agnostic by design
@uluops/tier-gate v0.1.1 — April 11, 2026
- Full access control migration complete
- Tier-based definition gating (free/pro/enterprise)
@uluops/analytics — April 10, 2026
- Extracted from tracker API as standalone package
- 423 tests, tier gating active
- Health scores, trend analysis, agent reliability metrics
March 2026
ADL v1.13.0 — March 24, 2026
- Added
epistemic_natureobject to agent interface with three independent axes:verifiability(mechanically_checkable, expert_judgment, not_checkable),determinism(deterministic, stochastic, environment_dependent),claim_type(factual, normative, observational) - Supports empirical analysis of agent effectiveness across epistemic categories
- 100 agent definitions backfilled with classifications
- Extracted RAH service to standalone package (
@uluops/rah-service)
ops-sdk v0.1.5 — March 4, 2026
- Added bulk status update operations
- Added validator reliability analytics
- Fixed pagination cursor handling
sdk-core v0.1.1 — March 3, 2026
- Added rate limit header parsing
- Fixed retry logic for 429 responses
registry-sdk v0.2.1 — March 2, 2026
- Added fork lineage tracing
- Added definition rendering API
- Fixed hash verification for YAML normalization
cli v0.1.0 — February 2026
- Initial release
- 10 command groups
- Interactive and non-interactive authentication