What to build
Layer custom-claim sources onto jotsmith token mint:
--claim k=v — string-valued, repeatable
--claim-json k=<json> — JSON-valued, repeatable; supports numbers, booleans, arrays, objects
--claims-file <path> — JSON object merged in wholesale
Merge precedence (lowest → highest): --claims-file < --claim-json < --claim. Standard-claim flags from #7 always win, regardless of what any custom source tried to set.
Acceptance criteria
Blocked by
Originally created in OpenCode session ID: ses_17ca8efd8ffexLcFSysAMDVNBQ
What to build
Layer custom-claim sources onto
jotsmith token mint:--claim k=v— string-valued, repeatable--claim-json k=<json>— JSON-valued, repeatable; supports numbers, booleans, arrays, objects--claims-file <path>— JSON object merged in wholesaleMerge precedence (lowest → highest):
--claims-file<--claim-json<--claim. Standard-claim flags from #7 always win, regardless of what any custom source tried to set.Acceptance criteria
--claim k=vrepeatable; values always strings; invalidkey=valuesyntax → exit 2 with clear stderr error--claim-json k=<json>repeatable; value parsed as JSON; supports numbers, booleans, arrays, nested objects; invalid JSON → exit 2--claims-file <path>reads a JSON object from the file; non-object root or invalid JSON → exit 2claims-file < claim-json < claim < standard-claim flagsissfrom any custom source is silently ignored (config wins); documented behavior, with a unit test that assertsissmatches config even when--claim iss=evilis passed--helpfortoken mintspells out the precedence explicitlyBlocked by
token mintv1 (standard claims)Originally created in OpenCode session ID: ses_17ca8efd8ffexLcFSysAMDVNBQ