mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-16 18:05:31 +02:00
feat(design-consultation): font procedure, role-scoped overused list, color strategies
The proposal section stops handing out a font menu. "Choosing faces: a
procedure, not a menu" names the subject's world, shortlists per role,
strikes the overused list for that role, verifies availability in-session,
and states the loading strategy. {{OVERUSED_FONTS}} renders the role-scoped
lists from lib/design-catalog.ts: overused as display (the detector's
overused-font set plus the training-data defaults), fine as body/UI on an
Operate or Read surface, mono for data and code, banned in any role, and a
short verified-free list with its verification date. Color approaches become
Restrained / Committed / Full palette / Drenched. The anti-convergence
directive drops light-vs-dark as a dial (it comes from the use scene) and the
three-looks calibration sits under Your Design Knowledge. The slop list is
{{DESIGN_SLOP_BULLETS}}: prose from the catalog, no rule ids, polish-level
tells omitted.
design-html's "Never include (AI slop blacklist)" list keeps its literal
(carve guard) and each line now carries a trailing <!-- id --> naming a
catalog entry, pinned by test/design-catalog.test.ts so the last surviving
duplicate is derived-by-test. Both resolvers are registered and listed in
ARCHITECTURE.md. No carve-guard or budget re-baseline needed.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
9825bfdbb7
commit
71505f8374
@@ -178,6 +178,22 @@ describe('renderCatalog', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('design-html blacklist is derived-by-test (decision 31)', () => {
|
||||
test('every <!-- id --> on the Never-include list names a catalog entry', () => {
|
||||
const tmpl = fs.readFileSync(path.join(ROOT, 'design-html', 'SKILL.md.tmpl'), 'utf-8');
|
||||
const start = tmpl.indexOf('**Never include (AI slop blacklist):**');
|
||||
expect(start).toBeGreaterThan(0);
|
||||
const block = tmpl.slice(start, tmpl.indexOf('\n\n', start + 10));
|
||||
const lines = block.split('\n').filter(l => l.startsWith('- '));
|
||||
expect(lines.length).toBeGreaterThanOrEqual(10);
|
||||
for (const line of lines) {
|
||||
const m = line.match(/<!-- ([a-z0-9-]+) -->$/);
|
||||
expect(m, line).not.toBeNull();
|
||||
expect(catalogEntry(m![1]), m![1]).toBeDefined();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('module purity', () => {
|
||||
test('imports nothing (no I/O, no scripts/); loading it prints nothing', () => {
|
||||
const file = path.join(ROOT, 'lib', 'design-catalog.ts');
|
||||
|
||||
Reference in New Issue
Block a user