Stella Ops eIDAS / QTSP posture

Audience: Stella Ops PM, operators, compliance officers, auditors, buyers, external counsel, future engineers. Status: posture is binding internally per EXEC-20260504-eidas-reference-only-canonical-model.md. External-counsel review is closed — the canonical model was confirmed on 2026-08-23 (eidas-counsel-thread-canonical-model.md Round 3), and all seven production controls landed on 2026-08-23 (SPRINT_20260823_001 EIDAS-CTL-1…CTL-6), together with the exposure guard CTL-5. The deferred licence question is answered: counsel ruled that BUSL needs no eIDAS amendment, but requires a versioned, binding, affirmatively accepted operator instrument (question, reply). That choice is RULED (owner, 2026-08-25, Q-16): the full Customer Agreement is the instrument, drafted now, with no interim standalone addendum — no eIDAS release date requires one, and counsel recorded that the addendum alone would not cure the missing governing-law/liability/support-data terms. The eIDAS Operator Addendum content becomes a versioned schedule of that agreement. The agreement is ISSUED: CUSTOMER_AGREEMENT.md1.0.0, adopted for release by the manufacturer of record on 2026-09-16 (adoption record, SPRINT_20260825_016 LRS-3). It carries counsel’s eleven-section minimum content, the verbatim Operator Material schedule, the operator terms as Schedule 2 identified by version and digest, and a versioned acceptance record. Release rests on the owner’s ADOPTED decision rather than a signed opinion, which counsel confirmed is not a precondition to forming a B2B agreement; both review rounds are ASSESSED (see decisions/README.md). Issued is not accepted: it is not yet operative for any customer, and until a customer affirmatively accepts the issued version, support must not request customer logs/evidence without a documented confidentiality/data-protection basis. Authoritative records: see docs/legal/decisions/README.md for the full file-level audit trail. Runtime details: see docs/modules/cryptography/architecture.md§4.8 (“Runtime Loader And Claim Control”).

This document is the single-page narrative tying the eIDAS topic together. It is evergreen — read it first if you want to understand “what is Stella Ops’ eIDAS stance and how does the runtime back it up.” Underlying records (decisions, counsel correspondence, runtime contracts) are linked throughout.

1. The regulation in 60 seconds

eIDAS (Regulation 910/2014, as amended; “eIDAS 2” is the current implementing-act landscape) defines three categories that matter for Stella Ops:

Articles 33 / 34 / 40 govern qualified validation, qualified preservation, qualified electronic timestamping, and the application of those rules to qualified electronic seals.

ETSI TS 119 612 v2.4.1 (TLv6) is the technical format for trusted lists; it was enforced from 2026-04-28 22:00 UTC. Pre-v6 trusted-list snapshots are admissible only as labelled historical evidence.

2. Stella Ops’ three-role architecture

The legal architecture Stella Ops asks counsel to validate is:

Stella Ops      = on-prem technical software product
Operator        = party selecting QTSP, supplying evidence,
                  and making any workflow-level qualified-service representation
QTSP            = party providing any qualified trust service
Runtime states  = local claim-control vocabulary, NOT a qualified-service certificate

Stella Ops is not a TSP and is not a QTSP. Stella Ops ships software that locally processes operator-supplied trust material and per-transaction evidence. Stella Ops does not issue, validate-as-a-qualified-service, preserve-as-a-qualified-service, timestamp, certify, seal, or provide relying-party validation reports as a QTSP. If Stella Ops ever offers hosted/managed validation, the canonical model below reopens for review (see §6).

3. The canonical model: reference-only-no-vendoring

Per EXEC-20260504-eidas-reference-only-canonical-model.md (PM-binding 2026-05-04):

Stella Ops vendors no QTSP trust-material pack, production timestamp token, OCSP/CRL evidence, archive timestamp, vendor credential, or QTSP-controlled production evidence in its repository or Offline Kit.

The in-repo sealed eIDAS fixture under src/Cryptography/__Tests/StellaOps.Cryptography.Tests/Eidas/Fixtures/sealed-pack/ is a first-party synthetic test pack. It may be used to exercise loader, CAdES, revocation, and future signer-certificate QES wiring, but it is not a QTSP pack and must not be shipped as production evidence. Real pack ingestion and replacement steps are documented in docs/modules/cryptography/eidas-qualified-provider-pack-ingestion.md.

Operator-signing program closeout (2026-06-10): production operator-QES qualification is abandoned for the operator-signed governance decisions program. That is a product/legal/supply-chain decision, not a missing implementation detail: no real QTSP/provider pack exists, no vendor-specific counsel decision exists, and treating the synthetic fixture as production qualified evidence would create a false qualified-service claim. Future re-entry must open a new sprint and follow the ingestion runbook plus REG-20260502-eidas-qualified-provider-pack.

Operators bring their own eIDAS trust material and evidence through two local loaders:

The runtime is implemented in src/Cryptography/StellaOps.Cryptography.Plugin.Eidas/Loading/:

Tests in src/Cryptography/__Tests/StellaOps.Cryptography.Tests/Eidas/ assert character-for-character equality with the counsel-supplied wording and verify all fail-closed branches.

4. The runtime claim-state vocabulary (counsel-settled and implemented 2026-08-23)

The rename landed 2026-08-23 (SPRINT_20260823_001 EIDAS-CTL-1). Counsel answered the carried question on 2026-08-23 (decisions/eidas-counsel-thread-canonical-model-reply.md; routed as Round 3 of decisions/eidas-counsel-thread-canonical-model.md) and disapproved claimed-against: for production use. The runtime now emits the approved strings, renders them from constants pinned character-for-character against this document and the counsel reply (EidasClaimWordingRecordTests), and refuses to let any emitted wire form or Doctor token carry a superseded expression. The other six controls and CTL-5 also landed on 2026-08-23; the completed evidence is in archived SPRINT_20260823_001.

Counsel-approved stringEmitted by src/?MeaningEmitted when
not-claimed:eidas-pack-not-loadedyesStella Ops makes no qualified-service claimLoader 1 has not been configured
not-claimed:eidas-pack-expiredyesStella Ops makes no qualified-service claimLoader 1’s pack has passed its validUntilUtc
not-claimed:eidas-operator-attestation-not-loadedyes (renamed 2026-08-23)Stella Ops makes no qualified-service claimThe operator attestation file (see §5) is missing or any of its required acknowledgements is false
not-claimed:eidas-transaction-evidence-missingyesStella Ops makes no qualified-service claimLoader 2 has no evidence for the current event
local-validation-against:<qtsp-pack-version>yes (renamed 2026-08-23)Operator-attested local technical validation against the named packAll seven production controls satisfied AND static trust material, transaction evidence, operator attestation and trusted-list information all present and internally consistent
local-validation-against:<qtsp-pack-version>:historical-validationyes (renamed 2026-08-23)Operator-attested labelled historical evidenceAs above, with the explicit historical-replay flag (pre-TLv6 trust material)

This table is a machine-checked record. EidasClaimWordingRecordTests in src/Cryptography/__Tests/StellaOps.Cryptography.Tests/Eidas/ reads this file and asserts each of the six strings above appears in it character-for-character. Reformatting a token here — even the <qtsp-pack-version> placeholder — turns that suite red. That is intentional: the code and the record must not be able to drift apart silently.

Why the rename. Counsel: “‘Claimed’ can reasonably be interpreted as Stella Ops making a product-side legal or conformance representation.” The negative state renames agreementattestation because it describes the absence of an operator-controlled attestation file, not Stella Ops loading or interpreting the operator’s contract.

Mandatory disclaimer. Every external rendering of a positive state must carry the equivalent of counsel’s sentence, which is counsel-cleared wording and must not be paraphrased:

Local technical validation result. Stella Ops does not assert that it is providing a qualified validation service or that this result constitutes a QTSP-issued validation certificate.

Emission rule. Counsel: “The state must identify the exact pack version, trusted-list snapshot, validation policy and evidence set used. It must not be emitted merely because a pack is present. The runtime must distinguish at least present, absent, expired, revoked, rejected and historical-replay conditions.” Implemented 2026-08-23 (SPRINT_20260823_001 EIDAS-CTL-3) as a type, not a rule: EidasRuntimeClaimState has no public constructor, its public factory throws on a positive status, and the only route to a positive state is EidasClaimStateComposer.Compose, whose input record requires all four of counsel’s inputs plus the validation policy. FromLoaderState can no longer return a positive state at all — the PackLoaded arm that counsel ruled out has been removed. The six conditions live in EidasTrustCondition; note that counsel approved no wire token for “revoked” or “rejected”, so those two render the pack-not-loaded token and keep their distinction in the condition, the Doctor token and the audit diagnostic rather than in a vocabulary counsel never saw.

Acceptance conditions for the negative states. Counsel accepts them only if the state is defined as the absence of an operator-controlled attestation file; the workflow fails closed for qualified-service claims; neither the API nor the UI converts the state into a generic “valid” / “verified” / “eIDAS compliant” result; downstream consumers can distinguish cryptographic validity from qualified-service status; and the reason for withholding the claim stays in the audit record.

Current exposure. Verified 2026-08-23, before and after the EIDAS-CTL-1 rename: the claim state has no consumer outside the eIDAS plugin and its own tests — no API, report, export or UI renders it — so counsel’s production-exposure gate is not breached. The disapproved claimed-against: form is no longer emitted anywhere in src/Cryptography/; it survives only as a named entry in EidasClaimWording.SupersededExpressions, which exists so the absence guard can be shown finding one. The remaining tree-wide hits (StellaOps.Findings.DoraRoi, StellaOps.Evidence.TimestampAssurance) belong to other regulatory domains and are not in scope of counsel’s eIDAS ruling.

5. The operator attestation file

The runtime refuses to emit any positive eIDAS claim until the operator has supplied a local attestation file at the configured path. Counsel pinned the config key on 2026-08-23: Eidas:TrustedList:OperatorAgreementAttestationPath, which must be validated and pinned — “do not silently search for or infer an attestation.” Implemented 2026-08-23 (SPRINT_20260823_001 EIDAS-CTL-2) in EidasOperatorAttestationLoader, which holds the key name as EidasOperatorAttestationLoader.ConfigurationKey, reads it with no alias and no fallback, and gates EidasTrustedListLoader on the result. It stays distinct from Eidas:TrustedList:QtspAgreementPath, which is a QTSP agreement, not an operator attestation; that gate is unchanged and still fails with MissingAuthorisedQtspAgreement. The skeleton is at docs/legal/operator-attestations/eidas-operator-agreement-attestation.template.md.

How the gate behaves, and why the two failure shapes differ. An unset key means the attestation is absent: the loader returns operator-attestation-not-loaded and the runtime fails closed — an operator who never configured eIDAS must not get a startup crash. A set but unresolvable path throws (EidasEvidenceNotProductionReadyReason.UnresolvableOperatorAttestationPath) and never falls back to any other source, because degrading a named-but-missing custody artefact to “absent” is exactly the silent inference counsel prohibited; this is the same custody ordering CLAUDE.md §2.12 records for ReadSigningPrivateKeyPem. A file that is present but insufficient — unparseable, missing operatorId/attestedAt, dated in the future, or withholding any acknowledgement — fails closed to the negative state with the withholding reason carried in the diagnostic, which is counsel’s acceptance condition that “the reason for withholding the claim remains in the audit record”.

Wire format is a recorded assumption, not a settled question. The template proposes YAML and lists the format as pending counsel decision #4. The runtime parses JSON, matching every other eIDAS artefact it consumes and avoiding a new dependency through the BUSL licence gate. If counsel settles on YAML this is a parser swap, not a redesign.

Required acknowledgements (counsel-driven minimum content; per decisions/eidas-counsel-thread-canonical-model.md Round 1, Edit 4):

  1. operator controls the QTSP relationship;
  2. operator has rights to use the pack/evidence;
  3. operator selected the QTSP/service;
  4. operator accepts expiry/revocation duties;
  5. operator will not claim Stella Ops is a QTSP;
  6. operator is responsible for downstream qualified-service representations;
  7. operator will preserve pack/evidence audit records.

Stella Ops never signs this file. The operator does. Stella Ops only consumes it, validates the seven acknowledgements, optionally validates an operator-side signature, and lets the runtime gate proceed.

6. Reversibility / triggers that reopen the canonical model

Per EXEC-20260504-...md “Reversibility” section + decisions/eidas-counsel-thread-canonical-model.md (Edit 5 in Round 2 + the optional hosted/managed-mode trigger), the canonical model must be reopened if any of the following changes:

A reopening is performed by a new EXEC-YYYYMMDD-eidas-...md decision that supersedes EXEC-20260504. Until then, EXEC-20260504 is binding.

7. Counsel cycle status

The eIDAS lane has three counsel review threads of its own (a fourth, timestamp-specific one is noted below and is owned by the Evidence lane). All three had dispositive activity on 2026-08-23; each thread is a consolidated record covering its request, response, and applied disposition.

2026-08-23 thread activity:

Positive-state exposure and CTL-5 retirement rule (counsel reply §7E): before the CTL-5 exposure guard is narrowed or retired, every API, report, export, UI, or other external rendering that can carry a positive state must keep these three facts inseparable: counsel’s verbatim local validation disclaimer, the exact pack identifier, and the validation basis. The implementing sprint must record the new surface and prove by conformance test that no representation can emit the positive state while omitting any of the three. A consumer is not authorization to weaken the guard; it is the event that activates this replacement control.

A THIRD eIDAS-adjacent disposition landed the same day, owned by a different lane — read it before touching claim wording anywhere. decisions/timestamp-assurance-counsel-thread-claims-trust-and-retention-reply.md rules on RFC 3161 / eIDAS timestamp claims for the Evidence family (SPRINT_20260819_001 TA-6), not on this plugin. Two consequences reach across the boundary:

The earlier rounds, closed 2026-05-04:

  1. Canonical-model reviewdecisions/eidas-counsel-thread-canonical-model.md. Substantive review of the EXEC-20260504 reference-only canonical model. Two rounds; counsel affirmed the legal architecture (the four-role frame in §2 above). All counsel-driven edits applied. EXEC-20260504 header status is now APPROVED (restated 2026-09-15 by manufacturer-of-record instruction, SPRINT_20260825_016 LRS-19; the model is unchanged), previously APPROVED + COUNSEL-REVIEWED / LEGAL-MODEL-CONFIRMED. REG-20260502 wording block flipped to COUNSEL-APPROVED for the canonical-model wording only.
  2. Vendor-questionnaire reviewdecisions/eidas-counsel-thread-vendor-questionnaire.md. Substantive review of VENDOR-BRIEF-20260502-eidas-qtsp-redistribution.md. Three rounds: vendor-independent Gate 3 → substantive reframe (which produced Loaders 1 + 2 in the runtime) → pre-forward sign-off. Counsel’s final verdict: “send it. No more substantive edits are needed.” The questionnaire is counsel-approved and held in reserve.

Conditional future counsel work (only fires under specific triggers; not currently pending):

8. Engaging a candidate QTSP — how it works

Forwarding a vendor questionnaire / RFP / RFI to one or several candidate QTSPs is normal pre-sales activity. No contract, NDA, license, or payment is required for the act of forwarding or for receiving the candidate’s proposal:

In short: cold-emailing the questionnaire to three candidate QTSPs tomorrow is fine. Picking one and signing terms is what triggers the next legal cycle.

9. When a QTSP is selected — what engineering work follows

When (and only when) a future EXEC engages a specific QTSP, the engineering work that follows lands inside the existing crypto plugin tree, not as a new top-level plugin. Specifically:

This means: vendor selection does not bottleneck on per-vendor engineering. The expensive engineering — Loaders 1 + 2, the claim-state vocabulary, the fail-closed gates — is already done and is vendor-agnostic. What’s QTSP-specific is trust material, not crypto operations.

A vendor may also distribute their own SDK (typically wrapping their PKCS#11 module). Operators can use the vendor SDK directly if they prefer — Stella Ops will still consume the same PKCS#11 interface underneath, so the SDK choice is invisible to Stella Ops as long as PKCS#11 is exposed.

10. Operator workflow (when an operator deploys Stella Ops with eIDAS)

  1. Operator selects a QTSP and signs a vendor agreement covering: jurisdiction, profile, expiry/renewal cadence, redistribution, confidentiality, no-claim-of-QTSP-endorsement, no-use-of-QTSP-marks.
  2. Operator obtains the static trust-material pack from their QTSP and places it at the path configured by Eidas:TrustedList:OfflineTrustMaterialPackPath.
  3. Operator authors their local attestation file based on docs/legal/operator-attestations/eidas-operator-agreement-attestation.template.md, populating the seven acknowledgements and (if counsel requires) an operator-side signature. Places it at Eidas:TrustedList:OperatorAgreementAttestationPath.
  4. Operator wires the per-transaction evidence supply path: either (a) operator obtains timestamp / OCSP / archive evidence directly from the QTSP per release; (b) vendor supplies an operator-local appliance or batch channel; © vendor supplies periodic evidence bundles; or (d) operator validates only and embeds evidence already supplied locally. Path configured by Eidas:TransactionEvidence:RootPath.
  5. Operator restarts the service. Runtime emits local-validation-against:<qtsp-pack-version> (or :historical-validation for the labelled historical-replay carve-out), together with counsel’s verbatim disclaimer, once all gates open. If any gate is shut, runtime emits the corresponding not-claimed:<reason> and the operator’s downstream consumers see no qualified-service claim attached to the output.
  6. Operator’s own legal counsel reviews the attestation file and the workflow before any qualified-service claim is made to downstream parties. Stella Ops is not a substitute for that operator-side legal review.

11. What this posture does NOT cover

12. Cross-references

Append-only history

DateAction
2026-05-04Posture document authored. Cross-links the EXEC binding decision, REG asset record, vendor questionnaire, operator attestation skeleton, runtime architecture, and counsel cycle into a single-page narrative.
2026-06-09Recorded the synthetic-fixture allowance: the sealed in-repo eIDAS fixture may unblock deterministic engineering/tests, but it is not production QTSP material and real pack ingestion remains operator-supplied/fail-closed.
2026-06-10Recorded operator-signing program closeout: production operator-QES qualification is abandoned for this program; synthetic fixtures remain test-only and future production QES requires a new sprint with a real pack and counsel sign-off.
2026-08-23EIDAS-CTL-1 landed (SPRINT_20260823_001): the runtime now emits counsel’s approved vocabulary. EidasRuntimeClaimStatus.ClaimedAgainstPack*LocalValidationAgainstPack*; NotClaimedOperatorAgreementNotLoadedNotClaimedOperatorAttestationNotLoaded; EidasLoaderStatus.QtspAgreementNotLoadedOperatorAttestationNotLoaded (Doctor token operator-attestation-not-loaded). The wire strings are rendered from EidasClaimWording templates that EidasClaimWordingRecordTests compares against this document and the counsel reply on every run, and a FindSuperseded() guard proves no emitted wire form or Doctor token carries claimed-against:, validated-against:, or the old agreement token. §4 table updated; the “Emitted today?” column is no longer a gap list.
2026-08-23Both counsel threads received a further round. §4 rewritten: the claim-state vocabulary is counsel-settled and the code does not match it — claimed-against: is disapproved for production, local-validation-against: is the approved replacement with a verbatim disclaimer, and the negative state renames agreementattestation. §5 config key pinned to Eidas:TrustedList:OperatorAgreementAttestationPath (absent from src/). §7 records the Round 3 / Round 4 dispositions, including that the vendor questionnaire’s approval is not authorisation to engage a QTSP. Measured exposure: the disapproved string has no consumer outside the plugin and its tests, so the production gate is not breached today. Corrective work proposed, unstaffed, as SPRINT_20260823_001_Cryptography_eidas_production_claim_controls.md.
2026-08-23EIDAS-CTL-5 and EIDAS-CTL-6 landed (SPRINT_20260823_001). CTL-5: counsel’s control #3 exposure gate is now a control instead of an accident of wiring — EidasClaimStateExposureConformanceTests in the architecture pack fails when any production surface outside the plugin names the claim-state API, carries an eIDAS claim wire string, or project-references the plugin; it matches both the disapproved and the approved spellings, so CTL-1’s rename did not blind it. CTL-6: eidas-operator-terms.mdis the counsel-control-#7 instrument, with every counsel sentence pinned against the counsel record and a representation-drift sweep over this repository’s user-facing surfaces (EidasRepresentationBoundaryConformanceTests). Neither gate reaches www.stella-ops.org, the marketing surface counsel named first — measured clean by hand on this date; a standing gate for that repository is an open owner decision.
2026-08-23EIDAS-CTL-6 closed out; a new counsel thread opened on the licence text. The owner authorised sending the BUSL-1.1 licence text and the customer-agreement material to counsel, which was the last thing holding CTL-6. The question is prepared as decisions/eidas-counsel-thread-licence-text-and-customer-agreement.mdOPEN — AWAITING COUNSEL, forwardable as-is, with a seven-row enclosure table (exact paths + sha256), seven questions, and no invented answer. Assembling the enclosures produced three findings, reported and deliberately not actioned because correcting a licence is not an engineering decision: two materially different BUSL-1.1 texts exist (shipped vs website — different Licensor, different Additional Use Grant, different Change Date, different Change License); the shipped text specifies no Change License: parameter although MariaDB’s Covenant #1 requires one; and no customer agreement exists, so the allocation counsel requires has nowhere contractual to go except the licence. §4/§5 runtime posture is unchanged by any of this.
2026-08-23EIDAS-CTL-4 landed (SPRINT_20260823_001): counsel control #6 provenance. Every pack and evidence artefact the runtime reads now carries source, checksum, version, import time and effective period (EidasArtefactProvenance), with the period as its own type so “open-ended” is a statement rather than a null. Checksums are computed over the bytes read, never copied from a manifest that declares them, and Loader 1’s provenance pass re-verifies against the manifest so a change between the gate and the record fails closed. The positive state now also names the evidence set by content (EvidenceSetDigest, a SHA-256 over the canonicalised artefact list) alongside the pack version, trusted-list snapshot and validation policy; an incomplete or stale provenance set withholds the claim with every defect named in the audit record. Runtime detail in docs/modules/cryptography/architecture.md§4.8.
2026-08-25Recorded counsel reply §7E as the binding replacement-control rule for any future CTL-5 narrowing: positive state, verbatim disclaimer, pack identifier, and validation basis remain inseparable on every external representation, with the new surface and conformance proof recorded in its sprint. Corrected the licence-thread cross-reference from awaiting counsel to answered.
2026-08-25Reconciled the current status banner and §4/§7 summaries with the already-recorded licence reply: no counsel question remains open, all seven controls are landed, and the remaining agreement/addendum choice is an owner product decision. Dated pre-answer rows above remain historical evidence.
2026-09-02Customer Agreement drafted (LRS-3): CUSTOMER_AGREEMENT.mdv0.1.0-draft. Eleven counsel-enumerated sections, counsel’s Operator Material clauses verbatim as Schedule 1, the operator terms incorporated as Schedule 2, and a versioned SHA-256-anchored acceptance record. Two drafting choices counsel had not made are flagged inline for review (governing law/venue follows the Licensor’s Bulgarian seat; B2B withdrawal posture). Pending counsel review — not yet operative; the §7D support-data constraint still binds. Banner and §7 updated to point at the draft.
2026-08-25Q-16 RULED: full-customer-agreement-now. The owner chose the full Customer Agreement as the affirmatively accepted instrument, drafted now with the eIDAS Operator Addendum content as a versioned schedule; no interim standalone addendum (no eIDAS release date requires one). Banner and §7 updated; drafting staged as SPRINT_20260825_016 LRS-3; the §7D support-data constraint binds until it lands. Settlement receipt: SPRINT_20260825_016 Decisions & Risks.
2026-08-25Q-12 RULED: website-ci-gate (+ www hard rule). The 2026-08-23 row’s open item — “a standing gate for that repository is an open owner decision” — is settled: the www.stella-ops.org repository gets its OWN CI gate running the prohibited-representation sweep on every change, consuming the canonical prohibited-term list from this repository (the www repo already has access; nothing secret is involved, so no shared-secret service is required), AND the prohibition is recorded as a hard rule in the www repository’s agent contract (its AGENTS.md), so both the automated gate and every agent working there carry the boundary. A one-date manual review is a measurement, not a control. The term list follows the Q-14 regime (same date). Implementation: SPRINT_20260825_016 LRS-6. Settlement receipt: SPRINT_20260825_016 Decisions & Risks.
2026-08-25Q-14 RULED: acceptable-with-qualified-property (property-anchor regime). eIDAS-compliant is permitted on any surface when the same sentence (same line for code/config) names the exact property it describes — a specific algorithm, AdES/QES signature format, or standard reference (e.g. ETSI TS 119 312) — plus the exact time wherever a status-at-a-time claim is made. It is flagged as a bare whole-product label (“Stella Ops is eIDAS-compliant”) and remains unconditionally prohibited as a label on any rendering of a validation RESULT (counsel’s canonical-model line-73 red line, held structurally by the CTL-5 exposure guard). Grounds: no counsel record bans the phrase — the canonical-model prohibited list omits it and TA-6 affirmatively permits it with exact property and time; a repo-wide ban would outlaw ~12 legitimate algorithm/profile descriptions and lawful future marketing copy for zero added legal protection. Zero current violations exist under the regime, so it settles at no remediation cost; a new bare-label matcher converts the ruling into a control. The TA lane’s stricter internal TimestampClaimWording guard is deliberately NOT loosened. Implementation (matcher update + two devops comment rewordings the research flagged): SPRINT_20260825_016 LRS-7. Settlement receipt: SPRINT_20260825_016 Decisions & Risks.
2026-08-25Q-13 RULED: integrate-slot-obsolete-tree. The older StellaOps.Cryptography.Plugin.EIDAS signer/TSP tree — outside the fail-closed claim controls, consumed only by the CLI’s StellaOpsEnableEIDAS EU-distribution gate — is consolidated: the distribution slot repoints at the counsel-governed StellaOps.Cryptography.Plugin.Eidas, genuinely unique signer/TSP capability migrates under the canonical claim controls (uniqueness measured first), and the old tree is obsoleted per CoC §15.4. Execution: SPRINT_20260825_016 LRS-2; the CTL-5 exposure guard and representation sweep must stay green through the move. Settlement receipt: SPRINT_20260825_016 Decisions & Risks.
2026-09-15The drafted Customer Agreement goes back to counsel; two counsel directives executed on the way. The Q-16 instrument had been drafted since 2026-09-02 and its sprint row sat blocked on counsel review — with no counsel thread for it in existence, so the review could not arrive. The package is now prepared as decisions/customer-agreement-counsel-thread-draft-review.md (seven enclosures with digests; the two drafting choices counsel named but did not decide; the five attestation questions open since 2026-05-04; counsel’s §7A checkout question), OPEN — AWAITING COUNSEL and forwardable as-is, with the send left as a separate owner authorisation. Two items on counsel’s own ten-condition closure list were unmet and needed no counsel input, so they were executed rather than asked about: closure item 7 — counsel’s Enclosure E acceptance wording, supplied 2026-08-23 and never carried into the attestation template — and §7C’s immutable version+digest requirement, which now has a register (customer-agreement-versions.sha256) and a red-proved gate that also refuses to let a do-not-present draft reach the release bundle. The agreement itself gained §7C’s material-versus-editorial amendment rule (§11.4) and the version-register reference (§11.5). Nothing in the §§4-5 runtime posture changes.
2026-09-15The Customer Agreement review came back: structure supported, release refused, and the reply expressly declines to be the “counsel-reviewed” criterion. Recorded at decisions/customer-agreement-counsel-thread-draft-review-reply.md. Decided: Bulgarian law and exclusive Sofia jurisdiction (not arbitration or a neutral forum for non-EU customers, but jurisdiction and ENFORCEABILITY are distinguished, and self-hosting is explicitly NOT accepted as an argument that no obligation arises in the customer’s jurisdiction); the B2B posture stays, with a mandatory-rights savings clause and a separate consumer-compliance path before any consumer order; Schedule 1 stays a schedule; Schedule 2 stays incorporated by reference but must be identified by version and FULL digest, because an unchanged Agreement hash is no protection if the referenced document can change without it. Required before release: an explicit intent/gross-negligence exception (Art. 94 of the Obligations and Contracts Act voids advance limitation of either), separation of the indemnity exception from the liability-cap exception, a fee base that survives payment through the merchant of record, a narrower statement of Cleverbridge’s role (we may not disclaim another entity’s own obligations), a material/editorial test decided by legal EFFECT rather than by our label, and homes for order/fees, support, notices, precedence, indemnity administration and export controls. The five attestation questions open since 2026-05-04 are answered, including that the runtime’s present but unvalidated signature block must be removed or rejected rather than silently treated as assurance. The reply does not close anything by itself: by its own §Scope it assessed the questions and enclosure descriptions rather than the operative text, and is not a signed advocate’s opinion — so LRS-3’s criterion stays open, EIDAS-CTL-6 must not close on it, and the instrument stays a do-not-present draft. It also rejected an assertion the brief made: “no commercial customers” is not “no existing recipients”, which needs a distribution check rather than inference. Nothing in the §§4-5 runtime posture changes.
2026-09-16Customer Agreement 1.0.0 ISSUED (LRS-3), and the release gate that had blocked it was withdrawn as mistaken. Adopted by the manufacturer of record (EXEC-20260916-customer-agreement-1-0-0-adoption.md); register row and byte-identical release-bundle copies in the same change, so the publications gate flipped from its draft assertions to its issued ones and stayed green. Round 2’s fifteen corrections are all applied. Two clauses counsel left to the owner were settled at issue: §7.2(d) is mutual rather than Licensor-only (restoring counsel’s bilateral drafting, because an asymmetric limitation is the most challengeable shape and nothing had been presented to a customer yet), with §7.2(e) preserving direct lost profit under Art 82 BOCA and §7.2(f) keeping the Schedule 1 clause 9 indemnity uncut; and §7.2(b)'s fee base now includes separately priced support, so a support-paying customer is not left with a cap of zero. The withdrawn gate matters more than the clauses: this repository had treated a signed Bulgarian advocate’s opinion as a precondition to release, which came from reading a reviewer’s note about what their own document was as a rule about what the agreement needs. Counsel corrected it. Release now rests on the owner’s ADOPTED decision, and both review rounds are recorded as ASSESSED rather than COUNSEL-REVIEWED, because no named legal professional has read the operative text. Issued is not accepted: no customer has accepted it, so the §8.2 support-data constraint survives unchanged.