Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills/ux-ui/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ description: Use when creating or changing a user-facing interface. Applies the

- Style components with Tailwind utilities. Share repeated UI through components and variants, not CSS class bundles. Use custom CSS for generated content, document-level rules, or complex effects where utilities would obscure the implementation.
- Shared visual values live in each application's established theme. Components consume semantic tokens instead of raw palette values; author theme colors in `oklch(...)`.
- Prefer Lucide React (`lucide-react`) for icons in React interfaces.
- Browser-rendered apps use Playwright and `@davidvornholt/a11y-testing` for automated accessibility checks. Add or update coverage for routes and meaningful interaction states affected by the change.
9 changes: 6 additions & 3 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ dev-db-status:
_dev-db-action action:
#!/usr/bin/env bun
const action = {{ quote(action) }};
const envFile = 'packages/db/.env.local';
const ownershipLabel = 'io.davidvornholt.standards.dev-db';
const fail = (message) => { console.error(message); process.exit(1); };
const detail = (result) => result.stderr.toString().trim() || result.stdout.toString().trim() || `exit ${result.exitCode}`;
Expand Down Expand Up @@ -68,13 +67,17 @@ _dev-db-action action:
}
};
const readConnection = async () => {
if (!(await Bun.file(envFile).exists())) fail(`${envFile} not found. Run \`just dev-env-generate\` first.`);
const configuredWorkspace = manifest?.devDatabase?.workspace;
const workspace = configuredWorkspace === undefined ? 'packages/db' : configuredWorkspace;
if (typeof workspace !== 'string' || !/^(apps|packages)\/[a-zA-Z0-9][a-zA-Z0-9._-]*$/u.test(workspace)) fail('devDatabase.workspace must be a workspace path such as "packages/db" or "apps/web".');
const envFile = `${workspace}/.env.local`;
if (!(await Bun.file(envFile).exists())) fail(`${envFile} not found. Run \`just dev-env-generate\` first, or set devDatabase.workspace in the root package.json to the workspace that owns DATABASE_URL.`);
const cleanEnvironment = { ...process.env };
delete cleanEnvironment.DATABASE_URL;
const loaded = Bun.spawnSync(['bun', `--env-file=${envFile}`, '-e', 'process.stdout.write(process.env.DATABASE_URL ?? "")'], { env: cleanEnvironment });
if (loaded.exitCode !== 0) fail(`Unable to read DATABASE_URL from ${envFile}: ${detail(loaded)}`);
const databaseUrl = loaded.stdout.toString();
if (!databaseUrl) fail(`${envFile} declares no DATABASE_URL. dev-db manages only repos whose db package uses one.`);
if (!databaseUrl) fail(`${envFile} declares no DATABASE_URL. Set devDatabase.workspace to the workspace that owns it.`);
let url;
try {
url = new URL(databaseUrl);
Expand Down
6 changes: 3 additions & 3 deletions sync-standards.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"upstream": "github:davidvornholt/standards",
"sha": "c010ef0d9bc2c89215faafb479eeae53c733fa18",
"sha": "ac45ee1ececdc95fef0d83fd54aaff0db8d21e27",
"files": {
".agents/skills/ci-pipelines/SKILL.md": "2b9acdddb838273af146f1aaaecaa0edbb9ca460da8bb32535fe06a74e7e2cba",
".agents/skills/database/agents/openai.yaml": "4c9f47df24219d5b195c88eef374431f64b453ed1ba057f50d4c11e4549343c1",
Expand All @@ -27,7 +27,7 @@
".agents/skills/standards-sync/agents/openai.yaml": "438b20601fde0e393a7d431f9795b6b9ac9bed256386d93ab414de917130c478",
".agents/skills/standards-sync/references/github.md": "6ffcffab7014f1b169ae570be1aeed7d588240e65fb85eeed6a658fb649325b3",
".agents/skills/standards-sync/SKILL.md": "b04b516cf2bc333a4636f3d734022b115983b300df2300e962b9f95326711e62",
".agents/skills/ux-ui/SKILL.md": "a73330b6021fc807666a5e3582d74ee8a5d0c59420e032abe72d6b819fa396dc",
".agents/skills/ux-ui/SKILL.md": "d9ac08914192a7f1117406fc19571a8492ca6e3f6b89e0522d3e4f9b5ff62cfa",
".claude/agents/reviewer.md": "693e55cbae5f28954cefda6c475e97ddf62f4a58216c3cdf792852104b9e8d76",
".claude/skills": "46e7c0c6e8f3bd5ac2cb8978db058041d60b9034ba2a60c7268777a1438ff117",
".claude/workflows/review-pass.js": "4951b9eff3428495b7cf84e04f70d62b4ba90c5a7ccec70cfa25d5ecd732b0d5",
Expand All @@ -42,7 +42,7 @@
"AGENTS.md": "399ea1d8433467d620d10ce318c248e0e2c3028b6a82413d31452397f7ba2774",
"biome.base.jsonc": "580117c27e8093a9e0c0fa5223ff09e3d1484541d2b635fbda4e9d87e76e3389",
"CLAUDE.md": "336cc4fbf19beaada7ccf9986414fa91851a8d7a07dfb3ccbe800a69eed0ab49",
"justfile": "2b52e2a98fbdbe43aef6134e08f1937642f7fb3aa46f195e94fb01793465a45c",
"justfile": "6068adae65d6d8b4864bbdfc757beaa02fe1c96dea83c89e3042fa2c960e9e9c",
"nix/standards-bun.nix": "395e7524721e2dc6b3a558ddadfbeef4e371da900401bf590ba687304eb5160a",
"packages/a11y-testing/package.json": "db71ece687b913657a27cf621212503c2fe0a3a7236b951ca731f317b389f3a4",
"packages/a11y-testing/README.md": "73be1fcbf6e63df2e3e28cb3355fe03ee00452d82fa06497a01fd963dc4488be",
Expand Down