Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
178 commits
Select commit Hold shift + click to select a range
a007ec3
docs: Parity Phase 4 kickoff — LocalStack Pro interconnectivity inten…
Jul 12, 2026
f1a54d2
parity(s3): re-audit ledger update — no code bugs found
Jul 12, 2026
33a39b1
parity(ec2): re-audit ledger update — no code bugs found
Jul 12, 2026
85e7621
parity(lambda): re-audit ledger update — no code bugs found
Jul 12, 2026
6f19cb9
parity(dynamodb): re-audit ledger update — no code bugs found
Jul 12, 2026
3d4de4f
parity(iam): add InstanceProfileList to GetAccountAuthorizationDetail…
Jul 12, 2026
c23c139
parity(sns): re-audit ledger update — no code bugs found
Jul 12, 2026
ff47d82
parity(sqs): fix SendMessage error code + SendMessageBatch validation…
Jul 12, 2026
eb94f3c
parity(secretsmanager): re-audit ledger update — no code bugs found
Jul 12, 2026
55138b1
parity(sts): re-audit ledger update — no code bugs found
Jul 12, 2026
d9cb5d1
parity(kms): fix error classification — missing entries + wrong fallb…
Jul 12, 2026
2b2086c
parity(kinesis): reject equal RetentionPeriodHours in Inc/DecreaseStr…
Jul 12, 2026
3884816
parity(firehose): fix DescribeDeliveryStream destination wire shape
Jul 12, 2026
95dfa09
parity(cloudwatchlogs): re-audit + remove orphaned ErrInvalidSequence…
Jul 12, 2026
dad3e28
parity(cloudwatch): enforce PutMetricData Timestamp acceptance window
Jul 12, 2026
83adaeb
parity(ecs): DescribeCapacityProviders partial-success Failures inste…
Jul 12, 2026
f9058cf
parity(rds): flatten over-nested response shapes for 10 mutating ops
Jul 12, 2026
d6fae6d
parity(apigateway): add ApiKey.CustomerId field to create/get/update
Jul 12, 2026
f615e2f
parity(apigatewayv2): implement CreateApi/UpdateApi quick-create (rou…
Jul 12, 2026
43aa6d6
parity(cloudformation): fix 4 not-found error-shape bugs across Stack…
Jul 12, 2026
f9dfaef
parity(eventbridge): re-audit ledger update — no code bugs found
Jul 12, 2026
2d2b1b9
parity(stepfunctions): re-audit ledger update — no code bugs; cli.go …
Jul 12, 2026
ee7d2ba
parity(ssm): implement SSM Cloud Connectors (6 ops from SDK v1.71.0)
Jul 12, 2026
1b31b73
parity(route53): fix HealthCheckVersion, delegation-set wiring, CIDR/…
Jul 12, 2026
a591f08
parity(cognitoidp): honor PreventUserExistenceErrors in ForgotPasswor…
Jul 12, 2026
cc66a88
parity(elasticache): re-audit ledger update — no code bugs found
Jul 12, 2026
a8c6614
parity(opensearch): fix IdentityCenterOptions, DomainId, EngineType, …
Jul 12, 2026
014ca14
parity(cloudfront): re-audit ledger update — no code bugs found
Jul 12, 2026
afd11b3
parity(glue): fix trigger semantics, resource-policy conditions, poin…
Jul 12, 2026
d125027
fix(cloudformation): update CreateHostedZone call for new route53 del…
Jul 12, 2026
32733a4
parity(autoscaling): honor terminating lifecycle hooks on scale-in path
Jul 12, 2026
1eb3991
parity(sagemaker): validate EndpointConfig + populate ProductionVaria…
Jul 12, 2026
85ec595
feat(interconnect): wire SFN->ECS/Glue/EventBridge + EventBridge exte…
Jul 12, 2026
fb326e8
feat(cognitoidp): invoke User Pool Lambda triggers (PreSignUp/PostCon…
Jul 12, 2026
ed56cc3
feat(appsync): add snapshot/restore persistence
Jul 12, 2026
91d3c00
feat(interconnect): wire Cognito User Pool Lambda triggers to Lambda …
Jul 12, 2026
cacefb8
feat(athena): add snapshot/restore persistence
Jul 12, 2026
49a3543
feat(securityhub): expose Handler-level Snapshot/Restore so it actual…
Jul 12, 2026
a0c4fa2
feat(bedrock): add snapshot/restore persistence (Handler + AgentsHand…
Jul 12, 2026
cfdae26
docs(dynamodbstreams): document why Handler holds no persistable state
Jul 12, 2026
ea37fcf
test(bedrock): byte-identical re-snapshot completeness proof for pers…
Jul 12, 2026
7ca7fe0
fix(persistence): expose Handler-level Snapshot/Restore for 7 silentl…
Jul 12, 2026
cf13689
feat(interconnect): Auto Scaling launches real EC2 instances on scale…
Jul 12, 2026
5256fdd
feat(interconnect): register ASG instances and ECS tasks as ELBv2 tar…
Jul 12, 2026
0d0d1cc
parity(quicksight): fix fabricated ingestion, invalid status enums, g…
Jul 12, 2026
5ad6550
parity(iot): fix AttributePayload merge default, billingGroup wiring,…
Jul 12, 2026
61ba31a
parity(redshift): fix snapshot-restore panic + stuck status, ModifyCl…
Jul 12, 2026
d13e230
parity(dax): fix wire keys, epoch timestamps, enum casing
Jul 12, 2026
d56dc52
parity(dms): implement Serverless Replication lifecycle + subnet-grou…
Jul 12, 2026
1c6af31
parity(backup): fix route matcher + many unreachable ops, 404 semanti…
Jul 12, 2026
d70bf11
parity(directoryservice): fix persistence registration, epoch timesta…
Jul 12, 2026
7c297a5
parity(transfer): fix server initial state, tag-store init, missing W…
Jul 12, 2026
437393d
parity(eks): fix route matcher (many unreachable ops) + rebuild Capab…
Jul 12, 2026
087cb59
parity(sesv2): fix route matcher (30 misrouted ops) + PascalCase wire…
Jul 12, 2026
d55cd19
parity(memorydb): fix auth enum, error __types, subnet-group in-use, …
Jul 12, 2026
7f3594f
parity(neptune): fix error codes, Failover no-op, missing *Result wra…
Jul 12, 2026
8ec3c0f
parity(guardduty): fix PATCH route, tag partition, wire keys + epoch …
Jul 12, 2026
43c8458
parity(s3control): fix 9 route-matcher bugs + service-wide error enve…
Jul 12, 2026
dcfc1e0
parity(workmail): fix CreateOrganization Domains shape + many wrong w…
Jul 12, 2026
42cff5c
fix(kms): CreateKey now honors inline Policy (Terraform GetKeyPolicy …
Jul 12, 2026
bfd8e39
parity(omics): fix waiter-hang states, pagination query params, run-b…
Jul 12, 2026
05e127f
parity(cleanrooms): fix ARN-path routing, waiter-hang statuses, tag v…
Jul 12, 2026
bb5fcae
parity(bedrockagent): fix route-matcher method collisions + fictional…
Jul 12, 2026
321bfb0
parity(kms): ReplicateKey inline Policy + tag persistence (Terraform …
Jul 12, 2026
c21fb07
parity(iotwireless): fix Tags shape, tag/partner routing, error typin…
Jul 12, 2026
c4a9047
parity(pinpoint): fix journey-metrics route, no-op RemoveAttributes, …
Jul 12, 2026
5d2824c
parity(athena): fix wire field names + missing session/notebook/dashb…
Jul 12, 2026
4bece54
parity(medialive): fix PascalCase wire keys + tag state-desync (Chann…
Jul 12, 2026
5845d0e
parity(appsync): fix Update-op methods, Tags/ApiCache/Evaluate paths,…
Jul 12, 2026
066717f
parity(securityhub): fix ConfigPolicy target derivation, InviteMember…
Jul 12, 2026
fb5f045
parity(medialive): finish lowerCamel wire-key sweep across remaining …
Jul 12, 2026
01dbe28
parity(kafka): fix route-matcher paths for cluster updates, vpc-conn,…
Jul 12, 2026
6904688
parity(bedrock): fix PATCH body-reader root cause, guardrail config s…
Jul 12, 2026
db25aea
parity(batch): validate jobDefinition on SubmitJob + fix Timeout/Cons…
Jul 12, 2026
b949a42
parity(kms): region-scoped grant/policy resolution + DescribeKey Gran…
Jul 12, 2026
d7ff080
parity(efs): fix tag-op routing + error status codes
Jul 12, 2026
7d9bd03
parity(emr): fix epoch-seconds timestamps, step waiter-hang, no-op Mo…
Jul 12, 2026
d54e01a
parity(fsx): fix CreationTime epoch format (7 resources) + generic Re…
Jul 12, 2026
2b6e7cf
parity(docdb): fix AZ nesting, request list member names, error-code …
Jul 12, 2026
88e5afd
parity(glacier): emit ArchiveSHA256TreeHash + archive-description hea…
Jul 12, 2026
f86ef17
parity(mq): fix StorageType enum case, user/password validation, stat…
Jul 12, 2026
012f98a
parity(appconfig): fix HostedConfigVersion header binding + Update pa…
Jul 12, 2026
22d6964
parity(organizations): use real caller account as mgmt account + wire…
Jul 12, 2026
797174d
parity(wafv2): add Description to Create* Summary + missing error-cod…
Jul 13, 2026
82c8a1c
parity(route53resolver): fix Disassociate input shapes, OwnerId casin…
Jul 13, 2026
1b07910
parity(macie2): fix PATCH->PUT routes, wrong query keys/wrappers, mis…
Jul 13, 2026
e3fd8ba
parity(workspaces): fix awserr.Newf arg order, batch partial-failure,…
Jul 13, 2026
980dbe2
feat(interconnect): encrypt Secrets Manager values via real KMS (Pro-…
Jul 13, 2026
0a5200a
parity(xray): fix Insight/Sampling Get routes + persist traceSegmentDest
Jul 13, 2026
2ca17ef
parity(awsconfig): fix error-type strings + 6 disguised no-ops
Jul 13, 2026
8379d34
parity(codecommit): fix DescribeMergeConflicts no-op, empty blobId, n…
Jul 13, 2026
6642a73
parity(datasync): fix task-execution state machine, SAS-token leak, l…
Jul 13, 2026
d1ca356
parity(rekognition): fix epoch timestamps, already-exists error types…
Jul 13, 2026
ecdacf0
parity(vpclattice): fix failure wire keys, missing successful/summary…
Jul 13, 2026
a675197
test(vpclattice): consolidate ad-hoc parity_a/b tests into handler_te…
Jul 13, 2026
1e21a84
parity(ssoadmin): fix DescribeRegion stub, RegionMetadata shape, acce…
Jul 13, 2026
49e505c
parity(inspector2): fix BatchGetAccountStatus shape + epoch timestamps
Jul 13, 2026
27106d4
parity(lakeformation): fix epoch timestamps, credential shapes, txn c…
Jul 13, 2026
de5340f
parity(elb): add required *Result XML wrappers + correct error types
Jul 13, 2026
cf40ff4
parity(elasticbeanstalk): fix platform ARN account, DateUpdated, orph…
Jul 13, 2026
e3d7c85
parity(opsworks): fix Start/Stop/Reboot instance+stack stuck-status n…
Jul 13, 2026
a7d6e20
parity(ce): fix exception HTTP 400, monitor/subscription error types …
Jul 13, 2026
f8a54fd
parity(appstream): fix ARN-vs-Name lookups, state-conflict error type…
Jul 13, 2026
59ab8f6
parity(fis): fix fabricated exception types + ExperimentError wire shape
Jul 13, 2026
51e3b67
parity(elasticsearch): fix ListDomainNames + software-update route paths
Jul 13, 2026
0627d5d
parity(codedeploy): fix epoch-millis timestamps, StopStatus enum, not…
Jul 13, 2026
b7a4fb1
parity(codepipeline): fix execution stuck-status, fabricated not-foun…
Jul 13, 2026
8d42b94
parity(codebuild): advance stuck IN_PROGRESS builds + mirror Webhook …
Jul 13, 2026
174b1f5
parity(ram): fix partial-mutation on validation, permission version, …
Jul 13, 2026
0e2e9a9
parity(cloudtrail): fix KmsKeyId casing, GenerateQuery/EventConfig sh…
Jul 13, 2026
0c28f5b
parity(scheduler): fix tags list shape, UntagResource TagKeys, Update…
Jul 13, 2026
7d7a336
parity(transcribe): fix epoch timestamps + tag creation/sync
Jul 13, 2026
1ef2531
parity(textract): fix ClientRequestToken idempotency + GetLendingAnal…
Jul 13, 2026
d9aee9c
parity(accessanalyzer): fix Finding routes + wire shape
Jul 13, 2026
77f289e
parity(swf): fix json-1.0 content-type, initial decision task, closed…
Jul 13, 2026
b9f4006
parity(waf): enforce ChangeToken workflow + ReferencedItem, fix GetSa…
Jul 13, 2026
f779cb6
parity(verifiedpermissions): fix IsAuthorized decision shapes + filte…
Jul 13, 2026
69eefab
parity(codeartifact): fix route paths, query-param casing, wire names…
Jul 13, 2026
efd78e5
parity(personalize): fix UpdateSolution fields, MetricAttribution met…
Jul 13, 2026
a910ab5
parity(managedblockchain): fix Node family routing (entirely unreacha…
Jul 13, 2026
b8fcf19
parity(s3tables): fix ARN-only GetTable, GetTableEncryption fabricati…
Jul 13, 2026
5d5b218
parity(iotanalytics): fix create-time tag validation, dataset-content…
Jul 13, 2026
911ff16
parity(pipes): fix tag limit, UpdatePipe DELETING guard, DELETED requ…
Jul 13, 2026
ec52168
parity(apprunner): fix exception __type strings (untyped client errors)
Jul 13, 2026
8a90ed9
parity(mediaconvert): fix tag routing + request field names
Jul 13, 2026
024e43b
parity(shield): fix DescribeSubscription TimeCommitment wire field
Jul 13, 2026
659c961
parity(mediatailor): fix tags key, epoch timestamps, prefetch routing…
Jul 13, 2026
c252f66
parity(acm): fix KeyUsages/ExtendedKeyUsages plural wire keys
Jul 13, 2026
9a4257a
parity(cognitoidentity): fix Expiration epoch-seconds + OpenIdConnect…
Jul 13, 2026
6bf60b6
parity(amplify): advance stuck jobs/domains, add error typing + jobArn
Jul 13, 2026
782e2a9
parity(servicediscovery): fix DeleteService cascade, health filters, …
Jul 13, 2026
343e120
parity(databrew): fix error typing, tag/recipe routes, job output, fi…
Jul 13, 2026
7779f21
parity(kinesisanalyticsv2): fix optimistic concurrency, operations/ve…
Jul 13, 2026
d6bfd3a
parity(resourcegroups): fix Owner key, output nesting, config shape, …
Jul 13, 2026
3f6a5e9
parity(kinesisanalytics): fix Update wire shapes, ReferenceRoleARN, t…
Jul 13, 2026
40f0592
parity(codestarconnections): fix SyncBlocker shape, error types, epoc…
Jul 13, 2026
a872ba9
parity(appmesh): add response wrapper keys (28 ops) + honor limit param
Jul 13, 2026
66d758b
parity(identitystore): CreateGroup only requires IdentityStoreId
Jul 13, 2026
87c87b3
parity(detective): fix CreateMembers unprocessed, StartInvestigation …
Jul 13, 2026
59739a9
parity(acmpca): fix base64 blob decoding (IssueCertificate/Import bro…
Jul 13, 2026
07f98c0
parity(rolesanywhere): fix UntagResource body, delete-echoes-resource…
Jul 13, 2026
749ff93
parity(serverlessrepo): fix InternalServerErrorException type + polic…
Jul 13, 2026
df8c637
parity(codeconnections): real SyncBlocker store, in-use/dup checks, e…
Jul 13, 2026
139000b
parity(timestreamwrite): fix json-1.0 content-type, error status, ato…
Jul 13, 2026
e15f163
parity(support): ResolveCase idempotent + DescribeSupportedLanguages …
Jul 13, 2026
a98a164
parity(mwaa): fix UpdateEnvironment network shape + fabricated except…
Jul 13, 2026
a7e2082
parity(timestreamquery): fix PrepareQuery no-op, ExecutionTimeInMilli…
Jul 13, 2026
0e93373
parity(applicationautoscaling): fix PolicyType default, ARN colon, ep…
Jul 13, 2026
6ec6dbf
parity(comprehend): fix Start*Job tag-sync, timestamp fields, flywhee…
Jul 13, 2026
b0d0cfe
parity(resourcegroupstaggingapi): fix error types, S3BucketRegion, Ge…
Jul 13, 2026
6eeaefc
parity(polly): add ogg_opus/mulaw/alaw formats, fix error taxonomy + …
Jul 13, 2026
78b1571
parity(emrserverless): honor clientToken idempotency + persist applic…
Jul 13, 2026
1c45a3b
parity(mediapackage): fix RotateChannelCredentials route/semantics, C…
Jul 13, 2026
15c06ec
parity(translate): base64 blobs, job lifecycle, terminology application
Jul 13, 2026
7262a2b
parity(redshiftdata): fix ColumnMetadata length key, TableName shape,…
Jul 13, 2026
dfd2cb8
parity(bedrockruntime): fix ARN modelId truncation, CountTokens union…
Jul 13, 2026
57398ee
parity(mediastore): strip doubled ValidationException prefix from err…
Jul 13, 2026
1283500
parity(iotdataplane): fix ConflictException, shadow version persisten…
Jul 13, 2026
05aca6b
parity(appconfigdata): fix identifier max length, drop fabricated exc…
Jul 13, 2026
987784d
parity(networkmonitor): validate packetSize/protocol, harden UpdateProbe
Jul 13, 2026
142c3c2
parity(forecast): ResourceNotFound on tag ops, validate NextToken
Jul 13, 2026
39bbea1
parity(apigatewaymanagementapi): LimitExceeded on full buffer, error …
Jul 13, 2026
0689b86
parity(rdsdata): implement FormatRecordsAs, full ColumnMetadata shape…
Jul 13, 2026
669b02e
parity(cloudcontrol): fix error taxonomy, HTTP statuses, add Resource…
Jul 13, 2026
cafbb3e
parity(mediastoredata): reject STANDARD storage class (not a StorageC…
Jul 13, 2026
09d84f1
parity(account): rewrite to real POST /opName wire protocol, add prov…
Jul 13, 2026
aadd46a
feat(account): register Account Management provider in server
Jul 13, 2026
95ab058
parity(dlm): fix repeated-query list filters, implement ignored filte…
Jul 13, 2026
b151a44
parity(sagemakerruntime): fix ValidationError type, host prefix, asyn…
Jul 13, 2026
125fd6b
parity(dynamodbstreams): audit ledger — no bugs, all 4 ops verified
Jul 13, 2026
36f93eb
fix(transcribe): decode Tags as real AWS []Tag list, not map (CI: Cre…
Jul 14, 2026
95ca9c6
fix(kafka): raise tag-route MatchPriority above appsync's greedy /v1/…
Jul 14, 2026
b9fa805
fix(appmesh): return single-resource responses at top level (httpPayl…
Jul 14, 2026
81f9d6d
test: align e2e/integration expectations with parity fixes
Jul 14, 2026
4159065
fix(elasticsearch): restore GET /es/domain -> ListDomainNames alias (…
Jul 14, 2026
b0a841f
fix(kinesis): make Inc/DecreaseStreamRetentionPeriod idempotent on eq…
Jul 14, 2026
fd1f457
test(e2e): transfer dashboard — start server to reach ONLINE before a…
Jul 14, 2026
878ae87
fix(sagemaker): eliminate data race in per-region lazy-init store hel…
Jul 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
41 changes: 34 additions & 7 deletions .beads/issues.jsonl

Large diffs are not rendered by default.

68 changes: 68 additions & 0 deletions PARITY_PHASE4_KICKOFF.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Parity Phase 4 — Kickoff

**Branch:** `parity-4` (off `main`). **Project:** gopherstack — a LocalStack-style AWS emulator (Go 1.26, module `github.com/blackbirdworks/gopherstack`).

> Read this first, then `bd prime` (beads context) and `.claude/memories/*.md`.

---

## North star — LocalStack parity

gopherstack emulates AWS. The goal is **parity with LocalStack**: first Community-level per-service correctness (done for the top services), then **LocalStack Pro cross-service interconnectivity** (Phase 4, this branch). Deep, gated-green, no stubs.

## Phase status

- **Phase 2 — Parity sweep, top-30 AWS services** ✅ done (on `main`). ~19k LOC genuine fixes; every service found real bugs. Each service has a `services/<svc>/PARITY.md` manifest.
- **Phase 3 — Datalayer refactor to `pkgs/store`** ✅ complete but **NOT on this branch** — it lives on `parity-sweep-3` / PR #2382 (203 commits, unmerged into `main` as of parity-4 creation). All 154 backends converted from raw maps to the generic `pkgs/store` datalayer (`Table[V]`/`Registry`/`Index[V]`), plus follow-up fixes. **Phase 4 branches off `main` per instruction, so it does NOT include the datalayer work** — reconcile once #2382 merges (rebase parity-4 on updated main, or merge main in). Phase 4 (cli.go interconnect wiring) is largely independent of whether backends use maps or store, so this is workable but keep it in mind for any backend-touching change.
- **Phase 4 — LocalStack Pro interconnectivity parity** ← THIS BRANCH (`gopherstack-wdw`).

## Phase 4 scope — LocalStack Pro cross-service interconnectivity

Match LocalStack **Pro**'s cross-service matrix. The deliverable is a **web-verified Pro-vs-gopherstack gap artifact**, then implementing the missing links with **real delivery, no stubs**.

1. **Web-research** LocalStack Pro's interconnectivity matrix (docs.localstack.cloud): IAM enforcement, real ECS/EKS/Fargate execution, EventBridge Pipes, full Step Functions service integrations, Cognito Lambda triggers, advanced API Gateway, App services, X-Ray, etc.
2. **Diff** that matrix against gopherstack's current cross-service wiring (primarily `cli.go` — where SNS→Lambda/Firehose, EventBridge targets, etc. are wired) and the per-service PARITY.md ledgers.
3. **Implement** the missing links — real event delivery/execution, no disguised no-ops.
4. **Deliverable:** the web-verified Pro-vs-gopherstack matrix artifact + closed gaps.

Known Community-level interconnect gaps already filed (check bd): EventBridge non-core targets, ASG→EC2, ASG/ECS→ELBv2.

---

## The workflow — "parity sweep" methodology

**Orchestration (global VM directive):** main thread orchestrates; delegate substantive work to **≤2 concurrent `sonnet` subagents**, delegation depth 1 (subagents never spawn subagents). Main thread only: plan / dispatch / verify / integrate / git.

**Per service (audit or fix):**
- One sonnet subagent, depth-1, edits ONLY its `services/<svc>/`. Shared `pkgs/`/`cli.go` findings → REPORT as follow-up (never edit from a per-service agent — parallel agents collide on shared files).
- **git-safety ABSOLUTE:** subagents use read-only git only (`status`/`diff`/`show`/`log`) — NO stash/checkout/reset/add/commit. The **main thread commits** (`git add services/<svc>/` + push).
- Gate **scoped** to the service (NOT whole-repo `go build ./...` — it times out ~3min): `go build ./services/<svc>/...` + `-race` test + `go vet` + `go fix -diff` (empty) + `golangci-lint run ./services/<svc>/...` (0 issues).
- **No-stub rule (core):** never ship stub/disguised-no-op methods. Verify wire-shape against the real AWS SDK.
- Each audit **writes/updates `services/<svc>/PARITY.md`** (schema: `services/_PARITY_TEMPLATE.md`) — YAML-frontmatter ledger: `last_audit_commit`, `sdk_module`+version, per-op/family `{wire,errors,state,persist}` status, `gaps` (with bd ids), `deferred`, `leaks`.
- **Re-audit protocol:** don't rescan a service — read its PARITY.md, `git diff <last_audit_commit>..HEAD -- services/<svc>/`, check the SDK for new ops; audit only changed/new surface, trust unchanged `ok` rows.

**Cross-service interconnect (the Pro-parity heart of Phase 4):** wired in `cli.go` (real delivery, no stubs). Since `cli.go` is shared, interconnect changes are **main-thread work** or serialized single-agent — never parallel per-service agents.

**Signature-safety:** exported-signature changes used outside a service (esp. `cli.go`) → report prominently, prefer additive. (History: a cloudwatch signature change broke cli.go PutMetricData; a PutEvents signature change broke two cli.go call sites — both cross-package, missed by scoped gates.)

**Tests:** table-driven (`Test_Thing` + cases + `t.Run`, isolated per-subtest state).

## Tracking & conventions

- **bd (beads)** for ALL task tracking — `bd prime` for full workflow, `bd ready` / `bd show <id>` / `bd update <id> --claim` / `bd close <id>`. Do NOT use TodoWrite/markdown TODOs.
- **`bd remember`** for persistent knowledge (NOT MEMORY.md). Search: `bd memories <keyword>`.
- Read `.claude/memories/pkgs-catalog.md` and `.claude/memories/parity-principles.md` before coding.
- **Session close:** `git pull --rebase` → `bd dolt push` → `git push` → confirm "up to date with origin".

## Key references

- bd memories: `parity-principle-never-ship-stub-methods`, `pkgs-catalog`, `parity-manifest-per-service`, `test-style-table-tests`, `file-naming-descriptive`, `no-nolint-funlen-cyclo-refactor-instead`.
- `services/_PARITY_TEMPLATE.md` — the PARITY.md schema.
- `cli.go` — cross-service interconnect wiring (the Phase 4 focus).

## Resume command (new session)

```
git status && git log --oneline -5 && bd prime && bd ready
```
Then read this file + `.claude/memories/*.md`, and start Phase 4 at step 1 (web-research the LocalStack Pro matrix).
Loading
Loading