QJ//PUBLIC RELEASE LEDGER

Changes agents
can rely on.

A reviewed projection of product changes. Internal hosts, credentials, operational paths and private configuration never enter this surface.

VERSION0.27.2
RELEASED2026-09-13
STATUSproduction-bounded-query-and-public-mcp
PUBLIC SOURCEALLOWLISTED

VERSION.yaml + CHANGELOG.md

Release history

69 REVIEWED RELEASES

CURRENT

v0.27.2

  • Enforce the canonical `product:agents` entitlement together with the existing least-privilege `agents:*` operation scopes on every authenticated product boundary.
  • Recheck the product entitlement before durable task execution and publish the complete product-plus-operation contract through OAuth, OpenAPI and A2A discovery.
  • Add an explicit, audited dry-run/apply migration for existing local OAuth clients and a fail-closed, temporary legacy-token bridge for controlled production rollout.

ARCHIVE

v0.27.1

  • Separate managed, reviewed public-data and caller-supplied-data execution gates so an exposed URL cannot activate a mixed or licensed product.
  • Reopen only reviewed public-source products and transient caller-data computations while the managed-data product boundary remains suspended.
  • Publish the exact live subset through OpenAPI and x402 discovery, with regression coverage for MCP tool execution, credentials and product classification.

ARCHIVE

v0.27.0

  • Add transient caller-supplied daily price and simple-return matrices to thirteen history-dependent portfolio tools, with strict bounds, point-in-time validation and no hidden source fallback.
  • Route matrix preparation through QJ Data MCP to QJ Analytics, then reuse existing QJ Risk and Analytics calculations without adding a second data backend or local financial engine.
  • Add a dedicated caller-data execution gate so these computed products can run while managed public-data routes remain disabled; REST/A2A authentication and x402 prices are unchanged.
  • Publish a Finance MCP caller-data resource and examples for authorized QJ Data MCP, attached files and other authorized connectors; retain only source metadata and a deterministic input hash, not the raw matrix.
  • Project managed source implementation labels as `QuantJourney` on every public REST/A2A and MCP response while preserving `caller_supplied` provenance.

ARCHIVE

v0.26.2

  • Mark factor exposure partial when Fama-French observations are stale relative to the requested portfolio price window, and expose the exact lag.
  • Make production deployment verification recognize intentional maintenance mode without weakening its internal registry and health checks.

ARCHIVE

v0.26.1

  • Fail closed when any requested portfolio position lacks aligned price history; never rescale a covered remainder into a misleading complete portfolio result.
  • Add benchmark tracking statistics, factor-model quality and freshness, industry exposure, 30-day event windows, signal-score semantics and explicit drawdown/window metadata.
  • Distinguish sample from model covariance in optimization, historical from independent Monte Carlo VaR and Gaussian from empirical-bootstrap simulation metadata.
  • Present nearest earnings consensus first, quarantine suspect range dispersion, flag extreme distant revisions and keep canonical publication dates separate from fiscal period ends.
  • Add stable fact-level lineage for populated company metrics, explicit estimate-population metadata, Treasury curve shape and per-rate overnight-date alignment.
  • Bound all southbound MCP retry attempts by one total timeout so dependency failures cannot double endpoint latency.
  • Preserve maintenance mode and the existing public-data boundary; this release does not enable external MCP or bounded-query execution.

ARCHIVE

v0.26.0

  • Expand the anonymous Finance MCP from 26 to 34 reviewed read-only tools with bounded price history, U.S. company screening, SEC filing deltas, official Form 4 filing activity, FINRA/Reg SHO short-interest context, technical state, market-regime context and stateless pre-trade risk comparison.
  • Add seven independently priced REST/A2A products over the same governed QueryService; the anonymous MCP projection remains zero-price and REST/A2A OAuth plus x402 policy remains authoritative.
  • Keep the release rights- and evidence-bounded: no public 13F ownership, CBOE or ETF products, no filing-prose parser, and no claim that Form 4 transactions are parsed.
  • Preserve statelessness for inline portfolio what-if requests: observed QJ price history is required, no portfolio is persisted and no order is created.

ARCHIVE

v0.25.0

  • Add portfolio performance, Pearson/Spearman correlations, optimization and simulation: 26 anonymous Finance MCP tools and 28 bounded REST products.
  • Offer minimum variance, risk parity and maximum Sharpe optimization, plus reproducible GBM and historical-bootstrap simulations.
  • Execute the new calculations through governed Data MCP and Analytics, rejecting incomplete history and invalid numerical results; preserve free MCP quotas and OAuth/x402 REST policies.

ARCHIVE

v0.24.6

  • Reject unknown MCP argument names with a schema-valid `INVALID_ARGUMENT` artifact and list the supported fields instead of silently ignoring caller input.
  • Select consensus-drift fallback periods by the nearest fiscal period end when no confirmed calendar event exists; fiscal period ends remain distinct from earnings publication dates.

ARCHIVE

v0.24.5

  • Return request-model validation failures from all public Finance MCP tools as schema-valid, non-retryable `INVALID_ARGUMENT` artifacts without reflecting rejected portfolio or identifier values.
  • Resolve a confirmed unknown company through the SEC identity path in parallel with Data MCP reads, allowing a deterministic `symbol_not_found` result to cancel slow upstream work.
  • Generate every public query example, recovery hint and anonymous try form from its canonical request model and route instead of hard-coding the company snapshot payload.
  • Preserve the complete application Content Security Policy at the edge rather than replacing it with the generic frame-only fallback.
  • Keep consensus drift explicit about fiscal period end versus matched publication date, current snapshot source, event identity and conflicting evidence.

ARCHIVE

v0.24.4

  • Fail closed on unknown portfolio scenarios and unsupported public-MCP currencies with a schema-valid, non-retryable `INVALID_ARGUMENT` artifact; custom shocks now select the custom scenario explicitly.
  • Normalize share-class tickers, distinguish unknown companies from transient dependency failures and make SEC legal-name lookup tolerant of punctuation without weakening identity evidence.
  • Keep every advertised company metric present with explicit null/quality semantics, enrich inline portfolio identities with canonical display names only after `asset_id` agreement and retain the source legal name.
  • Reserve `report_date` for a matched canonical earnings publication event, expose provider estimate dates as `period_end_date` and detect conflicting estimates even when a provider assigned different event IDs.
  • Clarify VaR confidence precision, open drawdown episodes and liquidity classifications while preserving fractional liquidation-day estimates.

ARCHIVE

v0.24.3

  • Reconciled earnings calendar, history, consensus and surprise evidence through a canonical earnings-event identifier based on resolved asset and fiscal period rather than a brittle exact date.
  • Preserved report-date and estimate conflicts as evidence, exposed normalized report session/timezone metadata and made the one-day date fallback explicit through match method, date delta and confidence.
  • Renamed the vendor high/low range measure to `range_dispersion_pct`, flags suspicious repeated range values and stopped promoting consensus-drift dates to the authoritative upcoming earnings calendar.

ARCHIVE

v0.24.2

  • Retry one complete read-only Data/API MCP session after a transient 502, 503, 504 or transport failure, while preserving a bounded machine-readable unavailable result when the dependency remains down.
  • Normalize both canonical QJ Risk and legacy QJ Analytics underwater-period shapes, retain trough indices and mark malformed drawdown evidence as a coverage gap instead of reporting an empty successful result.

ARCHIVE

v0.24.1

  • Refresh a rejected internal Data/API MCP service bearer after HTTP 401 or 403 and retry the complete read-only MCP session exactly once.
  • Coalesce concurrent stale-token rejections into one client-credentials exchange without rotating or logging the service API key.

ARCHIVE

v0.24.0

  • Raised controlled Public Finance MCP cold execution to eight globally and four per privacy-safe client fingerprint, with a twelve-second bounded queue.
  • Return overload as a schema-valid unavailable artifact with a retry interval instead of an MCP protocol error.
  • Added Public Finance MCP coverage, cache, latency, tool and geography telemetry to the operator map and daily report.
  • Separated x402 payment challenges from persisted USDC settlements and payer counts in operator telemetry.

ARCHIVE

v0.23.9

  • Normalized the nested QJ Analytics regression result into the public benchmark contract, preserving beta, alpha, annualized alpha, correlation, fit statistics, standard error and observation count without exposing scatter payloads.

ARCHIVE

v0.23.8

  • Preserved the scenario sensitivity definition inside the public methodology block so an agent cannot mistake equal-weight basket sensitivity for market beta.

ARCHIVE

v0.23.7

  • Recomputed earnings-surprise summaries from canonical earnings history whenever the dedicated surprise feed returns no rows, rather than preserving its empty zero summary.
  • Propagated consensus-date conflicts, missing consensus values and repeated dispersion values into machine-readable coverage gaps so earnings-preview status cannot claim complete source quality.

ARCHIVE

v0.23.6

  • Restored machine-usable company growth as comparable-quarter YoY values, with explicit MRQ period semantics, source dates and null preservation when no valid comparison exists.
  • Reconciled earnings evidence by preferring non-null consensus rows, surfacing repeated dispersion values, reusing canonical earnings history when the estimate-surprise feed is empty and using consensus drift as a labelled next-date fallback.
  • Clarified portfolio sensitivity fields so position covariance is identified as beta-to-portfolio and scenario sensitivity is not mistaken for market beta.
  • Routed benchmark computation through the dedicated risk-service identity while keeping public callers outside the internal analytics boundary.

ARCHIVE

v0.23.5

  • Corrected company growth provenance to explicit normalized annual fiscal-year comparisons and enabled its single bounded Data MCP dependency.
  • Made every x402 Bazaar input and output schema self-contained by expanding Pydantic local references before the schema is embedded in payment discovery metadata.
  • Restored the official daily Fama–French source through the risk service so FF5 exposure can run when Warehouse monthly history is too short.
  • Routed benchmark-relative portfolio history through the canonical benchmark contract when company-price identity policy intentionally excludes an ETF such as SPY.

ARCHIVE

v0.23.4

  • Made public-MCP coverage authoritative: semantic data gaps now propagate to the artifact status for company, earnings and portfolio products instead of reporting a misleading complete result.
  • Derived company growth only from comparable normalized annual fiscal periods, de-duplicated conflicting earnings-consensus rows, used consensus drift as an explicitly lower-confidence calendar fallback and surfaced suspicious repeated dispersion values.
  • Enforced the long-only loss floor in portfolio scenarios, clarified beta-to-portfolio and drawdown semantics, preserved fractional liquidity days and added missing portfolio-exposure lineage.
  • Preserved structured factor failure diagnostics and added targeted regression coverage for insufficient factor history, earnings-source misalignment and all corrected portfolio projections.

ARCHIVE

v0.23.3

  • Corrected the A2A Agent Card for the mixed-access product surface: each bounded-query skill now declares its own anonymous or OAuth2 `agents:query` requirement from the canonical `QueryDefinition` registry.
  • Prevented intermediaries from caching MCP protocol responses and made the reconnect guidance explicitly cover both `tools/list` and `resources/list`.
  • Strengthened deployment verification to reject a release unless the live MCP tool list, resource list and manifest `registryRevision` all describe the same deployed process.

ARCHIVE

v0.23.2

  • Added a dedicated high-entropy server-to-server bearer for the four private read-only operator projections used by QJ Cockpit.
  • Kept OAuth client lifecycle actions and operator HTML pages behind the separate primary administrator credential; the Cockpit bearer cannot block clients, rotate secrets or change limits.
  • Added deployment and regression checks for the read-only boundary without changing public MCP, REST/A2A pricing or discovery behavior.

ARCHIVE

v0.23.1

  • Unified the ordered public MCP inventory across `tools/list`, the machine root, Agent Card and `llms.txt`: every surface now declares the same twenty-two anonymous read-only tools and four planning resources.
  • Corrected the obsolete three-tool discovery text and made the channel boundary explicit: public MCP calls are a zero-price preview while all twenty-four canonical REST/A2A products retain their independent OAuth and x402 policies.
  • Added cross-surface regression and production smoke coverage so a future MCP registry change cannot ship with stale machine-discovery documentation.

ARCHIVE

v0.23.0

  • Added two anonymous semantic company tools: a two-to-ten ticker batch snapshot and an aligned company comparison with explicit missing cells. Shared batch reads reduce repeated profile, price and earnings-calendar calls without adding a second backend or changing the REST/A2A surface; company results point agents to the separately governed earnings products.
  • Made company metrics machine-safe by declaring units, period type, field-level dates and quality; company records now carry reusable QJ, SEC and instrument identifiers where available.
  • Compacted the public MCP envelope: successful coverage collapses to one status, only real gaps are expanded, stable boilerplate is omitted and channel cost is unambiguously reported as `costUsd` without canonical payment metadata.
  • Published four static MCP resources for the tool manifest, metric dictionary, coverage/freshness contract and access limits so clients can plan without trial calls.
  • Kept tool-list change notification disabled truthfully. The registry is immutable within a process, deployments restart the stateless endpoint, and clients obtain the new list on reconnect.

ARCHIVE

v0.22.0

  • Expanded the anonymous Streamable HTTP MCP from three to twenty reviewed read-only tools, including earnings evidence, SEC public data, official rates and all twelve stateless inline-portfolio products.
  • Kept every MCP invocation zero-price for preview use while leaving REST/A2A OAuth and x402 prices unchanged; the MCP projection cannot mutate the canonical product registry or its payment policy.
  • Enriched company snapshots with growth, metric-level freshness and quality warnings, and enriched SEC identity results with exchange and retrieval evidence while preserving missing values explicitly.
  • Hardened the public contracts: declared metric units, projected unverified ROIC zeroes as missing, gave earnings and portfolio coverage machine-readable subjects/statuses, added normalization lineage and removed the ambiguous `priceUsd` field from free MCP results in favor of `costUsd`.
  • Added a separate ten-calls-per-tool anonymous daily limit, a four-cold-execution global ceiling, stronger semantic routing boundaries and a 40-prompt evaluation covering every public MCP tool.

ARCHIVE

v0.21.0

  • Added a separate anonymous Streamable HTTP MCP service at `/mcp`, backed by the existing bounded-query registry and QueryService rather than a second data backend.
  • Exposed exactly three existing zero-price, no-authentication tools: company snapshot, SEC company identity and stateless portfolio normalization. OAuth and x402 products remain unavailable through this surface, so MCP cannot bypass their controls.
  • Reused the production Redis daily limits, cache, single-flight locks and global/per-caller capacity controls; the public MCP container does not call databases, providers or internal SDKs directly.
  • Added privacy-bounded per-tool adoption telemetry, an authenticated operator aggregate, strict input/body/host/origin boundaries and MCP protocol/LLM-routing contract tests.

ARCHIVE

v0.20.1

  • Added the narrow Instrument Master read prerequisite for stateless portfolio input normalization; no broader Data, Warehouse or Risk access is granted.
  • Hardened the shared downstream read path: profile batches and stateless risk calculations accept their canonical Data scopes, while ingestion, snapshots, scheduled jobs and mutations remain unavailable.
  • Optimized bounded multi-ticker price reads against compressed Timescale chunks and kept latest-per-ticker limits inside SQL, avoiding timeout-driven empty portfolio histories.

ARCHIVE

v0.20.0

  • Added twelve stateless inline-portfolio products: normalization, exposure, volatility, VaR/CVaR, drawdown, benchmark regression, factor exposure, liquidity, events, signals, scenarios and per-position risk.
  • Kept every product bounded to 25 unique long-only positions in one base currency. Requests do not create a QJ portfolio, raw request bodies are not logged, cache identities are hashed and raw price histories are never returned.
  • Added one free normalization route and eleven OAuth `agents:query` routes priced at `$0.01` through the existing per-resource x402 Base-mainnet boundary.
  • Routed all data and calculations through the exact QJ Data MCP allowlist. Historical products align adjusted-close returns before calling QJ Risk; signals use only precomputed technicals and curated public-record signals, never the generic signal runner.
  • Added point-in-time-bounded, warehouse-only price reads with vendor auto-ingestion disabled, explicit partial-coverage reporting, compact output projections and typed OpenAPI/Bazaar discovery schemas for every product.
  • Aligned the public Agent Card and landing-page count with all twenty-four live queries, and extended the production x402 smoke contract to require all nineteen paid resources.

ARCHIVE

v0.19.3

  • Added a stable, plain-text x402-list ownership-proof route backed by the protected runtime state volume. Only correctly formatted one-time verification tokens are projected; tokens are never baked into the image or source-controlled.
  • Added GET and HEAD smoke coverage plus privacy-safe discovery telemetry for x402-list verification requests.

ARCHIVE

v0.19.2

  • Bounded the latest Treasury curve fetch to the current official feed year and raised the governed MCP timeout to 30 seconds with matching Redis lock margins. This avoids a redundant prior-year download while preserving the same one-record output and least-privilege API scope.
  • Added the materialized government award rollup to the exact Data MCP service allowlist used by the Government Demand Packet; no other Data MCP tool was exposed.

ARCHIVE

v0.19.1

  • Corrected the public release-note projection for the governed QJ API MCP connection; product behavior and access boundaries are unchanged.

ARCHIVE

v0.19.0

  • Expanded the canonical bounded-query registry from four to twelve products with SEC identity, latest filing, compact company facts, GLEIF entity identity, official U.S. Treasury curve, New York Fed overnight rates, SEC filing delta and a government-demand evidence packet.
  • Added a second governed southbound connection to QJ API MCP with an exact seven-tool allowlist and no access to the generic API router.
  • Added per-resource x402 prices from `$0.01` to `$0.25`, while retaining the free SEC identity route and the existing free products. Every paid operation publishes its own amount in OpenAPI and its runtime 402 challenge.
  • Added explicit public-data projections, source notices, freshness, coverage and lineage. Raw provider payloads, unknown fields, direct provider access and SAM.gov opportunity data remain outside these products.
  • Switched the Treasury product to the official U.S. Treasury daily par-yield XML feed and kept the New York Fed informational-use notice attached to overnight-rate artifacts.
  • Added both QJ Data MCP and QJ API MCP readiness checks to deployment activation, with Redis coordination and exact service identities required before bounded execution can start.

ARCHIVE

v0.18.1

  • Classified reads of the ERC-8004 registration document as registry-indexer polling, separate from ordinary agent discovery and unique-agent estimates.
  • Added privacy-bounded request and unique-client estimates per country for ordinary discovery and registry indexers without storing raw IP addresses or User-Agent strings.
  • Updated the private activity map and daily operator report to expose registry polling explicitly instead of presenting repeated indexer reads as many agents.
  • Increased the stable ERC-8004 registration document cache lifetime to one hour while retaining ETag revalidation and a short stale-while-revalidate window.

ARCHIVE

v0.18.0

  • Added an isolated, read-only Base Sepolia identity monitor that checks the exact chain, reviewed Identity Registry deployment, existence of `agentId` 9136, ERC-721 owner and `agentURI` every five minutes without any wallet or signing capability.
  • Added the sanitized identity snapshot to the daily operator email: an ownership, URI or identity drift is `ERROR`, while an unavailable or stale RPC read is `WARNING`; qj-messaging renders the same strict fields in HTML and text.
  • Added the verified registration transaction and block to the public ERC-8004 discovery document and exposed the on-chain handle inline in the A2A Agent Card extension.
  • Documented custody and mainnet promotion controls. A Wallet Secret is rejected from every deployment, `supportedTrust` remains empty, and Reputation/Validation still require independent third-party evidence.

ARCHIVE

v0.17.1

  • Registered the dedicated QJ identity wallet in the official Base Sepolia ERC-8004 Identity Registry as `agentId` 9136 and verified the successful receipt, owner and exact HTTPS `agentURI` emitted by the contract.
  • Promoted the public registration document from prepared state to `registered_testnet`, with the exact on-chain tuple and active service projection; `supportedTrust` remains empty, no self-authored reputation was added and Base mainnet remains separately gated.

ARCHIVE

v0.17.0

  • Added a stable, ETag-enabled ERC-8004 Draft registration document at `/.well-known/agent-registration.json`, with successful GET and bodyless HEAD discovery while the on-chain identity remains truthfully unregistered.
  • Limited the experimental identity to discovery metadata for the public website, A2A Agent Card, QJ API MCP and x402; QJ Data MCP is not advertised, `supportedTrust` is empty and QuantJourney does not publish reputation about itself.
  • Pinned the official Base Sepolia and Base mainnet Identity Registry addresses, made unsupported network/registry combinations fail closed, and kept wallet secrets outside the service runtime; Base mainnet registration requires a separate reviewed approval.

ARCHIVE

v0.16.6

  • Added explicit successful HEAD preflights for `/skill.md` and `/.well-known/x402`, preventing method-error noise from crawlers that inspect compatibility resources before issuing GET.

ARCHIVE

v0.16.5

  • Added a truthful `/.well-known/x402` compatibility manifest that lists only live paid resources and points crawlers back to the authoritative runtime HTTP 402 challenge.
  • Added `/skill.md` as a canonical Markdown compatibility alias for `/llms.txt` and included both new discovery routes in privacy-bounded telemetry.
  • Replaced opaque query `405` and `422` responses with machine-actionable recovery guidance while refusing wrong methods, preserving strict payload validation and never reflecting submitted values.

ARCHIVE

v0.16.4

  • Added the x402 Bazaar discovery extension to the paid Earnings Recap challenge, including a bounded ticker example and explicit public input and output JSON Schemas.
  • Added the canonical public icon URL to the payment resource while preserving the exact `$0.01` Base-mainnet USDC settlement contract.
  • Added a regression proving that the runtime `402 Payment Required` response is directly invocable by x402 discovery clients without exposing backend implementation details.

ARCHIVE

v0.16.3

  • Classified an x402 `402 Payment Required` response as an expected payment challenge instead of a bounded-query client error, so successful paid flows no longer turn the daily service status into `WARNING`.
  • Replaced the plain-text-only activity email contract with strict structured variables rendered by the allowlisted `qj-messaging` operational template, while retaining a complete text fallback.
  • Added a compact visual summary for query health, estimated agents, verified OAuth clients, countries, OAuth/discovery activity, latency and Cloudflare edge state without expanding the privacy-bounded telemetry model.

ARCHIVE

v0.16.2

  • Made the origin the authoritative crawler policy: `robots.txt` permits search and real-time agent input while reserving model-training and full-reproduction rights, without bot-specific `Disallow` rules.
  • Added the same `Content-Signal: search=yes, ai-input=yes, ai-train=no, use=reference` header to exactly the eight canonical indexable HTML representations; machine, OAuth, operator and error responses do not inherit that permissive header.
  • Added a regression and production-smoke boundary for Cloudflare Markdown for Agents readiness without enabling conversion in application code.

ARCHIVE

v0.16.1

  • Added explicit HEAD support for every indexable public page so crawler preflights receive the same `200`, canonical link and `index, follow` boundary as GET; unknown query pages remain `404/noindex`.

ARCHIVE

v0.16.0

  • Replaced the ambiguous global execution flag with two explicit public states: production bounded-query execution and preview-disabled generic A2A task delegation.
  • Limited the A2A Agent Card to the four live bounded-query skills, added its icon, and marked every skill in the full catalog as `available` or `preview`; agent entries now expose their available and preview skill references separately.
  • Added four indexable, mobile query product pages generated from the canonical registry, including exact MCP methodology, request and illustrative response shapes, and a live anonymous Try Free control for Company Snapshot Lite.
  • Pruned unreachable control-plane schemas from public OpenAPI while leaving the complete OAuth/task contract at `/openapi-full.json`.
  • Kept Earnings Recap at exactly `$0.01` USDC through x402 v2 and removed disabled Stripe packs, internal ledger naming and future-language noise from the public pricing document.
  • Classified the production smoke as `system_test` and excluded declared smoke traffic from public product telemetry and daily external-agent totals while retaining it in the private security observatory.

ARCHIVE

v0.15.1

  • Split the root machine contract's bounded-query inventory into the three free routes and the one paid Earnings Recap instead of incorrectly listing every route as free.
  • Generated the public query-page route count from the canonical query registry, which now renders all four active bounded endpoints.
  • Directed agents to call declared bounded query endpoints explicitly while generic A2A task delegation remains disabled.

ARCHIVE

v0.15.0

  • Promoted x402 v2 from the isolated Base Sepolia diagnostic to Base mainnet for exactly one paid research resource: `POST /v1/query/earnings-recap` at `$0.01` USDC.
  • Kept Company Snapshot Lite, Earnings Preview and Congress/Government Signals free; discovery, OAuth and failed handlers remain uncharged.
  • Added canonical OpenAPI `x-payment-info`, runtime HTTP 402 enforcement, a 100-request daily paid limit and response payment metadata generated from the query registry.
  • Made the paid resource fail closed and disappear from public OpenAPI unless the production x402 boundary is active; testnet continues to protect only the diagnostic route.
  • Added a CDP receiver signature-recovery proof and a distinct bounded-funding smoke buyer. Wallet Secret is streamed only to a one-shot VM container and removed immediately afterward.
  • Added a production smoke that validates the exact Base mainnet network, official USDC asset, one-cent atomic amount and receiver before signing, then verifies the settlement receipt and receiver balance increase.

ARCHIVE

v0.14.2

  • Made production and activation smoke checks accept evidence-preserving `partial` earnings artifacts when every required MCP tool completed, while still rejecting unavailable results, missing tools and malformed evidence.
  • Added an internal, non-served lineage map for all four bounded queries, including exact MCP call order, QJ Data routes, Warehouse/data-plane origins, output construction and missing-data semantics.

ARCHIVE

v0.14.1

  • Included the reviewed release source files in the minimal runtime image so `/changelog/` and `/v1/releases/current` start from the same fail-closed inputs in checkout, wheel and container layouts.

ARCHIVE

v0.14.0

  • Added the indexable public `/changelog/` release ledger generated from the reviewed `VERSION.yaml` identity and `CHANGELOG.md` release entries.
  • Added `/v1/releases/current` for agents, with stable schema `qj-agents.release.v1`, canonical links and ETag revalidation.
  • Made the release projection fail closed on source misalignment and expose only an explicit allowlist; nested operational configuration, credentials, hosts and private paths remain outside both public surfaces.
  • Added release discovery links to the root machine document, `llms.txt`, public navigation and the search sitemap.
  • Corrected stale public copy that still described two bounded queries after Earnings Preview and Earnings Recap increased the executable registry to four.
  • Corrected the daily report severity so the intentional `POST /message:send` 503 execution gate is reported separately and no longer turns an otherwise healthy window into `ERROR`; unexpected 5xx responses remain errors.

ARCHIVE

v0.13.0

  • Added an idempotent daily QJ Agents operator report for the previous 08:00-to-08:00 Europe/Warsaw window, scheduled by the existing single worker with restart catch-up.
  • Separated estimated HMAC discovery identities from exact OAuth clients and exact verified query clients; added registrations, token issuance, HTTP outcomes, latency, countries, transport families and the sanitized Cloudflare snapshot.
  • Extended the private OAuth request event with only an allowlisted path, HTTP status, coarse family and country so per-query client counts remain exact without storing IPs, bodies, query strings, tokens or raw User-Agent values.
  • Routed `agents.email.requested` through qj-bus to qj-messaging/Mailtrap with a stable report event ID and durable SQLite delivery ledger. QJ Agents receives no Mailtrap or SMTP credentials.

ARCHIVE

v0.12.0

  • Added the fourth executable bounded query, `POST /v1/query/earnings-recap`, as a free OAuth `agents:query` beta resource for one normalized ticker.
  • Reconciled the latest canonical Warehouse earnings event with consensus, EPS/revenue surprise, post-event estimate revisions, latest price and selected valuation context through exactly eight allowlisted QJ Data MCP reads.
  • Added bounded adjusted-close reactions, SPY-adjusted cumulative abnormal returns and a descriptive single-asset historical event study; the artifact explicitly says that historical analogs are not forecasts.
  • Kept execution to two bounded waves: seven independent tools in parallel, then one asset-ID-bound earnings-history read. QJ API MCP, databases, SDKs and providers remain outside the agent loop.
  • Added strict nested projections that exclude raw price/CAR series, provider endpoints, quality-detail arrays and unknown coverage fields, with regression coverage for missing asset resolution and private-field leakage.
  • Extended the canonical registry, pricing, catalog, public OpenAPI, activation smoke and production smoke from three to four live resources.

ARCHIVE

v0.11.0

  • Added the third executable bounded query, `POST /v1/query/earnings-preview`, as a free OAuth `agents:query` beta resource for one normalized ticker.
  • Built the preview from exactly nine allowlisted QJ Data MCP reads: issuer profile, price, selected valuation metrics, earnings calendar, consensus, surprise history, EPS revisions, estimate dispersion and consensus drift. It makes no QJ API MCP, database, SDK or direct-provider calls.
  • Added a single bounded retry for the central consensus observation only; the other eight calls are never replayed. Partial upstream coverage remains explicit in the shared evidence envelope.
  • Added strict output projections, fixed row limits, per-tool coverage, bounded lineage, review questions and regressions that prevent private or unknown upstream fields from leaking into the public artifact.
  • Extended the canonical query registry, pricing, catalog, public OpenAPI, activation smoke and production smoke from two to three live resources.

ARCHIVE

v0.10.0

  • Added automatic OAuth-client TTL enforcement in the existing single-node worker: system tests expire after 24 hours, never-verified external clients after 7 days and previously verified external clients after 30 days of inactivity; `internal` and `partner` clients are exempt.
  • Made a verified bearer request the only passive renewal signal. Registration, discovery, token issuance and page visits do not renew client TTL; explicit operator reactivation starts a new lifecycle epoch without pretending that verified use occurred.
  • Made expiry an atomic, reversible deactivation: all access tokens are revoked, queued work is cancelled, running work receives cancellation, a durable `client_ttl_deactivated` audit event is written and client history remains intact.
  • Added lifecycle policy, anchor and expiry to the private one-row-per-client admin panel and readiness contract, plus migration and worker-cadence regression coverage.

ARCHIVE

v0.9.0

  • Added a private `/agents/admin/map` globe and `/v1/admin/map` contract with strictly separate verified OAuth, machine-discovery, registration and Cloudflare edge-security layers.
  • Added country-level activity summaries, animated bounded-observation pulses, responsive country evidence, and recent edge ASN samples without exposing OAuth client IDs or creating a raw-IP location store.
  • Made the geographic meaning explicit: country is observed network egress, not a person's location; ASN is available only for the sanitized Cloudflare edge sample and never inferred from retained IP data.
  • Bounded discovery and authenticated-client request event stores to 30 days and the newest 10,000 rows, matching the existing operator request/security privacy boundary.

ARCHIVE

v0.8.0

  • Added a private `/agents/admin/security` observatory and `/v1/admin/security` contract for bounded origin rejections, suspicious-path probes, rate limiting and unexpected server errors.
  • Added a 30-day/10,000-row SQLite security-event boundary with opaque actor keys, coarse client attribution and no raw IPs, request bodies, query strings, authorization headers or full User-Agent values.
  • Added a strict reader for a sanitized Cloudflare Security Events snapshot produced by an isolated qj-observability collector; missing, invalid and stale collector states remain explicit and are never presented as zero activity.
  • Kept the Cloudflare token and provider API outside qj-agents, preserved a read-only WAF boundary and added responsive operator navigation, summaries, evidence rows and opt-in five-second refresh.

ARCHIVE

v0.7.0

  • Added a Redis-backed execution-capacity gate for bounded query cache misses: 10 global active executions, 2 per caller, 20 queued and a five-second queue deadline.
  • Kept cache hits and single-flight coalesced waiters outside execution capacity, so only real Data MCP work consumes slots.
  • Added expiring capacity leases, bounded queue cleanup and fail-closed Redis behavior; overload returns HTTP 429 with `Retry-After` instead of starting unbounded MCP work.
  • Increased the identical-query lock wait to 30 seconds so a five-second capacity wait plus the 20-second MCP timeout remains coalescible under the 45-second owner lease.

ARCHIVE

v0.6.0

  • Removed the non-data-bearing QJ API MCP `government.legislative.check` call from the Congress query; its artifact now depends on exactly the two evidence-producing QJ Data MCP tools.
  • Removed the Congress runtime and activation dependency on the dedicated internal service identity; QJ API MCP remains a documented fallback for a future query that actually returns legislative evidence.
  • Added a canonical `QueryDefinition` registry that generates catalog skills, pricing entries, OpenAPI metadata, exact MCP allowlists, route plans and public query labels.
  • Added an internal Redis 7 coordination plane with atomic bounded-query rate limits, a short result cache and distributed single-flight locks. Redis failure closes query execution before an ungoverned MCP call.
  • Kept durable OAuth, telemetry, payments and task state in SQLite WAL; this release reduces query fan-out and prepares stateless query replicas but does not claim unrestricted horizontal scaling.

ARCHIVE

v0.5.3

  • Removed the spoofed `CF-Connecting-IP` header from the public production smoke; Cloudflare now supplies the trusted edge header and the OAuth Congress call reaches the origin.

ARCHIVE

v0.5.2

  • Made `POST /v1/query/congress-gov-signals` free but OAuth-protected with the explicit `agents:query` scope and an independent per-client daily limit.
  • Removed x402 payment metadata and HTTP 402 behavior from the Congress/government query while keeping `/v1/x402/test` as an isolated testnet diagnostic.
  • Made public pricing and discovery explicitly report both live bounded queries at `$0.00` and the Congress OAuth requirement; prepaid packs remain unavailable to live query execution.
  • Tightened downstream authorization without broad a broad legacy service scope or a broad legacy service scope: canonical Warehouse reads are safe-method-only and the API hop is bound to the exact local Congress.gov request.
  • Updated activation and production smoke tests to require all three Congress/Gov MCP tools to complete before public query execution remains enabled.

ARCHIVE

v0.5.1

  • Adapted stable dotted QJ tool identifiers to the underscore-normalized names exposed by the live Data MCP server without leaking transport names into public evidence.
  • Routed the Congress.gov availability check through the live API MCP `api_domains_call` contract with an explicit route and provider.
  • Recorded the minimal read-only downstream service scopes required by the two bounded queries.
  • Corrected the activation smoke to exercise the deployed `query_service` client and retain fail-closed rollback on any upstream mismatch.

ARCHIVE

v0.5.0

  • Replaced the all-endpoint x402 discovery ambiguity with a canonical `/openapi.json` that advertises only currently executable public query resources; the full OAuth/task control plane moved to `/openapi-full.json`.
  • Added a free, rate-limited `POST /v1/query/company-snapshot-lite` query backed only by allowlisted QJ Data MCP tools.
  • Added a `$0.01` x402-protected `POST /v1/query/congress-gov-signals` query backed by bounded QJ Data MCP evidence and a QJ API MCP Congress.gov availability check.
  • Added short-lived qj-auth service-token exchange, exact MCP tool allowlists, partial-coverage output, bounded lineage and fail-closed upstream projection.
  • Removed `agents:query` from self-registration defaults; callers must request it explicitly for the still-disabled generic task control plane.
  • Documented OAuth form contracts, added root favicon/contact/guidance discovery metadata, and made the x402 challenge precede request validation.
  • Added hidden-prompt, mode-0600 service-key activation with live Data MCP, API MCP and 402 smoke checks plus automatic rollback on failure.
  • Corrected payment language: x402 settles before an accepted bounded request executes, so upstream partial coverage is not described as an uncharged failure.

ARCHIVE

v0.4.3

  • Added a transient row-hover/focus agent detail popup that distinguishes self-declared client identity from QJ-observed authenticated activity.
  • Added an opt-in five-second admin refresh toggle with overlap prevention, inactive-tab suppression and cleanup when leaving the page.

ARCHIVE

v0.4.2

  • Versioned the private admin CSS and JavaScript URLs so Cloudflare's four-hour static cache cannot combine the new table HTML with obsolete card assets.
  • Added regression coverage requiring the admin asset revision to change with this release.

ARCHIVE

v0.4.1

  • Replaced the OAuth client cards with a compact, sortable and filterable one-client-per-row operations table.
  • Added explicit operator classification and notes so internal, partner, system-test and unverified self-registrations are distinguishable without trusting the self-declared client name.
  • Added privacy-bounded per-client usage: authenticated request totals and 24-hour activity, last verified use, coarse agent family/country, token issuance, task outcomes and prepaid balance/spend.
  • Made the production contract smoke self-deactivate its temporary OAuth client on success, failure, interruption or termination so future deploys do not leave active test credentials.
  • Moved detailed request activity and x402 receipt projections behind operator Basic authentication and removed `/agents/logs` from public navigation, discovery links and the search sitemap.

ARCHIVE

v0.4.0

  • Added idempotent OAuth client-secret rotation, token revocation and client self-deactivation with atomic live-token invalidation.
  • Added fingerprint/hour and global/day registration limits, per-client token/task limits, and `Retry-After` responses.
  • Added an independent Basic-over-TLS `/agents/admin` control plane for safe client blocking, rotation, limits and aggregate usage; credentials and task content remain private.
  • Added restart-safe SQLite WAL tasks with ownership, idempotency, leases, checkpoints, cancellation, bounded retries, dead-letter recovery, private events and 30-day terminal retention.
  • Added a separate single worker container and health heartbeat while keeping task admission, A2A execution and charging disabled.
  • Recorded the lifecycle and single-node runtime boundaries in ADR-007, ADR-008 and `VERSION.yaml`.

ARCHIVE

v0.3.2

  • Enabled search crawling and indexing for the three public HTML surfaces only.
  • Added canonical URLs, XML sitemap discovery, unique titles and descriptions, Open Graph/Twitter metadata, a favicon and schema.org JSON-LD.
  • Kept JSON APIs, Agent Cards, OAuth, health, OpenAPI and other machine contracts explicitly `noindex` while allowing crawlers to read that directive.
  • Added visible internal navigation from the discovery matrix and a canonical redirect for the trailing-slash activity URL.
  • Recorded the public indexing boundary in `VERSION.yaml` and ADR-006.

ARCHIVE

v0.3.1

  • Added the public `/agents/logs` activity and payment receipt view.
  • Added the canonical, paginated `/v1/logs/public` machine contract.
  • Persisted only allowlisted request metadata with 30-day and 10,000-event bounds.
  • Added exact lifetime USDC totals and recent Base explorer links from replay-safe, recognized official Base USDC receipts; unknown network/asset pairs fail closed.
  • Kept prompts, bodies, IP addresses, OAuth identifiers, payer addresses, payment signatures and secrets out of the public log.
  • Recorded the public activity contract and privacy boundary in `VERSION.yaml` and ADR-005.

ARCHIVE

v0.3.0

  • Made x402 v2 over USDC the primary per-request payment contract at `$0.01`.
  • Added a Base Sepolia activation path backed by the official CDP facilitator.
  • Added a protected payment test route and truthful HTTP 402 discovery metadata.
  • Persisted replay-safe public settlement receipts in SQLite WAL without raw payment signatures.
  • Kept Stripe prepaid Checkout as an optional fallback instead of the agent-native primary rail.
  • Isolated the CDP wallet secret to a one-shot setup container; the API never receives it.
  • Added x402 release state and security boundaries to `VERSION.yaml`.

ARCHIVE

v0.2.0

  • Added a standalone machine OAuth issuer with autonomous, idempotent client registration.
  • Added short-lived opaque bearer tokens and scope enforcement without coupling to qj-auth.
  • Replaced subscription pricing with prepaid `$0.01` successful-query accounting.
  • Added `$1`, `$5`, and `$20` Stripe Checkout packs with signed, replay-safe webhooks.
  • Persisted privacy-bounded discovery telemetry, clients, wallet and billing events in SQLite WAL.
  • Added six-hour online SQLite backups and deployment secret preservation.

ARCHIVE

v0.1.0

  • Added A2A 1.0 Agent Card discovery.
  • Added machine-readable agent and skill catalogues.
  • Added `llms.txt`, OpenAPI, OAuth resource metadata, and deterministic routing.
  • Added a truthful discovery-preview execution gate.
  • Added a machine-first HTML contract mirror for local review.
  • Added optional red, green, dark-red, and dark-blue discovery-matrix palettes.
  • Made compact matrix popups grow to fit their complete content.