@xhulz/nina 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/package.json +1 -1
- package/releases/0.31.0/core/GAPS.md +125 -0
- package/releases/0.31.0/core/answered.json +29 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/architect.md +1 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/dba.md +3 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/devops.md +1 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/qa.md +2 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/secops.md +3 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
- package/releases/0.31.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
- package/releases/0.31.0/core/tree/.claude/agents/architect.md +126 -0
- package/releases/0.31.0/core/tree/.claude/agents/dba.md +110 -0
- package/releases/0.31.0/core/tree/.claude/agents/devops.md +114 -0
- package/releases/0.31.0/core/tree/.claude/agents/implementer.md +155 -0
- package/releases/0.31.0/core/tree/.claude/agents/integration-tester.md +168 -0
- package/releases/0.31.0/core/tree/.claude/agents/planner.md +132 -0
- package/releases/0.31.0/core/tree/.claude/agents/qa.md +148 -0
- package/releases/0.31.0/core/tree/.claude/agents/reviewer.md +183 -0
- package/releases/0.31.0/core/tree/.claude/agents/secops.md +121 -0
- package/releases/0.31.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
- package/releases/0.31.0/core/tree/.claude/agents/solidity-dev.md +123 -0
- package/releases/0.31.0/core/tree/.claude/agents-overview.md +64 -0
- package/releases/0.31.0/core/tree/.claude/frontend.md +10 -0
- package/releases/0.31.0/core/tree/.claude/graph.md +75 -0
- package/releases/0.31.0/core/tree/.claude/patterns.md +213 -0
- package/releases/0.31.0/core/tree/.claude/pills/README.md +145 -0
- package/releases/0.31.0/core/tree/.claude/pipeline.md +101 -0
- package/releases/0.31.0/core/tree/.claude/retrieval.md +103 -0
- package/releases/0.31.0/core/tree/.claude/router.md +195 -0
- package/releases/0.31.0/core/tree/.claude/templates/integration.md +45 -0
- package/releases/0.31.0/core/tree/CLAUDE.md +160 -0
- package/releases/0.31.0/core/tree/scripts/edit-guard.mjs +16 -0
- package/releases/0.31.0/core/tree/scripts/harness-check.mjs +71 -0
- package/releases/0.31.0/core/tree/scripts/loop-gate.mjs +19 -0
- package/releases/0.31.0/core/vocabulary.json +12 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
- package/releases/0.31.0/surfaces/blockchain/tree/.claude/router.md +6 -0
- package/releases/0.31.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/dba.md +50 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/graph.md +8 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/patterns.md +19 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/pipeline.md +13 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/retrieval.md +5 -0
- package/releases/0.31.0/surfaces/db/tree/.claude/router.md +4 -0
- package/releases/0.31.0/surfaces/db/tree/CLAUDE.md +17 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/devops.md +32 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
- package/releases/0.31.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
- package/releases/0.31.0/surfaces/frontend/tree/.claude/router.md +14 -0
- package/releases/0.31.0/surfaces/frontend/tree/CLAUDE.md +5 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/graph.md +10 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
- package/releases/0.31.0/surfaces/integrations/tree/.claude/router.md +6 -0
- package/releases/0.31.0/surfaces/integrations/tree/CLAUDE.md +17 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/graph.md +2 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/patterns.md +49 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/pipeline.md +2 -0
- package/releases/0.31.0/surfaces/money/tree/.claude/retrieval.md +2 -0
- package/releases/0.31.0/surfaces/money/tree/CLAUDE.md +11 -0
- package/releases/0.31.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
- package/releases/0.31.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
- package/releases/0.31.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.31.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
- package/releases/0.31.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
- package/releases/0.31.0/surfaces/pii/tree/CLAUDE.md +5 -0
- package/releases/0.31.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
- package/releases/0.31.0/surfaces/prisma/tree/.claude/agents/dba.md +39 -0
- package/releases/0.31.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
- package/releases/0.31.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.31.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
- package/releases/0.31.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
- package/releases/0.31.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
- package/releases/0.31.0/surfaces/prisma/tree/CLAUDE.md +5 -0
- package/src/commands/check.mjs +2 -0
- package/src/commands/init.mjs +11 -12
- package/src/commands/upgrade.mjs +15 -2
- package/src/surfaces.mjs +33 -0
package/src/commands/upgrade.mjs
CHANGED
|
@@ -15,7 +15,8 @@ import { spawnSync } from 'node:child_process';
|
|
|
15
15
|
import { HARNESS, legacyHint } from '../paths.mjs';
|
|
16
16
|
import { existsSync, lstatSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
17
17
|
import { dirname, join, resolve } from 'node:path';
|
|
18
|
-
import { composeProject, composedPaths, defaultedSlots, layerRootFor } from './compose.mjs';
|
|
18
|
+
import { composeProject, composedPaths, defaultedSlots, layerRootFor, walk } from './compose.mjs';
|
|
19
|
+
import { NEEDS, detected } from '../surfaces.mjs';
|
|
19
20
|
import { filledSlots, projectSlots, referencedVocabulary } from './check.mjs';
|
|
20
21
|
import { EXPECT_ENV } from '../expected.mjs';
|
|
21
22
|
import { closeAnswered } from './learn.mjs';
|
|
@@ -213,6 +214,13 @@ export async function upgrade(argv, ctx) {
|
|
|
213
214
|
.map((e) => e.name);
|
|
214
215
|
const gone = surfaces.filter((s) => !available.includes(s));
|
|
215
216
|
const kept = surfaces.filter((s) => available.includes(s));
|
|
217
|
+
// A surface the target release adds that this project's own files show it has. When a stack is split out
|
|
218
|
+
// of a concern — `prisma` out of `db` — its rules go with it, and a project that does not declare it loses
|
|
219
|
+
// them in silence: the rules that were in its specs yesterday are not there after the move.
|
|
220
|
+
const offeredBefore = (await readdir(join(from.dir, 'surfaces'), { withFileTypes: true })).filter((e) => e.isDirectory()).map((e) => e.name);
|
|
221
|
+
const offered = detected(await walk(target)).filter(
|
|
222
|
+
(d) => available.includes(d.surface) && !offeredBefore.includes(d.surface) && !surfaces.includes(d.surface) && (!NEEDS[d.surface] || kept.includes(NEEDS[d.surface])),
|
|
223
|
+
);
|
|
216
224
|
|
|
217
225
|
const [vocabBefore, vocabAfter] = [
|
|
218
226
|
await referencedVocabulary(from.dir, surfaces, target),
|
|
@@ -236,6 +244,11 @@ export async function upgrade(argv, ctx) {
|
|
|
236
244
|
|
|
237
245
|
console.log(` ${profile.core} → ${to}\n`);
|
|
238
246
|
|
|
247
|
+
if (offered.length > 0) {
|
|
248
|
+
console.log(` ✗ ${offered.length} surface(s) ${to} adds that this project's files show it has — undeclared, their rules leave its specs:`);
|
|
249
|
+
for (const d of offered) console.log(` ${d.surface} — ${d.why}`);
|
|
250
|
+
console.log(` add each to "surfaces" in ${HARNESS}/profile.json, or pass --force to move without them.\n`);
|
|
251
|
+
}
|
|
239
252
|
if (gone.length > 0) {
|
|
240
253
|
console.log(` ✗ ${gone.length} declared surface(s) do not exist in ${to}: ${gone.join(', ')}`);
|
|
241
254
|
console.log(` a rename cannot be guessed — pick the replacement yourself, and move the`);
|
|
@@ -309,7 +322,7 @@ export async function upgrade(argv, ctx) {
|
|
|
309
322
|
console.log('');
|
|
310
323
|
}
|
|
311
324
|
|
|
312
|
-
const blocking = gone.length + stranded.length + unwired.length + occupied.length + walledOff.length;
|
|
325
|
+
const blocking = gone.length + offered.length + stranded.length + unwired.length + occupied.length + walledOff.length;
|
|
313
326
|
if (!apply) {
|
|
314
327
|
console.log(
|
|
315
328
|
blocking > 0
|
package/src/surfaces.mjs
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the compiler knows about surfaces beyond their layers: which ones a repository's files reveal, and
|
|
3
|
+
* which ones only make sense on top of another.
|
|
4
|
+
*
|
|
5
|
+
* A surface is a question about what the project is — does it own persistent data, does it render a screen
|
|
6
|
+
* a person looks at — and its layer states what is true of every project that answers yes. A stack is a
|
|
7
|
+
* surface too, of another kind: `prisma` is how a project reaches the database it owns, and means nothing
|
|
8
|
+
* without one. The database surface used to be both at once, and a project that owned data but had not
|
|
9
|
+
* chosen its client was told its client was Prisma, its reads went through Accelerate and its tenant was
|
|
10
|
+
* `userId`.
|
|
11
|
+
*
|
|
12
|
+
* `init`, `check` and `upgrade` all read this, so a surface's evidence and its prerequisite are stated once.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/** Surfaces a repository reveals by its files. The rest are claims about the domain. */
|
|
16
|
+
export const DETECTABLE = [
|
|
17
|
+
{ surface: 'db', why: 'a Prisma schema', test: (f) => f.some((p) => p.endsWith('schema.prisma')) },
|
|
18
|
+
{ surface: 'prisma', why: 'a Prisma schema', test: (f) => f.some((p) => p.endsWith('schema.prisma')) },
|
|
19
|
+
{ surface: 'edge-cf', why: 'a wrangler config', test: (f) => f.some((p) => /(^|\/)wrangler\.(toml|jsonc?)$/.test(p)) },
|
|
20
|
+
{ surface: 'frontend', why: 'a Vite config', test: (f) => f.some((p) => /(^|\/)vite\.config\.[cm]?[jt]s$/.test(p)) },
|
|
21
|
+
{ surface: 'blockchain', why: 'a Foundry or Hardhat config', test: (f) => f.some((p) => /(^|\/)(foundry\.toml|hardhat\.config\.[cm]?[jt]s)$/.test(p)) },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
/** A stack surface, and the concern it is a stack of: declared without it, its rules have nowhere to land. */
|
|
25
|
+
export const NEEDS = { prisma: 'db' };
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The surfaces a project's files reveal, with the evidence for each.
|
|
29
|
+
*
|
|
30
|
+
* @param {string[]} tree - The project's files, relative to it.
|
|
31
|
+
* @returns {{surface: string, why: string}[]}
|
|
32
|
+
*/
|
|
33
|
+
export const detected = (tree) => DETECTABLE.filter((d) => d.test(tree)).map(({ surface, why }) => ({ surface, why }));
|