Skip to content

deploy-kit generates an Application's App Roles for its language #514

Closed

Description

@ExtraToast

Parent

JorisJonkers-dev/identity#105 (spec), under the Epic linked once it exists.

What to build

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

Activity

  1. added
    type: featureNew user-facing or operator-facing capability.
    area: authAuthentication, authorization, sessions, or identity.
    status: ready-for-agentFully specified; an agent may take it with nobody watching.
    on Oct 20, 2026
  2. ExtraToast commented on Oct 20, 2026

    @ExtraToast
    ContributorAuthor

    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.

  3. added and removed
    status: ready-for-agentFully specified; an agent may take it with nobody watching.
    on Oct 26, 2026
  4. ExtraToast commented on Oct 26, 2026

    @ExtraToast
    ContributorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: authAuthentication, authorization, sessions, or identity.type: featureNew user-facing or operator-facing capability.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions