| 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. |