Skip to content

No plugin manifest and no release: the server works but no workspace can compose it #12

Closed

Description

@antoinetoussaint-byte

service-warehouse is a working server that no Codefly workspace can compose: it declares no plugin manifest and carries no release tag. That makes it the one blocker on a handbook rule that has just been proposed on the strength of it.

Why this is now blocking something

obin-ai/handbook#253 proposes, for every repo in the fleet: a vendor backend lives behind its codefly gateway service, and a repo never links the vendor's SDK. The object-storage half of that rule binds today — service-object-storage is released at v0.0.12. The warehouse half cannot bind, because a rule cannot require a consumer to compose a server that has no manifest and no version to pin.

The handbook's own inventory already files this repo under "Not agents yet, despite the name" — design/service-and-agent-inventory.md:188: "a working server with no plugin manifest."

What it is costing right now

codefly-dev/module-saas-starter#1000 makes a warehouse the audit store of record. Unable to consume this service, it links the vendors directly into accounts — the service holding authentication, sessions, roles and the signing keys:

dependency files importing it
cloud.google.com/go/bigquery v1.85.0 10
github.com/ClickHouse/clickhouse-go/v2 v2.48.0 15
github.com/apache/arrow/go/v15 2
github.com/aws/aws-sdk-go-v2 (+ config, credentials, s3) 4
cloud.google.com/go/storage 2

With them come two complete warehouse adapters and a 690-line hand-written BigQuery test double — 9,833 added lines — because BigQuery cannot be run locally. That PR's own validation section records the consequence: "Live BigQuery and replicated ClickHouse integration were not run for these changes."

This repo's DuckDB engine is the answer to exactly that: a real engine locally, the real warehouse deployed, the gap absorbed and tested once here instead of per consumer.

Asks

  1. A plugin manifest (agent.codefly.yaml), so a workspace can compose this as a service the way it composes service-object-storage.
  2. A release tag, so a consumer can pin it.

One question the first consumer needs answered

The audit relay in #1000 quarantines a row only when the store reports it permanently refused that row, distinguishing per-row rejection from a whole-batch store failure — today by reading vendor-specific signals (BigQuery per-row invalid, a row too large, an unencodable value; ClickHouse malformed-row error codes isolated by splitting to single rows).

This service normalizes errors to gRPC status codes "so clients never parse a vendor SQLSTATE or reason string", which is the right posture. The question is whether InsertRows can carry per-row refusal detail through that normalization, finely enough for a caller to set aside exactly the rows the backend permanently rejected and retry the rest.

If it can, the rule in handbook#253 binds cleanly and #1000's quarantine classification gets simpler. If it cannot, that proposal says the rule needs a stated exception path before it binds — so this is worth answering against the proto either way, and it is the one input named as able to flip the proposal.

Not verified

I read this repo's README and its API table, and did not compose, run or call the service, or exercise any backend through it.

Activity

  1. antoinetoussaint-byte commented on Oct 11, 2026

    @antoinetoussaint-byte
    ContributorAuthor

    Both asks are delivered, in v0.0.2.

    1. Plugin manifest. agent.codefly.yaml landed in #13 (22a79233). A workspace composes this service the way it composes service-object-storage.

    2. Release tag. v0.0.2 (tag d2282676 on 9163001) was cut by codefly publish. Its agent CI passed 6/6, and the tag's release workflow (run 38165466316) succeeded. The GitHub release carries 12 assets: darwin and linux archives for amd64 and arm64, SBOMs, the image SBOM documents, an index, and checksums.

    Gateway image: ghcr.io/codefly-dev/service-warehouse@sha256:052aba76b0ee7f01a6e0f2c3ba900b4d991056047401d8bcbf544f6b6e2610a1.

    Full conformance: agent-ci on main (run 38167325616) passed, and since #18 it runs on every pull request.

    The per-row question: not yet. At v0.0.2, InsertRowsResult.errors is repeated RowError { int64 row_index = 1; string error = 2; } (proto/codefly/warehouse/v0/warehouse.proto:309-319).

    • InsertRows does say which rows were refused, by offset.
    • It does not say whether a refusal is permanent or retryable: error is free-form text with no code.
    • So a consumer like module-saas-starter#1000 still cannot quarantine exactly the permanently rejected rows without parsing text.

    #14 ("portable per-row refusal reasons") is the change that would make the answer yes. Until it lands, handbook#253's warehouse half needs its stated exception path for per-row quarantine.

  2. antoinetoussaint-byte commented on Oct 11, 2026

    @antoinetoussaint-byte
    ContributorAuthor

    lazybox has finished working on this. claude (Opus 5) held it from 2026-10-11 20:53 UTC until 2026-10-11 21:17 UTC. The working label has been removed; this comment is the record.

    claim detail
    Lazybox-Claim-Device: effacd542b611010656e
    Lazybox-Claim-Session: c96f026ca1
    Lazybox-Claim-Workspace: github-codefly-dev-service-warehouse-12
    Lazybox-Claim-Agent: claude
    Lazybox-Claim-Model: Opus 5
    Lazybox-Claim-Started: 2026-10-11T20:53:51Z
    Lazybox-Claim-Heartbeat: 2026-10-11T21:17:21Z
    Lazybox-Claim-Expires: 2026-10-11T22:14:56Z
    Lazybox-Claim-Released: 2026-10-11T21:17:21Z
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions