You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
deploy-kit generates an Application's App Roles for its language #514
deploy-kit generate identity --lang <go|kotlin|typescript|python|rust> reads an Application's client block and writes its typed App Roles (user first, then the declared roles in order), its Client id and the contract version it expects. The generated types are plain strings, so the file depends on no adapter. An application's CI can fail when the file is stale.
Acceptance criteria
Output for each language equals a committed oracle file for a worked example, byte for byte, at the CLI seam
A project without client gets no file and a clear message
A check mode exits non-zero when the committed file differs from what the generator writes
The spec chapter, CONTEXT.md and requirement ledger state the command
Blocked by #429: the compiler does not parse the client block yet (chapter 17 is specified in #430 but not implemented), and the generator reads its roles.
Decisions (2026-10-26, the maintainer), before building:
The contract version comes from the Platform document. The sign-in provider gains contract, the Principal contract version the estate's identity serves, as major.minor ("1.2" today: identity's contract/principal/v1.2.0, and the Principal's own ver is major.minor). Every generated file states it, and moving it is one platform change. A malformed value is refused.
Output.--out <file> writes the file, and without it the file goes to stdout. Package names are fixed per language: Go package identity; Kotlin requires --package (there is no JVM default); TypeScript, Python and Rust are module files with no package line. --check compares instead of writing, and exits non-zero on a difference.
Plain strings, as this ticket says. The file depends on no adapter, and the roles are user first, then the declared roles in order. The Client id is the Application Id, which names the derived Client (chapter 17).
Claimed. It is built after #628 (the 1.0 cut) lands, on the model 1.0 keeps.
Activity
ExtraToast commentedon Oct 20, 2026
Blocked by #429: the compiler does not parse the
clientblock yet (chapter 17 is specified in #430 but not implemented), and the generator reads itsroles.ExtraToast commentedon Oct 26, 2026
Decisions (2026-10-26, the maintainer), before building:
contract, the Principal contract version the estate's identity serves, asmajor.minor("1.2"today: identity'scontract/principal/v1.2.0, and the Principal's ownverismajor.minor). Every generated file states it, and moving it is one platform change. A malformed value is refused.--out <file>writes the file, and without it the file goes to stdout. Package names are fixed per language: Gopackage identity; Kotlin requires--package(there is no JVM default); TypeScript, Python and Rust are module files with no package line.--checkcompares instead of writing, and exits non-zero on a difference.userfirst, then the declared roles in order. The Client id is the Application Id, which names the derivedClient(chapter 17).Claimed. It is built after #628 (the 1.0 cut) lands, on the model 1.0 keeps.