Co-authored-by: Danny Kim <temeddix@gmail.com> Co-committed-by: Danny Kim <temeddix@gmail.com>
1.9 KiB
description
| description |
|---|
| Enum-like string values are UPPER_SNAKE everywhere this repo owns the format, JSON included; external standards are converted at the boundary with explicit switch functions |
Decided 2026-10-19 (all repos). An enum-like string value, a member of a
string-literal union, is UPPER_SNAKE wherever this repo owns the format:
TypeScript unions, profiles.json, the runtime outcome file, and the
anchors.json the agent writes per prompt.md. explicit-types
upper-snake-string-unions enforces it and stays on.
A value an outside party defines (a CLI flag, an environment variable name,
an HTTP API field, a human-readable message) is converted at the boundary by
an explicit switch function, never by renaming our own values to match it:
export interface ProfileIdentity {
type: "CLAUDE" | "CODEX" | "OPENCODE";
model: string;
}
// The agent name the skills installer knows each profile type by.
function skillsAgent(type: RuntimeProfile["type"]): string {
switch (type) {
case "CLAUDE":
return "claude-code";
case "CODEX":
return "codex";
case "OPENCODE":
return "opencode";
}
}
In this repo:
- Profile
type:CLAUDE,CODEX,OPENCODE(also inprofiles.json).skillsAgent()(run phase) andtokenVariable()(profiles) map them to the installer's agent name and the credential environment variable;defaultModel()(credentials) picks a model. FailureReason:SIGN_IN_FAILED,USAGE_EXHAUSTED,FAILED;toMessage()gives the words that logs and posted comments show.- Anchor
side:NEWorOLD(prompt.mdtells the agent so); the Gitea review call turns it intonew_position/old_position.
A lookup object keyed by enum values would need UPPER_SNAKE keys, which
explicit-types no-upper-snake-object-keys bans, so use a switch. TypeScript
checks such a switch for exhaustiveness through the declared return type; no
default: branch (lint-config).