Commit Graph

2801 Commits

Author SHA1 Message Date
joshsiv-mulga d9c3f3ca6f refactor: extract RDS DB parameter group owner
Move the parameter group and override records, keys and listing into
domains/rds/parametergroup behind an Owner. Delete asks an owner-declared
Dependants interface; instance-side resolution reads through its own
parameterGroupValues interface. SetOverrides refuses an unknown group so
no override key is written without its group. Stored shape, keys, public
errors and propagation are unchanged.
2026-10-08 21:51:08 +10:00
joshsiv-mulga 5548a7039f docs: record RDS DB parameter group lifecycle contract 2026-10-08 20:43:59 +10:00
joshsiv-mulga ca1dd9aa90 test: characterize RDS DB parameter group lifecycle before extraction 2026-10-08 20:43:59 +10:00
joshsiv-mulga 15d11aff08 docs: record RDS engine catalogue owner move 2026-10-08 17:33:30 +10:00
joshsiv-mulga 4b55247819 refactor: extract RDS engine catalogue into domains/rds/engine
Move engine identity and validation, the per-engine parameter catalogues,
effective-parameter resolution, db.* instance classes and engine/orderable
selection into an engine package. Behaviour, error codes and ordering are
unchanged.

The package imports no EC2 package: instance-class memory comes from an
immutable Sizing value built from an engine-declared InstanceTypes
interface, backed by the fixed instance-type table in handlers/rds.
Effective parameters leave as an engine-owned Setting, converted to
Parameter in handlers/rds. AWS output building, paging, apply-method
mapping, storage limits and the gateway runnable check stay in the
adapter path.

The RDS agent declares its own EngineCatalog interface and types and
receives an engine-backed implementation from cmd/rds-agent, so agent
code does not import the catalogue. Cross-engine tests use the two real
engines instead of a registered fake.
2026-10-08 17:33:11 +10:00
joshsiv-mulga 292803bb1c docs: record RDS engine catalogue boundary and evidence 2026-10-08 14:43:46 +10:00
joshsiv-mulga f1f194b16a fix: return InvalidParameterValue for a missing RDS master password
ValidateMasterUserPassword built the empty-password error with a bare
errors.New carrying the code only in its text, which awserrors does not
resolve, so CreateDBInstance without MasterUserPassword returned HTTP 500
ServerInternal. Build it with awserrors.Errorf like the other branches so
the gateway returns 400 InvalidParameterValue, and cover the full gateway
to RDS service path with a regression test.
2026-10-08 14:43:25 +10:00
joshsiv-mulga 955486421b test: characterize RDS engine catalogue before extraction 2026-10-08 13:58:27 +10:00
joshsiv-mulga 2b877b01a0 docs: record EKS access entry owner extraction 2026-10-08 12:34:24 +10:00
joshsiv-mulga 68ee6f620c refactor: extract EKS access entry owner into domains/eks/access
Move the access entry record, associated policy and scope types, keys,
PrincipalARNHash, the policy catalogue and group mapping into a resource
owner package. Stored JSON field names and KV keys are unchanged.

Owner is the only writer: Create, SeedCreatorAdmin, Update, Associate,
Disassociate and Delete carry the existing logic verbatim, and the put,
compare-and-set and delete primitives are private. The handler keeps AWS
validation, the cluster existence check, error mapping and projection.
Token review still reads records through the exported Get, and the cluster
prefix purge still sweeps entry keys.

List handlers/eks and the new package under spinifex_daemon so EKS-only
changes select the EKS suites.
2026-10-08 12:33:46 +10:00
joshsiv-mulga 2dec7b0de7 docs: record EKS access entry lifecycle contract 2026-10-08 11:53:52 +10:00
joshsiv-mulga b36d70b222 test: characterize EKS access entry lifecycle before extraction 2026-10-08 11:53:52 +10:00
joshsiv-mulga 37bb781c4c docs: record ECS task definition owner extraction 2026-10-08 11:08:48 +10:00
joshsiv-mulga 544b0c6a01 refactor: extract ECS task definition owner into domains/ecs/taskdefinition
Move the task definition record, container types, keys, reference parsing,
ARN helpers and the register/deregister/resolve/list logic into a resource
owner package. Stored JSON field names and KV keys are unchanged, and
revision allocation keeps its existing non-atomic read-then-write.

The owner declares its own PortMapping and SystemControl persisted types so
it no longer depends on handlers/ecs/bus; the handler translates them onto
the assign payload. Task and service launches reach task definitions only
through a launch-side taskDefinitionResolver. AWS conversion, the guest
projection and tags stay in handlers/ecs, and gateway authz only switches to
the moved reference/ARN helpers.

List handlers/ecs and the new package under spinifex_daemon so ECS-only
changes select e2e-ecs.
2026-10-08 11:07:54 +10:00
joshsiv-mulga 194deebf7b docs: record ECS task definition lifecycle contract 2026-10-08 10:36:28 +10:00
joshsiv-mulga 1cb868e682 test: characterize ECS task definition lifecycle before extraction 2026-10-08 10:36:28 +10:00
joshsiv-mulga c3b1aec23c docs: correct RDS subnet group tagging debt and conformance scope 2026-10-08 10:27:47 +10:00
joshsiv-mulga 11fab67247 docs: record RDS DB subnet group owner extraction 2026-10-08 10:03:17 +10:00
joshsiv-mulga 17dc29251d refactor: extract the RDS DB subnet group lifecycle owner
domains/rds/subnetgroup owns the db-subnet-groups/{name} record, member
subnet validation and the delete in-use guard. handlers/rds keeps AWS
validation, projection and paging and binds two consumer-owned
capabilities: the owner's Dependants (instances naming the group) and the
instance side's subnetGroupPlacement. Stored shape and behaviour are
unchanged.
2026-10-08 10:03:01 +10:00
joshsiv-mulga 56384f9046 docs: record RDS DB subnet group lifecycle contract 2026-10-08 09:46:12 +10:00
joshsiv-mulga 01276bf29d test: characterize RDS DB subnet group lifecycle before extraction 2026-10-08 09:45:59 +10:00
joshsiv-mulga a147edca53 chore: drop containerd advisory acceptance now that dev ships v2.4.1 2026-10-08 09:29:17 +10:00
joshsiv-mulga 9e77181f21 Merge origin/dev into refactor/spinifex-package-boundaries 2026-10-08 09:28:43 +10:00
joshsiv-mulga 8b6840adb0 docs: record EKS control-plane secrets persisted in the cluster record 2026-10-08 08:51:51 +10:00
joshsiv-mulga bc1d3fea51 docs: record ECS, EKS and RDS source inventory and first-resource ranking 2026-10-08 08:44:51 +10:00
joshsiv-mulga 6c50349bd8 docs: record ACM registration 2026-10-08 00:42:00 +10:00
joshsiv-mulga fdaf589ca3 refactor: register ACM control plane from its domain
domains/acm/awsapi registers the acm JSON 1.1 surface through the
ingress dispatch registry, wired by the awsgw role. The gateway drops
ACM_Request, the ACM action table and every legacy acm entry; the
import invariant now covers each registered domain.
2026-10-08 00:41:50 +10:00
joshsiv-mulga 4b0a4dd6b3 test: characterize ACM control-plane dispatch before registration
Pins full-pipeline error envelopes, a successful action, target parsing
agreement between dispatch and telemetry, authorization before the NATS
call, 413 and 503 paths, throttle/trace/audit action and the inventory.
2026-10-08 00:04:27 +10:00
joshsiv-mulga 229b0dc9c3 docs: record ingress service selection move 2026-10-07 23:43:43 +10:00
joshsiv-mulga b81ae4eb4e refactor: move AWS service selection into ingress dispatch
Selector answers served, action, error protocol, registered entry and
startup overlap. The gateway supplies its legacy tables through the
dispatch.Legacy interface; legacy dispatch and invocation building stay
in gateway.
2026-10-07 23:43:32 +10:00
joshsiv-mulga d70a5a43f7 docs: record error envelope extraction 2026-10-07 23:27:21 +10:00
joshsiv-mulga 5f66bd2a36 refactor: extract AWS error envelope rendering to ingress
ingress/aws/envelope owns the EC2, IAM-style and S3 XML error envelopes, the
AWS JSON 1.1 error body and X-Amzn-Errortype value, the JSON-protocol header
detector and the two error content types. Each shape keeps its own builder.

The gateway error writers, ErrorHandler and the legacy per-service envelope
selection stay in gateway and call the new package; gateway/eks renders its
JSON errors through it directly. A 140-case status/header/body golden
comparison across services and error writers was identical before and after.
2026-10-07 23:27:20 +10:00
joshsiv-mulga 88c7397f45 docs: record ingress pipeline deferral 2026-10-07 23:02:45 +10:00
joshsiv-mulga 2603620fb7 fix: compose the ECR control plane in the integration harness
The harness stopped wiring ECR's composed capabilities when the
authorization-token action was composed, so every integration test that
creates a repository or mints a token got ServerInternal. It now composes
ECR as the awsgw role does, sharing the OCI registry, meta store and token
issuer the /v2 data plane uses.
2026-10-07 22:59:00 +10:00
joshsiv-mulga e6622c51d2 docs: record ECR control-plane registration 2026-10-07 22:55:20 +10:00
joshsiv-mulga 6c48ab6b78 refactor: register the ECR control plane from its domain
domains/ecr/awsapi now registers the "ecr" AWS JSON 1.1 surface with the
ingress dispatch registry: action resolution, resource scope, authorisation
through the invocation, the composed capabilities and the success writer all
live with the domain. The awsgw role is the only serving composition point;
the gateway no longer imports the ECR API package and ECR leaves the legacy
service table, JSON error table and dispatch switch. The OCI /v2 route is
unchanged.

Operation coverage reads ECR's declared inventory, which the registration
uses verbatim; coverage.json is byte-identical.
2026-10-07 22:55:00 +10:00
joshsiv-mulga f1cd7c5fe8 docs: record ingress dispatch registry consumption 2026-10-07 22:35:33 +10:00
joshsiv-mulga 86a2de3ffd refactor: route registered AWS services through the ingress dispatch registry
The gateway now consumes ingress/aws/dispatch. A registered service is
accepted by the auth gate, resolves its own action label, renders errors in
its declared envelope and is dispatched with an authenticated Invocation
(account, region, policy authorisation and a lazy verified actor). Every
other service keeps the existing switch, now named as the legacy path.

The awsgw role wires an empty registry and refuses to start if a registered
name is also served by the legacy table. No service is registered yet, so
behaviour for every existing service is unchanged.
2026-10-07 22:35:21 +10:00
joshsiv-mulga 4ad0b7e8fc docs: record ingress registration phases 0 and 1 2026-10-07 22:09:54 +10:00
joshsiv-mulga 89364c1005 feat: add AWS ingress service registration contract 2026-10-07 22:09:43 +10:00
joshsiv-mulga 7047f6b368 test: characterize ECR control-plane dispatch before registration seam 2026-10-07 22:03:26 +10:00
joshsiv-mulga d3c32d099b docs: correct historical lifecycle references 2026-10-07 21:44:55 +10:00
joshsiv-mulga 70ac74a21c docs: record AWS ingress helper moves and tooling conformance 2026-10-07 18:12:29 +10:00
joshsiv-mulga ba2d59b298 refactor: move SigV4 auth-failure rate limiter to ingress/aws/ratelimit 2026-10-07 18:12:13 +10:00
joshsiv-mulga cd92661768 refactor: move AWS REST-JSON router to ingress/aws/rest 2026-10-07 15:54:32 +10:00
Julian Sommer 5529572761 release: update go.mod for v1.22.0 v1.22.0 2026-10-07 15:32:32 +10:00
Julian Sommer 5770a10090 chore: regen coverage image 2026-10-07 15:03:29 +10:00
joshsiv-mulga 7303059fc8 docs: record EC2 instance action adapter moves 2026-10-07 14:47:51 +10:00
joshsiv-mulga 931af0ea59 refactor: move EC2 spotinstance action adapters to domains/ec2/awsapi 2026-10-07 14:47:51 +10:00
joshsiv-mulga 534c5b49dd refactor: move EC2 instance action adapters to domains/ec2/awsapi 2026-10-07 14:47:51 +10:00