Skip to content

Releases: latere-ai/arca

Arca v0.10.2

Choose a tag to compare

@github-actions github-actions released this 21 Oct 14:52

Fixed

  • Built with Go 1.27.3, which fixes GO-2026-6809, a flaw in the
    standard library's certificate verification that this code can reach.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted
--- PASS: TestContract (1.22s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.04s)
ok  	latere.ai/x/arca/test/conformance	1.267s

Release evidence

  • Tag: v0.10.2
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.10.2
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

The previous release's suite

The suite of v0.10.1, with the driver it shipped with, against the binary of v0.10.2 (spec 024). It counted: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted.

Listed and no longer applying to these two releases, so run:

  • 028/FolderCopy: v0.8.0: a move with recursive moves a folder (spec 030)

Arca v0.10.1

Choose a tag to compare

@github-actions github-actions released this 21 Oct 08:57

Added

  • The Go runtime's metrics are exported with the rest of the
    telemetry.
    With OTEL_EXPORTER_OTLP_ENDPOINT set, the server also
    sends memory, goroutine, GOGC, GOMAXPROCS and scheduling-latency metrics,
    as go.memory.*, go.goroutine.count, go.config.gogc,
    go.processor.limit and go.schedule.duration, through
    latere.ai/x/pkg v0.106.0.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted
--- PASS: TestContract (1.40s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.06s)
ok  	latere.ai/x/arca/test/conformance	1.465s

Release evidence

  • Tag: v0.10.1
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.10.1
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

The previous release's suite

The suite of v0.10.0, with the driver it shipped with, against the binary of v0.10.1 (spec 024). It counted: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted.

Listed and no longer applying to these two releases, so run:

  • 028/FolderCopy: v0.8.0: a move with recursive moves a folder (spec 030)

Arca v0.10.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 22:41

Added

  • An authorizer question names everyone who holds a share on the
    file.
    Every File and Upload question about a path in a space
    that is not the caller's own now carries grants, each subject that
    holds a share on the path with the highest permission it holds there,
    as [{"subject": "...", "permission": "read"}] sorted by subject, and
    an empty list when nobody does. On a move or a copy a subject is
    listed only when it holds a share on both paths, with the lower of the
    two. An endpoint that decides a question as somebody other than the
    caller, such as an agent's request decided as the person it acts for,
    reads that person's permission here; grant, the caller's own, is
    unchanged. The list holds at most 64 entries and 16 KiB of subjects
    and permissions, the first by subject, and a longer one is cut there
    and marked "grants_truncated": true, so an endpoint that does not
    find its subject in a cut list refuses.
    The question about the caller's own space and an anonymous one carry
    neither. An endpoint that does not read the two members answers as
    before. A question that carries them costs one more read of the
    shares table, and a table that cannot answer it is
    authorizer_unavailable, as for grant. In Go,
    authorizer.File.Grants, authorizer.Upload.Grants,
    authorizer.Holder, authorizer.MaxGrants and
    authorizer.MaxGrantsBytes name them.

Changed

  • A share's grantee is at most 512 bytes. POST /v1/shares refuses
    a longer grantee with 400 invalid_field, so no share can make
    the questions about its path too large for an authorizer to read.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted
--- PASS: TestContract (1.55s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.06s)
ok  	latere.ai/x/arca/test/conformance	1.623s

Release evidence

  • Tag: v0.10.0
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.10.0
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

The previous release's suite

The suite of v0.9.2, with the driver it shipped with, against the binary of v0.10.0 (spec 024). It counted: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted.

Listed and no longer applying to these two releases, so run:

  • 028/FolderCopy: v0.8.0: a move with recursive moves a folder (spec 030)

Arca v0.9.2

Choose a tag to compare

@github-actions github-actions released this 18 Oct 22:27

Security

  • A public object is read on a site apart from the platform's. An
    owner's read of a public object redirects to ARCA_PUBLIC_CDN_URL,
    whose host answers the object under the type it was written with, so a
    page someone stored runs there. The production overlay's base was on the
    origin's registrable domain, where such a page is same-site with the
    console and sign-in: SameSite cookies do not keep it out, and it can
    set cookies for the whole domain. The base is now a host on a
    registrable domain of its own, in front of the same CDN, so a key reads
    the same object there and an address already handed out on the old
    host keeps working. A deploy test fails the overlay when the base and
    ARCA_PUBLIC_URL share a registrable domain, and the configuration
    reference says to keep the base apart from the installation's own site.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted
--- PASS: TestContract (1.35s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.04s)
ok  	latere.ai/x/arca/test/conformance	1.396s

Release evidence

  • Tag: v0.9.2
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.9.2
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

The previous release's suite

The suite of v0.9.1, with the driver it shipped with, against the binary of v0.9.2 (spec 024). It counted: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted.

Listed and no longer applying to these two releases, so run:

  • 028/FolderCopy: v0.8.0: a move with recursive moves a folder (spec 030)

Arca v0.9.1

Choose a tag to compare

@github-actions github-actions released this 18 Oct 14:43

Fixed

  • A release is published again after the previous release's suite
    passes.
    The previous release's suite runs right after this release's
    against the same installation and as the same callers, and the two
    together sent more requests than one caller may send in a minute, so
    the v0.9.0 release stopped on 429 answers in that suite: its images
    were built, but nothing was deployed and no GitHub release was
    published. The second suite now starts a minute after the first. This
    release carries v0.9.0's changes, every link read as a download among
    them.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted
--- PASS: TestContract (1.80s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.07s)
ok  	latere.ai/x/arca/test/conformance	1.871s

Release evidence

  • Tag: v0.9.1
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.9.1
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

The previous release's suite

The suite of v0.9.0, with the driver it shipped with, against the binary of v0.9.1 (spec 024). It counted: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted.

Listed and no longer applying to these two releases, so run:

  • 028/FolderCopy: v0.8.0: a move with recursive moves a folder (spec 030)

Arca v0.8.1

Choose a tag to compare

@github-actions github-actions released this 18 Oct 13:58

Fixed

  • A release is published again after the previous release's suite
    passes.
    The suite's evidence was written relative to the package's
    directory, where the release job never looked, so the v0.8.0 release
    stopped after its suite passed: its images were built, but nothing was
    deployed and no GitHub release was published. This release carries
    v0.8.0's changes, the folder move among them.

Carried from v0.8.0, which published no release

Added

  • A folder is moved in one call. POST /v1/files/{owner}/{path} with
    {"move_to": "files/...", "recursive": true} moves every object under
    the folder to the same path below move_to, all of them or none, and
    answers the number of files and bytes moved. No bytes are copied and
    the space's usage does not change. Each object keeps its versions, its
    stars and its public link, and a share or a link on the folder or
    inside it moves with the folder, unless the destination already holds
    something the share would then cover, in which case the share stays
    where it was. A trashed object under the folder stays where it was. Any path the move would take that is already held,
    by a live or a trashed object, is 409 path_taken and nothing moves;
    a folder of more than 10,000 objects is 422 too_many_objects, as
    for a copy. The authorizer is asked file.write once, with both
    folders and recursive: true, and the event log records one move
    with the counts.

Changed

  • move_to with recursive: true is a folder move. It answered
    400 invalid_field before. The too_many_objects message now reads
    "The folder holds more objects than one copy or move accepts."
  • The conformance suite moves a folder. 030/FolderMove is a new
    case. v0.7.0's suite expects the refusal above in its 028/FolderCopy
    case, so a run of that suite against this release fails that one
    case; skip it with Options.Skip. The release pipeline now runs the
    previous release's suite against each new release and lists every case
    it skips this way, with the reason, in the release notes.

Fixed

  • A folder copy a few objects past the limit is refused whole. When
    the authorizer's answer left some destination paths out, a folder just
    over 10,000 objects could copy its first 10,000 and answer as if it
    had copied everything. It is now 422 too_many_objects.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted
--- PASS: TestContract (1.67s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.06s)
ok  	latere.ai/x/arca/test/conformance	1.736s

Release evidence

  • Tag: v0.8.1
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.8.1
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

The previous release's suite

The suite of v0.8.0, with the driver it shipped with, against the binary of v0.8.1 (spec 024). It counted: 54 passed, 0 failed, 0 skipped, 106 objects created and deleted.

Listed and no longer applying to these two releases, so run:

  • 028/FolderCopy: v0.8.0: a move with recursive moves a folder (spec 030)

Arca v0.7.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 11:37

Added

  • A folder listing finds files by name and answers the newest ones.
    GET /v1/files/{owner}/{path}?list=1&q=plan answers the files under
    the folder whose name contains plan, ignoring case, paged with
    cursor and limit like any listing. &recent=1 answers the most
    recently modified files first, at most limit of them, in one page;
    with q it keeps the names that match. Both take the listing's own
    permission and leave out every folder the authorizer's limits.omit
    names. The text is matched literally and is at most 200 bytes; past
    that, or with a cursor beside recent=1, the answer is 400.
    Letters outside ASCII match their other case when the database was
    created with a UTF-8 locale, as the official Postgres image creates it.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 53 passed, 0 failed, 0 skipped, 96 objects created and deleted
--- PASS: TestContract (1.47s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.07s)
ok  	latere.ai/x/arca/test/conformance	1.550s

Release evidence

  • Tag: v0.7.0
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.7.0
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

Arca v0.6.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 16:52

Added

  • ARCA_TRUSTED_PROXIES names the proxies in front of the server.
    A comma separated list of CIDR ranges, such as an ingress's pod range.
    When a request comes from inside one, the client address is the last
    X-Forwarded-For entry outside every range, and that address is what
    the per-address limit counts and what the authorizer is told as
    request.ip. Unset, no forwarded header is read, as before.

Fixed

  • An oversized PUT names the upload route under the installation's
    base.
    The object_too_large detail said POST /v1/uploads whatever
    ARCA_BASE_PATH was; it now names the route the installation serves,
    such as POST /v1/storage/uploads.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 53 passed, 0 failed, 0 skipped, 96 objects created and deleted
--- PASS: TestContract (1.32s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.07s)
ok  	latere.ai/x/arca/test/conformance	1.391s

Release evidence

  • Tag: v0.6.0
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.6.0
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

Arca v0.5.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 09:07

Breaking

  • A space is one tree under files/. The /v1/workspaces routes, the
    workspace.* actions, the Workspace kind, the workspaces plane, the
    attach, release and sync events, the reaper's lease passes, the
    lease metrics and the codes slug_taken, writer_held,
    lease_not_held, manifest_incomplete and attachment_gone are
    removed. Migration 0006_one_tree moves each workspace's objects, with
    their versions, stars, grants and links, to files/workspaces/<slug>/
    in the same space, and drops the two workspace tables. It runs forward
    only. A /v1/workspaces route now answers 404 not_found, and a path
    under workspaces/ answers 400 unknown_plane.

Added

  • A folder is deleted or copied in one call.
    DELETE /v1/files/{owner}/{path}?recursive=1 trashes everything under
    the folder, and &permanent=1 removes it with its versions.
    POST /v1/files/{owner}/{path} with {"copy_to": "files/...", "recursive": true} copies the folder on the server and answers the
    number of files and bytes copied; a folder of more than 10,000 objects
    is 422 too_many_objects.
  • An authorizer's answer can turn versions and the trash off, and leave
    folders out of a listing.
    limits.versions: false on a write keeps no
    version of what it replaces, limits.trash: false on a delete makes it
    permanent, and limits.omit, a list of folder paths, leaves those
    folders out of every answer that lists or counts: folder listings,
    downloads of a folder, the trash, the stars, the event log, the share
    and link lists, and a folder delete or copy. A space's usage stays the
    whole space's.

Fixed

  • A grant id that is not an identifier answers 404, not 500.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 53 passed, 0 failed, 0 skipped, 96 objects created and deleted
--- PASS: TestContract (1.28s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.07s)
ok  	latere.ai/x/arca/test/conformance	1.346s

Release evidence

  • Tag: v0.5.0
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.5.0
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build

Arca v0.4.2

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:00

Fixed

  • A release deploys arcad and the reaper at its own tag. The apply took the tag deploy/prod names as committed, which rolled arcad to it for a moment before the release's tag replaced it, and left the reaper, which runs the same image, on the committed tag. deploy/prod now names v0.4.1, the running release.

Security

  • A question that names a source beside its path, a move or a copy, is decided on the grant the caller holds on both paths, the lower of the two.
  • Built with Go 1.27.2 and golang.org/x/net v0.60.0, which fix GO-2026-6611, GO-2026-6612, GO-2026-6613 and GO-2026-6617.

Release evidence

Conformance

The suite of spec 017 against the published image, on the kind
stack of spec 016.

    contract_test.go:103: unverified: TestContract/006/UnlistedIssuer: an expired token and a token for another audience are refused
    contract_test.go:103: unverified: TestContract/006/AnotherSpace: a refused space answers as a missing one
    contract_test.go:103: unverified: TestContract/005/Stars: a star on an unreadable object is refused as missing
    contract_test.go:103: unverified: TestContract/008/Link: a public link serves an unauthenticated caller
    contract_test.go:103: unverified: TestContract/012/NotAnAdministrator: an administrative route is a missing object for an ordinary caller
    contract_test.go:105: 53 passed, 0 failed, 0 skipped, 48 objects created and deleted
--- PASS: TestContract (0.74s)
--- PASS: TestTheSuiteReachesNoHelperOfThisTree (0.07s)
ok  	latere.ai/x/arca/test/conformance	0.821s

Release evidence

  • Tag: v0.4.2
  • Commit: unknown
  • Origin: http://localhost:30180
  • Served version: v0.4.2
  • Smoke: /livez, /readyz, /openapi.json and /version each answered 200
  • Surface: /v1/storage/files/me/ answered 401, so the origin routes the prefix to this build