Skip to content

Releases: interop-alliance/was-conformance-suite

v0.14.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 10 Sep 04:06

Added

  • denial-reasons-api: a refused capability invocation is still a 404, and a
    server may name two causes by type alone to the holder of the affected
    chain: capability-expired and capability-revoked (optional; the revocation
    cases skip when the server has no revocation endpoint). A copy of the grant
    invoked without its controller's key, and a refusal for any other reason, stay
    the merged not-found (the latter required).

v0.13.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 08 Sep 16:52

Added

  • conditional-requests-api, a "Descriptions" group: a Collection PUT with
    If-None-Match: * creates an absent Collection and 412s on a present one;
    Read Space carries a quoted ETag and a covering If-None-Match is 304
    (optional, the spec's SHOULD); a Space PUT with If-None-Match: * creates
    an absent Space and 412s on a present one; a stale If-Match on Update
    Space 412s while the current one succeeds and an unconditional PUT still
    replaces. The write cases skip when the default backend does not advertise
    conditional-writes.

v0.12.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 08 Sep 00:17

Added

  • governed-log-api: an append must fast-forward the stored log. A body the
    stored log is not a prefix of is 412 precondition-failed even under a
    current If-Match; a body adding no line or several is 400
    invalid-request-body; the log is unchanged either way.

v0.11.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 07 Sep 23:30

Added

  • A governed-log-api suite for a Collection's governing history log, the
    .../meta/log sub-resource, gated on a backend advertising
    governed-history-logs: a guarded create (If-None-Match: *) governs the
    Collection and its served encryption member equals the log head's state
    plus history: { method, resource }; the log reads back verbatim as
    text/jsonl with its ETag; an If-Match append lands and bumps both the
    log and Description ETags while a stale one is 412; a direct encryption
    write on a governed Collection is 409 encryption-history-log-governed; an
    append that drops an epoch is 400 and leaves the log unchanged; a
    line-contract break is 400 invalid-request-body; governing an
    already-described Collection is 409 encryption-immutable; the log is absent
    from the listing, exempt from the envelope rule, untouched by a PUT /meta,
    readable under a capability on the Collection URL, masked as 404 for another
    controller, and removed with the Collection.

Fixed

  • The optional backend-description cases in client-spaces pin the reference
    server's current features list, which now ends in governed-history-logs.

v0.10.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 07 Sep 21:51

Added

  • conditional-requests-api gains optional-tier conditional-read cases (spec
    "Caching"): a GET or HEAD with an If-None-Match matching the current ETag
    is 304 with the ETag and no body while a stale validator is 200, a W/
    validator, a list, and * all match (weak comparison), another controller's
    conditional GET is the 404 mask rather than a 304, and a POST response carries
    Cache-Control: no-store.

v0.9.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 06 Sep 02:57

Added

  • encryption-descriptor-api covers the descriptor's hmac blinding-key
    member: it persists and echoes verbatim, a malformed member (missing id or
    type, empty recipients, bad entry shape) is 400 invalid-request-body,
    changing its id or removing it on update is 409 encryption-immutable, and
    changing its recipients or introducing it on a descriptor that lacks it is
    accepted.

v0.8.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 05 Sep 20:43

Added

  • A plaintext-declaration-api suite for the Collection plaintext member and
    its indexes declaration: plaintext.indexes persists and echoes on POST and
    PUT create, plaintext and encryption both present is 400 on create and on
    update in either direction (an empty plaintext still excludes), malformed
    plaintext is 400, plaintext is added, changed, and emptied with {} on an
    existing Collection, and a unique index conflict is 409 at write time and
    when promoting an attribute to unique over colliding Resources. The suite is
    optional until the spec text for plaintext lands.

v0.7.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 29 Aug 18:43

Changed

  • The suite signs its delegation proofs with eddsa-jcs-2022 instead of
    Ed25519Signature2020. That is what current WAS clients emit, so the required
    tests now exercise the cryptosuite a server actually meets. A server that
    verifies only Ed25519Signature2020 fails the delegated tests until it
    accepts both; was-teaching-server does so from 0.23.0.

Added

  • A delegation-cryptosuites suite: a server accepts a delegation proof signed
    with eddsa-jcs-2022, one signed with Ed25519Signature2020, and a chain
    whose links mix the two -- rather than the run silently tracking whichever
    suite it happens to send. Only the eddsa-jcs-2022 test is required, matching
    what the rest of the suite signs with. The two tests involving
    Ed25519Signature2020 are optional: a server may reasonably have moved past
    it, and the spec's authorization profile names no cryptosuite either way.
  • Actor.signer on the test identities, so a suite can build a client of its
    own -- one signing with a different cryptosuite, for instance -- without
    reaching into rootClient.

Fixed

  • The README's suite-id table lists all 20 suites; it had been missing seven
    added since it was written.

v0.6.1

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 20 Aug 20:44

Added

  • repository.create-controller-unsupported-did-method-400 and
    space.update-controller-unsupported-did-method-400 in the spaces-api
    suite: a controller that is a valid DID of a method not in the spec's Space
    Controller DID Method Registry (did:web) is refused with 400
    invalid-request-body, on create and on update by the stored controller, and
    the update leaves the stored controller unchanged.

v0.6.0

Choose a tag to compare

@dmitrizagidulin dmitrizagidulin released this 12 Aug 23:46

Added

  • Codec-path tests in the blinded-index-api suite, grouped as codec path and
    gated on the same blinded-index-query feature detection: an encrypted
    Collection is provisioned through @interop/was-client
    (encryption: { scheme: 'edv' }, a first key epoch with blindedIndex: true,
    and a declared index), documents are written with add(), and the server
    matches the client-computed tokens -- find({ equals }) returns them
    decrypted, find({ has }) and find({ count: true }) match on presence and
    tally, and a write colliding on a unique declared attribute is refused with
    409 id-conflict (surfaced as the client's ConflictError). The existing
    tests seed hand-built envelopes, which cannot show that a real client's tokens
    are the tokens this server matches.

Changed

  • @interop/was-client peer range raised to >=0.35.0 <1.0.0 (the version that
    ships the /edv blinded-index API the new tests import).
  • Added @interop/x25519-key-agreement-key as a dependency (the key-agreement
    key the codec-path collection's epoch wraps to).