Skip to content

Integration int/m1-wave18

No Date Ruling Reason
INT-W18/1 2026-10-14 M1-39 enters as one squash of 82693e5..160c3ce onto int/m1-wave17 (e2f9eb4). Append-only files are unions: DECISIONS, the server CHANGELOG, api/operations.yaml (loginWithPassword and setMyLocalCredential enabled, neither in later), the route table and the stub server of api/routes/real_test.go, the vendor groups v-webauthn and v-xcrypto of identity's adapters (modules.yaml, .go-arch-lint.yml), the lint exclusions, the privilege table, the identity README and the expected configuration of the wire and CLI tests; docs/operations/configuration.md takes M1-39's rows for its keys and the base rows for the passkey keys. sqlc and go generate regenerated the models, the REST package, the routes and config-schema.json. Both sides add entries; the generated files are equal to a fresh generation (make codegen-check).
INT-W18/2 2026-10-14 Semantic conflict: M1-40 (base) and M1-39 each built the conditional step-up of 07 section 4.2 step 8 (stepUpWaived with Input.StepUpWaived against M1-39's stepUpCondition with Input.NoCredentialYet). The base mechanism stays; local_credential.set joins its table with M1-39's condition HasEstablishedLocalCredential, and M1-39's second mechanism is gone. The line of TestLocalCredentialStepUpOnlyWhenEstablished that expected passkey.register to need step-up "until M1-40" now expects M1-40's rule (no passkey, no step-up). Two mechanisms for one rule would let them drift. Both ask the person of a self action, so local_credential.set (always self) decides the same; the test line described the state before M1-40.
INT-W18/3 2026-10-14 M1-39's migration 00018_identity_local_credentials.sql becomes 00029_identity_local_credentials.sql with unchanged content and checksum; migrations.sha256, the identity README and the server CHANGELOG name the new file, the rulings of M1-39 keep the name the ticket wrote. goose refuses a duplicate version (the base already has 18 to 28); ADR 0007 rule 4 and INT-W13/2: the branch merged later renumbers. No migration is released.
INT-W18/4 2026-10-14 Duplicate declarations of the merged package: causePersonNotActive and attrIdentityID (identity app, same values in the passkey and OIDC code) and optionalTS (identity adapters/postgres, same body in the pairings code) are declared once; M1-39's copies are gone. The packages did not compile; the values are identical, so behaviour is unchanged.
INT-W18/5 2026-10-14 Test code only: the session world of identity/adapters/httpapi takes worldOptions (M1-39: configuration change and hasher) with the binds of M1-41 as a field; the trusted header world (M1-43) passes its configuration through worldOptions.cfg. BindLocal runs after BindSessions and before the binds; the routes get the handlers of both tickets. In wire, startSessions binds OIDC and then the local accounts, and the login completion lists the passkey and the local source. Both tickets changed the same helper signature and the same start step; the union keeps every caller's behaviour.
INT-W18/6 2026-10-14 The merged .golangci.yml lost the linters and text of the passkey exclusion (M1-40), which made golangci-lint refuse its configuration; both lines are back. tools/configdoc/planned.yaml drops the rule auth. (M1), because with M1-39 every auth.* key of M1 is in the schema (config-doc D6: a rule without a planned key is stale). make lint and make config-doc-check were red on the merged head; neither change alters runtime behaviour.
INT-W18/7 2026-10-14 Test code only: TestLocalCredentials_UseCases (identity app, the use cases of LocalCredentials in the people world, which now sets M1-39's keys in loginCfg) and TestLocalCredentialStoreRoundTrip (identity adapters/postgres, every method of LocalCredentialStore) exercise M1-39's code in its own packages. The coverage gate counts each package by its own tests; M1-39's use cases and store were covered only through the HTTP tests, and the merged head measured 79.5 % against the minimum of 80 % (make coverage red). The tests assert behaviour the HTTP tests already hold; no production code changes.