1---2name: ase-meta-mint3description: Mint an identifier or a name of a requested type out of a free-text hint: a UUID, a SHA-1 digest, a constant, variable, function, or class identifier, a path component, or a product-like name. Use when the user wants an identifier, id, symbol, slug, or name "minted", "coined", "derived", or "generated" from a description.4---5
6@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
7@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
8@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
9
10<purpose name="ase-meta-mint">
11Mint an Identifier or Name
12</purpose>
13
14<expand name="getopt"
15 arg1="ase-meta-mint"
16 arg2="--type|-t=(uuid|sha1|const|var|class|func|path|name) --count|-c=1">
17 $ARGUMENTS
18</expand>
19
20<objective>
21*Mint* an identifier or a name of the requested type out of the
22following hint:
23<hint><getopt-arguments/></hint>
24</objective>
25
26<flow>
27
281. <step id="STEP 1: Sanity Check Usage">
29
30 1. Set <type><getopt-option-type/></type> and set <hint/> to
31 <getopt-arguments/> with any leading and trailing whitespace
32 stripped.
33
34 2. Determine the number of identifiers to mint: set <count/> to
35 <getopt-option-count/>; if <getopt-option-count/> is
36 *non-numeric*, *less than 1*, or *greater than 100*, use the
37 default *1* instead.
38
39 3. <if condition="<hint/> is empty AND <type/> is NOT `uuid`">
40 Only output the following <template/> and then immediately *STOP*
41 processing the entire current skill -- every type except `uuid`
42 needs a hint to derive anything from:
43
44 <template>
45 ⧉ **ASE**: ✪ skill: **ase-meta-mint**, ▶ ERROR: expected a `<hint>` argument for type **<type/>**
46 </template>
47 </if>
48
49 4. Set <results></results> and <warning></warning> (set both to empty).
50
51 </step>
52
532. <step id="STEP 2: Mint Hash-Derived Identifiers" condition="<type/> is `uuid` or `sha1`">
54
55 1. Call the `ase_mint(type: "<type/>", hint: "<hint/>", count:
56 <count/>)` tool of the `ase` MCP server and set <results/> to
57 the returned lines of its `text` output, one identifier per
58 line. You *MUST* *NOT* derive a UUID or a SHA-1 digest yourself
59 -- only the tool hashes correctly and reproducibly.
60
61 2. <if condition="a line of the `text` output starts with `WARNING:`">
62 Remove that line from <results/> and set <warning/> to its text
63 with the leading `WARNING:` stripped -- hashing a non-empty
64 hint is deterministic, so <count/> was clamped to *1*.
65 </if>
66
67 </step>
68
693. <step id="STEP 3: Derive Linguistic Identifiers" condition="<type/> is `const`, `var`, `class`, `func`, `path`, or `name`">
70
71 1. Distill <hint/> into its *essential words*: drop filler words,
72 articles, and prepositions, keep the two to four words which
73 carry the actual meaning, and order them from the most general
74 to the most specific one. Prefer established terminology of the
75 surrounding domain over invented wording. Do not output
76 anything.
77
78 2. Assemble <count/> *distinct* candidates from these words,
79 ordered best-first, honoring the rules of <type/>:
80
81 - `const`: an `UPPER_SNAKE_CASE` constant identifier such as
82 `FOO_BAR_QUUX` -- upper-case ASCII words joined by `_`,
83 never starting with a digit.
84
85 - `var`: a `lowerCamelCase` variable identifier such as
86 `fooBarQuux` -- the *last* part *MUST* be a *substantive*
87 (`Quux`) naming *what the value is*, never a verb, as a
88 variable holds a thing and not an action.
89
90 - `func`: a `lowerCamelCase` function identifier such as
91 `fooBarQuux` -- the *first* part *MUST* be a *verb* (`foo`)
92 naming *what the function does*, as a function performs an
93 action and does not hold a thing.
94
95 - `class`: an `UpperCamelCase` class identifier such as
96 `FooBarQuux` -- a substantive phrase naming the modeled
97 entity, in singular form and without a `The` prefix.
98
99 - `path`: a `kebab-case` path component such as
100 `foo-bar-quux` -- lower-case ASCII letters, digits, and `-`
101 only, never starting or ending with `-`.
102
103 - `name`: an `UpperCamelCase` *product name* such as
104 `FooBarQuux` -- optimize for a *brand*, not for a
105 description: short (preferably two to three syllables),
106 pronounceable, memorable, and distinctive. Coinages,
107 blends, and evocative metaphors are explicitly welcome
108 here, and a plain concatenation of the hint words is
109 explicitly not.
110
111 Store the candidates in <results/>. Do not output anything.
112
113 </step>
114
1154. <step id="STEP 4: Render Result">
116
117 1. <if condition="<hint/> is empty">
118 Set <hint-shown>*(none -- random UUID)*</hint-shown>.
119 </if>
120 <else>
121 Set <hint-shown><hint/></hint-shown>.
122 </else>
123
124 2. Output the minted identifiers of <results/>, one per line and
125 each enclosed in backticks, with the following <template/>:
126
127 <template>
128 <ase-tpl-boxed title="MINT" subtitle="<type/>">
129 ● **HINT**: <hint-shown/>
130
131 ○ `<result-1/>`
132 ○ `<result-2/>`
133 ○ [...]
134 </ase-tpl-boxed>
135 </template>
136
137 3. <if condition="<warning/> is non-empty">
138 Additionally output the following <template/> directly below the
139 box:
140
141 <template>
142 ⧉ **ASE**: ✪ skill: **ase-meta-mint**, ▶ WARNING: <warning/>
143 </template>
144 </if>
145
146 </step>
147
148</flow>