domain-knowledge-kit 0.2.15 → 0.2.16
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 +4 -0
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/features/agent/commands/init.d.ts.map +1 -1
- package/dist/features/agent/commands/init.js +141 -3
- package/dist/features/agent/commands/init.js.map +1 -1
- package/dist/features/agent/commands/prime.d.ts +11 -0
- package/dist/features/agent/commands/prime.d.ts.map +1 -1
- package/dist/features/agent/commands/prime.js +104 -8
- package/dist/features/agent/commands/prime.js.map +1 -1
- package/dist/features/federation/commands/consumers.d.ts +40 -0
- package/dist/features/federation/commands/consumers.d.ts.map +1 -0
- package/dist/features/federation/commands/consumers.js +126 -0
- package/dist/features/federation/commands/consumers.js.map +1 -0
- package/dist/features/federation/commands/peers-add.d.ts +14 -0
- package/dist/features/federation/commands/peers-add.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-add.js +79 -0
- package/dist/features/federation/commands/peers-add.js.map +1 -0
- package/dist/features/federation/commands/peers-list.d.ts +8 -0
- package/dist/features/federation/commands/peers-list.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-list.js +51 -0
- package/dist/features/federation/commands/peers-list.js.map +1 -0
- package/dist/features/federation/commands/peers-status.d.ts +8 -0
- package/dist/features/federation/commands/peers-status.d.ts.map +1 -0
- package/dist/features/federation/commands/peers-status.js +78 -0
- package/dist/features/federation/commands/peers-status.js.map +1 -0
- package/dist/features/federation/commands/pull.d.ts +18 -0
- package/dist/features/federation/commands/pull.d.ts.map +1 -0
- package/dist/features/federation/commands/pull.js +153 -0
- package/dist/features/federation/commands/pull.js.map +1 -0
- package/dist/features/federation/git-fetcher.d.ts +45 -0
- package/dist/features/federation/git-fetcher.d.ts.map +1 -0
- package/dist/features/federation/git-fetcher.js +70 -0
- package/dist/features/federation/git-fetcher.js.map +1 -0
- package/dist/features/federation/loader.d.ts +60 -0
- package/dist/features/federation/loader.d.ts.map +1 -0
- package/dist/features/federation/loader.js +193 -0
- package/dist/features/federation/loader.js.map +1 -0
- package/dist/features/federation/lock.d.ts +12 -0
- package/dist/features/federation/lock.d.ts.map +1 -0
- package/dist/features/federation/lock.js +48 -0
- package/dist/features/federation/lock.js.map +1 -0
- package/dist/features/federation/tests/git-fetcher.test.d.ts +2 -0
- package/dist/features/federation/tests/git-fetcher.test.d.ts.map +1 -0
- package/dist/features/federation/tests/git-fetcher.test.js +167 -0
- package/dist/features/federation/tests/git-fetcher.test.js.map +1 -0
- package/dist/features/federation/tests/loader.test.d.ts +2 -0
- package/dist/features/federation/tests/loader.test.d.ts.map +1 -0
- package/dist/features/federation/tests/loader.test.js +144 -0
- package/dist/features/federation/tests/loader.test.js.map +1 -0
- package/dist/features/federation/tests/phase5.test.d.ts +2 -0
- package/dist/features/federation/tests/phase5.test.d.ts.map +1 -0
- package/dist/features/federation/tests/phase5.test.js +137 -0
- package/dist/features/federation/tests/phase5.test.js.map +1 -0
- package/dist/features/federation/tests/schema-load.test.d.ts +2 -0
- package/dist/features/federation/tests/schema-load.test.d.ts.map +1 -0
- package/dist/features/federation/tests/schema-load.test.js +97 -0
- package/dist/features/federation/tests/schema-load.test.js.map +1 -0
- package/dist/features/federation/tests/validator.test.d.ts +2 -0
- package/dist/features/federation/tests/validator.test.d.ts.map +1 -0
- package/dist/features/federation/tests/validator.test.js +319 -0
- package/dist/features/federation/tests/validator.test.js.map +1 -0
- package/dist/features/mcp/commands/serve.d.ts +10 -0
- package/dist/features/mcp/commands/serve.d.ts.map +1 -0
- package/dist/features/mcp/commands/serve.js +12 -0
- package/dist/features/mcp/commands/serve.js.map +1 -0
- package/dist/features/mcp/server.d.ts +15 -0
- package/dist/features/mcp/server.d.ts.map +1 -0
- package/dist/features/mcp/server.js +438 -0
- package/dist/features/mcp/server.js.map +1 -0
- package/dist/features/pipeline/commands/validate.d.ts.map +1 -1
- package/dist/features/pipeline/commands/validate.js +7 -0
- package/dist/features/pipeline/commands/validate.js.map +1 -1
- package/dist/features/pipeline/indexer.d.ts +28 -2
- package/dist/features/pipeline/indexer.d.ts.map +1 -1
- package/dist/features/pipeline/indexer.js +82 -27
- package/dist/features/pipeline/indexer.js.map +1 -1
- package/dist/features/pipeline/validator.d.ts +10 -0
- package/dist/features/pipeline/validator.d.ts.map +1 -1
- package/dist/features/pipeline/validator.js +274 -27
- package/dist/features/pipeline/validator.js.map +1 -1
- package/dist/features/query/commands/list.d.ts +10 -0
- package/dist/features/query/commands/list.d.ts.map +1 -1
- package/dist/features/query/commands/list.js +1 -1
- package/dist/features/query/commands/list.js.map +1 -1
- package/dist/features/query/commands/locate.d.ts +1 -0
- package/dist/features/query/commands/locate.d.ts.map +1 -1
- package/dist/features/query/commands/locate.js +1 -1
- package/dist/features/query/commands/locate.js.map +1 -1
- package/dist/features/query/commands/search.d.ts.map +1 -1
- package/dist/features/query/commands/search.js +2 -0
- package/dist/features/query/commands/search.js.map +1 -1
- package/dist/features/query/commands/show.d.ts +15 -0
- package/dist/features/query/commands/show.d.ts.map +1 -1
- package/dist/features/query/commands/show.js +116 -58
- package/dist/features/query/commands/show.js.map +1 -1
- package/dist/features/query/commands/story.d.ts +70 -0
- package/dist/features/query/commands/story.d.ts.map +1 -1
- package/dist/features/query/commands/story.js +2 -2
- package/dist/features/query/commands/story.js.map +1 -1
- package/dist/features/query/commands/summary.d.ts +3 -0
- package/dist/features/query/commands/summary.d.ts.map +1 -1
- package/dist/features/query/commands/summary.js +1 -1
- package/dist/features/query/commands/summary.js.map +1 -1
- package/dist/features/query/searcher.d.ts +18 -1
- package/dist/features/query/searcher.d.ts.map +1 -1
- package/dist/features/query/searcher.js +11 -2
- package/dist/features/query/searcher.js.map +1 -1
- package/dist/features/scaffold/commands/service-init.d.ts +12 -0
- package/dist/features/scaffold/commands/service-init.d.ts.map +1 -0
- package/dist/features/scaffold/commands/service-init.js +69 -0
- package/dist/features/scaffold/commands/service-init.js.map +1 -0
- package/dist/shared/graph.d.ts +8 -0
- package/dist/shared/graph.d.ts.map +1 -1
- package/dist/shared/graph.js +180 -112
- package/dist/shared/graph.js.map +1 -1
- package/dist/shared/index.d.ts +4 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +6 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/loader.d.ts +22 -0
- package/dist/shared/loader.d.ts.map +1 -1
- package/dist/shared/loader.js +31 -1
- package/dist/shared/loader.js.map +1 -1
- package/dist/shared/paths.d.ts +59 -7
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +93 -11
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/refs.d.ts +96 -0
- package/dist/shared/refs.d.ts.map +1 -0
- package/dist/shared/refs.js +182 -0
- package/dist/shared/refs.js.map +1 -0
- package/dist/shared/service-id.d.ts +11 -0
- package/dist/shared/service-id.d.ts.map +1 -0
- package/dist/shared/service-id.js +64 -0
- package/dist/shared/service-id.js.map +1 -0
- package/dist/shared/tests/paths.test.d.ts +2 -0
- package/dist/shared/tests/paths.test.d.ts.map +1 -0
- package/dist/shared/tests/paths.test.js +111 -0
- package/dist/shared/tests/paths.test.js.map +1 -0
- package/dist/shared/tests/refs.test.d.ts +2 -0
- package/dist/shared/tests/refs.test.d.ts.map +1 -0
- package/dist/shared/tests/refs.test.js +104 -0
- package/dist/shared/tests/refs.test.js.map +1 -0
- package/dist/shared/types/domain.d.ts +14 -0
- package/dist/shared/types/domain.d.ts.map +1 -1
- package/dist/shared/types/federation.d.ts +60 -0
- package/dist/shared/types/federation.d.ts.map +1 -0
- package/dist/shared/types/federation.js +12 -0
- package/dist/shared/types/federation.js.map +1 -0
- package/package.json +6 -3
- package/tools/dkk/claude/agents/dkk-domain-reviewer.md +69 -0
- package/tools/dkk/claude/commands/dkk-adr.md +11 -0
- package/tools/dkk/claude/commands/dkk-impact.md +34 -0
- package/tools/dkk/claude/commands/dkk-implement.md +12 -0
- package/tools/dkk/claude/commands/dkk-prime.md +6 -0
- package/tools/dkk/claude/commands/dkk-review.md +12 -0
- package/tools/dkk/claude/commands/dkk-story.md +12 -0
- package/tools/dkk/claude/hooks/post-edit-validate.mjs +51 -0
- package/tools/dkk/claude/hooks/pre-edit-block-generated.mjs +39 -0
- package/tools/dkk/claude/hooks/session-start-prime.mjs +33 -0
- package/tools/dkk/claude/hooks/stop-validate.mjs +48 -0
- package/tools/dkk/claude/settings.json +62 -0
- package/tools/dkk/claude/skills/dkk-adr-author/SKILL.md +54 -0
- package/tools/dkk/claude/skills/dkk-flow-implementer/SKILL.md +51 -0
- package/tools/dkk/claude/skills/dkk-story-analyst/SKILL.md +108 -0
- package/tools/dkk/schema/actors.schema.json +1 -1
- package/tools/dkk/schema/adr-frontmatter.schema.json +4 -4
- package/tools/dkk/schema/aggregate.schema.json +1 -1
- package/tools/dkk/schema/command.schema.json +1 -1
- package/tools/dkk/schema/event.schema.json +1 -1
- package/tools/dkk/schema/federation.schema.json +71 -0
- package/tools/dkk/schema/glossary.schema.json +1 -1
- package/tools/dkk/schema/index.schema.json +2 -2
- package/tools/dkk/schema/policy.schema.json +1 -1
- package/tools/dkk/schema/read-model.schema.json +1 -1
- package/tools/dkk/schema/service.schema.json +30 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service identity loader.
|
|
3
|
+
*
|
|
4
|
+
* Reads `.dkk/service.yml` (if present) and returns the parsed
|
|
5
|
+
* `ServiceManifest`. Returns `null` for legacy repos that haven't
|
|
6
|
+
* adopted federation — the rest of the loader/validator stack treats
|
|
7
|
+
* `model.service === undefined` as "unfederated, behave as before".
|
|
8
|
+
*
|
|
9
|
+
* Validates against `tools/dkk/schema/service.schema.json` at load
|
|
10
|
+
* time so a malformed manifest produces a clean error up front
|
|
11
|
+
* instead of crashing later in the validator/CLI.
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
14
|
+
import { createRequire } from "node:module";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { parseYaml } from "./yaml.js";
|
|
17
|
+
import { serviceFile, schemaDir } from "./paths.js";
|
|
18
|
+
// ajv is a CJS package — use createRequire for ESM interop. Matches
|
|
19
|
+
// the pattern used in validator.ts and tests.
|
|
20
|
+
const require = createRequire(import.meta.url);
|
|
21
|
+
const Ajv = require("ajv").default;
|
|
22
|
+
const addFormats = require("ajv-formats").default;
|
|
23
|
+
/** Cached Ajv instance with all DKK schemas loaded. */
|
|
24
|
+
let cachedAjv = null;
|
|
25
|
+
function getAjv() {
|
|
26
|
+
if (cachedAjv)
|
|
27
|
+
return cachedAjv;
|
|
28
|
+
const ajv = new Ajv({ allErrors: true, strict: true });
|
|
29
|
+
addFormats(ajv);
|
|
30
|
+
// Load all schemas so cross-refs ($ref) resolve.
|
|
31
|
+
const dir = schemaDir();
|
|
32
|
+
const fs = require("node:fs");
|
|
33
|
+
for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(".schema.json"))) {
|
|
34
|
+
const schema = JSON.parse(fs.readFileSync(join(dir, f), "utf-8"));
|
|
35
|
+
ajv.addSchema(schema, schema.$id);
|
|
36
|
+
}
|
|
37
|
+
cachedAjv = ajv;
|
|
38
|
+
return ajv;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Load `.dkk/service.yml` from the given root (or auto-detected root).
|
|
42
|
+
* Returns the parsed manifest, or `null` if the file does not exist.
|
|
43
|
+
*
|
|
44
|
+
* Throws when the file exists but does not conform to
|
|
45
|
+
* `service.schema.json` — the message includes Ajv's error list so
|
|
46
|
+
* the user can fix the manifest directly.
|
|
47
|
+
*/
|
|
48
|
+
export function loadServiceId(root) {
|
|
49
|
+
const path = serviceFile(root);
|
|
50
|
+
if (!existsSync(path))
|
|
51
|
+
return null;
|
|
52
|
+
const text = readFileSync(path, "utf-8");
|
|
53
|
+
const parsed = parseYaml(text);
|
|
54
|
+
const ajv = getAjv();
|
|
55
|
+
const valid = ajv.validate("service.schema.json", parsed);
|
|
56
|
+
if (!valid) {
|
|
57
|
+
const details = (ajv.errors ?? [])
|
|
58
|
+
.map((e) => ` - ${e.instancePath || "/"}: ${e.message ?? "invalid"}`)
|
|
59
|
+
.join("\n");
|
|
60
|
+
throw new Error(`Invalid ${path}:\n${details}\n\nExpected shape: { name: kebab-case, exports: string[], description?: string }`);
|
|
61
|
+
}
|
|
62
|
+
return parsed;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=service-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-id.js","sourceRoot":"","sources":["../../src/shared/service-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGpD,oEAAoE;AACpE,8CAA8C;AAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,OAAuC,CAAC;AACnE,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,OAA+C,CAAC;AAE1F,uDAAuD;AACvD,IAAI,SAAS,GAAoC,IAAI,CAAC;AAEtD,SAAS,MAAM;IACb,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,iDAAiD;IACjD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,SAAS,GAAG,GAAG,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAkB,IAAI,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;aACrE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,MAAM,OAAO,mFAAmF,CAChH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.test.d.ts","sourceRoot":"","sources":["../../../src/shared/tests/paths.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for paths.ts — primarily the walk-up `repoRoot()` behaviour
|
|
3
|
+
* introduced for monorepo / sub-directory usage.
|
|
4
|
+
*/
|
|
5
|
+
import { mkdirSync, rmSync, realpathSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { repoRoot, findDkkRoot, serviceFile, federationFile, importedServiceDir } from "../paths.js";
|
|
9
|
+
let passed = 0;
|
|
10
|
+
let failed = 0;
|
|
11
|
+
function assert(label, condition, detail) {
|
|
12
|
+
if (condition) {
|
|
13
|
+
console.log(` OK: ${label}`);
|
|
14
|
+
passed++;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
|
|
18
|
+
failed++;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Save and restore cwd / env around each scenario.
|
|
22
|
+
const originalCwd = process.cwd();
|
|
23
|
+
const originalDisableWalkup = process.env.DKK_DISABLE_WALKUP;
|
|
24
|
+
function withCwd(dir, fn) {
|
|
25
|
+
process.chdir(dir);
|
|
26
|
+
try {
|
|
27
|
+
return fn();
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
process.chdir(originalCwd);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// ── Setup fixture: nested service repo under a parent ──────────────────
|
|
34
|
+
// Layout:
|
|
35
|
+
// <TMP>/repo/.dkk/ ← the real repo root
|
|
36
|
+
// <TMP>/repo/services/foo/ ← service subdir, no .dkk
|
|
37
|
+
// <TMP>/repo/services/foo/src/ ← deeper subdir
|
|
38
|
+
// <TMP>/elsewhere/ ← unrelated dir, no .dkk anywhere
|
|
39
|
+
const RAW_TMP = join(tmpdir(), `dkk-paths-${Date.now()}`);
|
|
40
|
+
mkdirSync(RAW_TMP, { recursive: true });
|
|
41
|
+
// macOS resolves /tmp -> /private/tmp at chdir; mirror that so string
|
|
42
|
+
// comparisons line up with process.cwd().
|
|
43
|
+
const TMP = realpathSync(RAW_TMP);
|
|
44
|
+
const REPO = join(TMP, "repo");
|
|
45
|
+
const SERVICE = join(REPO, "services", "foo");
|
|
46
|
+
const DEEP = join(SERVICE, "src");
|
|
47
|
+
const ELSEWHERE = join(TMP, "elsewhere");
|
|
48
|
+
mkdirSync(join(REPO, ".dkk"), { recursive: true });
|
|
49
|
+
mkdirSync(DEEP, { recursive: true });
|
|
50
|
+
mkdirSync(ELSEWHERE, { recursive: true });
|
|
51
|
+
try {
|
|
52
|
+
// ── repoRoot — at the repo with .dkk ──────────────────────────────────
|
|
53
|
+
console.log("\n=== repoRoot() at repo with .dkk ===");
|
|
54
|
+
withCwd(REPO, () => {
|
|
55
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
56
|
+
assert("cwd at root with .dkk returns cwd", repoRoot() === REPO);
|
|
57
|
+
});
|
|
58
|
+
// ── repoRoot — walk-up from a sub-directory ───────────────────────────
|
|
59
|
+
console.log("\n=== repoRoot() walks up from sub-dir ===");
|
|
60
|
+
withCwd(SERVICE, () => {
|
|
61
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
62
|
+
assert("from services/foo finds repo .dkk", repoRoot() === REPO);
|
|
63
|
+
});
|
|
64
|
+
withCwd(DEEP, () => {
|
|
65
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
66
|
+
assert("from services/foo/src finds repo .dkk", repoRoot() === REPO);
|
|
67
|
+
});
|
|
68
|
+
// ── Explicit --root override skips walk-up ────────────────────────────
|
|
69
|
+
console.log("\n=== explicit --root override ===");
|
|
70
|
+
withCwd(DEEP, () => {
|
|
71
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
72
|
+
assert("explicit override is used verbatim, no walk-up", repoRoot(ELSEWHERE) === ELSEWHERE);
|
|
73
|
+
});
|
|
74
|
+
// ── DKK_DISABLE_WALKUP=1 disables walk-up ─────────────────────────────
|
|
75
|
+
console.log("\n=== DKK_DISABLE_WALKUP=1 ===");
|
|
76
|
+
withCwd(DEEP, () => {
|
|
77
|
+
process.env.DKK_DISABLE_WALKUP = "1";
|
|
78
|
+
assert("walk-up disabled returns cwd as-is", repoRoot() === DEEP);
|
|
79
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
80
|
+
});
|
|
81
|
+
// ── No .dkk anywhere — fall back to cwd ───────────────────────────────
|
|
82
|
+
console.log("\n=== no .dkk anywhere, fallback to cwd ===");
|
|
83
|
+
withCwd(ELSEWHERE, () => {
|
|
84
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
85
|
+
assert("fallback to cwd when no .dkk on walk-up path", repoRoot() === ELSEWHERE);
|
|
86
|
+
});
|
|
87
|
+
// ── Federation path helpers compose correctly ─────────────────────────
|
|
88
|
+
console.log("\n=== federation path helpers ===");
|
|
89
|
+
assert("serviceFile", serviceFile(REPO) === join(REPO, ".dkk", "service.yml"));
|
|
90
|
+
assert("federationFile", federationFile(REPO) === join(REPO, ".dkk", "federation.yml"));
|
|
91
|
+
assert("importedServiceDir", importedServiceDir("payments", REPO) === join(REPO, ".dkk", "imports", "payments"));
|
|
92
|
+
// ── findDkkRoot — direct walk-up search ───────────────────────────────
|
|
93
|
+
console.log("\n=== findDkkRoot ===");
|
|
94
|
+
assert("findDkkRoot at repo returns repo", findDkkRoot(REPO) === REPO);
|
|
95
|
+
assert("findDkkRoot from sub-dir returns repo", findDkkRoot(SERVICE) === REPO);
|
|
96
|
+
assert("findDkkRoot from deep sub-dir returns repo", findDkkRoot(DEEP) === REPO);
|
|
97
|
+
assert("findDkkRoot from dir with no .dkk returns null", findDkkRoot(ELSEWHERE) === null);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
rmSync(TMP, { recursive: true, force: true });
|
|
101
|
+
if (originalDisableWalkup === undefined) {
|
|
102
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
process.env.DKK_DISABLE_WALKUP = originalDisableWalkup;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
109
|
+
if (failed > 0)
|
|
110
|
+
process.exit(1);
|
|
111
|
+
//# sourceMappingURL=paths.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../src/shared/tests/paths.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.test.d.ts","sourceRoot":"","sources":["../../../src/shared/tests/refs.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the ref-parsing utility.
|
|
3
|
+
*
|
|
4
|
+
* Covers all five id shapes (item, adr, actor, flow, context), the
|
|
5
|
+
* optional service prefix on each, and a range of invalid inputs.
|
|
6
|
+
*/
|
|
7
|
+
import { parseRef, formatRef } from "../refs.js";
|
|
8
|
+
let passed = 0;
|
|
9
|
+
let failed = 0;
|
|
10
|
+
function assert(label, condition, detail) {
|
|
11
|
+
if (condition) {
|
|
12
|
+
console.log(` OK: ${label}`);
|
|
13
|
+
passed++;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
|
|
17
|
+
failed++;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function assertEqual(label, actual, expected) {
|
|
21
|
+
const ok = JSON.stringify(actual) === JSON.stringify(expected);
|
|
22
|
+
assert(label, ok, ok ? undefined : `expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`);
|
|
23
|
+
}
|
|
24
|
+
// ── Bare refs (no service prefix) ──────────────────────────────────────
|
|
25
|
+
console.log("\n=== bare refs ===");
|
|
26
|
+
assertEqual("item", parseRef("ordering.OrderPlaced"), {
|
|
27
|
+
kind: "item",
|
|
28
|
+
context: "ordering",
|
|
29
|
+
name: "OrderPlaced",
|
|
30
|
+
});
|
|
31
|
+
assertEqual("item with multi-word context", parseRef("order-management.PlaceOrder"), {
|
|
32
|
+
kind: "item",
|
|
33
|
+
context: "order-management",
|
|
34
|
+
name: "PlaceOrder",
|
|
35
|
+
});
|
|
36
|
+
assertEqual("adr", parseRef("adr-0001"), { kind: "adr", id: "adr-0001" });
|
|
37
|
+
assertEqual("actor", parseRef("actor.Customer"), { kind: "actor", name: "Customer" });
|
|
38
|
+
assertEqual("flow", parseRef("flow.OrderFulfillment"), { kind: "flow", name: "OrderFulfillment" });
|
|
39
|
+
assertEqual("context", parseRef("context.ordering"), { kind: "context", name: "ordering" });
|
|
40
|
+
// ── Service-prefixed refs ──────────────────────────────────────────────
|
|
41
|
+
console.log("\n=== service-prefixed refs ===");
|
|
42
|
+
assertEqual("service-prefixed item", parseRef("payments:billing.PaymentCaptured"), {
|
|
43
|
+
kind: "item",
|
|
44
|
+
service: "payments",
|
|
45
|
+
context: "billing",
|
|
46
|
+
name: "PaymentCaptured",
|
|
47
|
+
});
|
|
48
|
+
assertEqual("service-prefixed adr", parseRef("ordering:adr-0007"), {
|
|
49
|
+
kind: "adr",
|
|
50
|
+
service: "ordering",
|
|
51
|
+
id: "adr-0007",
|
|
52
|
+
});
|
|
53
|
+
assertEqual("service-prefixed actor", parseRef("payments:actor.PaymentGateway"), {
|
|
54
|
+
kind: "actor",
|
|
55
|
+
service: "payments",
|
|
56
|
+
name: "PaymentGateway",
|
|
57
|
+
});
|
|
58
|
+
assertEqual("service-prefixed flow", parseRef("ordering:flow.OrderFulfillment"), {
|
|
59
|
+
kind: "flow",
|
|
60
|
+
service: "ordering",
|
|
61
|
+
name: "OrderFulfillment",
|
|
62
|
+
});
|
|
63
|
+
assertEqual("service-prefixed context", parseRef("ordering:context.ordering"), {
|
|
64
|
+
kind: "context",
|
|
65
|
+
service: "ordering",
|
|
66
|
+
name: "ordering",
|
|
67
|
+
});
|
|
68
|
+
// ── Invalid inputs ─────────────────────────────────────────────────────
|
|
69
|
+
console.log("\n=== invalid inputs ===");
|
|
70
|
+
assert("empty string", parseRef("") === null);
|
|
71
|
+
assert("just a colon", parseRef(":") === null);
|
|
72
|
+
assert("trailing colon", parseRef("payments:") === null);
|
|
73
|
+
assert("PascalCase service prefix", parseRef("Payments:billing.X") === null);
|
|
74
|
+
assert("digits-only context", parseRef("123.PlaceOrder") === null);
|
|
75
|
+
assert("lowercase item name", parseRef("ordering.placeOrder") !== null); // PascalCase pattern allows leading lowercase per existing schemas
|
|
76
|
+
assert("snake_case context", parseRef("order_mgmt.X") === null);
|
|
77
|
+
assert("bad adr format", parseRef("adr-99") === null);
|
|
78
|
+
assert("adr with extra chars", parseRef("adr-0001x") === null);
|
|
79
|
+
assert("actor with bad name", parseRef("actor.bad-name") === null);
|
|
80
|
+
assert("flow with empty name", parseRef("flow.") === null);
|
|
81
|
+
assert("context with PascalCase", parseRef("context.Ordering") === null);
|
|
82
|
+
assert("no dot in item", parseRef("ordering") === null);
|
|
83
|
+
assert("dot at start", parseRef(".Foo") === null);
|
|
84
|
+
// ── formatRef round-trip ───────────────────────────────────────────────
|
|
85
|
+
console.log("\n=== formatRef round-trip ===");
|
|
86
|
+
const samples = [
|
|
87
|
+
"ordering.OrderPlaced",
|
|
88
|
+
"payments:billing.PaymentCaptured",
|
|
89
|
+
"adr-0001",
|
|
90
|
+
"ordering:adr-0007",
|
|
91
|
+
"actor.Customer",
|
|
92
|
+
"payments:actor.PaymentGateway",
|
|
93
|
+
"flow.OrderFulfillment",
|
|
94
|
+
"context.ordering",
|
|
95
|
+
];
|
|
96
|
+
for (const s of samples) {
|
|
97
|
+
const parsed = parseRef(s);
|
|
98
|
+
assert(`round-trip ${s}`, parsed !== null && formatRef(parsed) === s);
|
|
99
|
+
}
|
|
100
|
+
// ── Summary ────────────────────────────────────────────────────────────
|
|
101
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
102
|
+
if (failed > 0)
|
|
103
|
+
process.exit(1);
|
|
104
|
+
//# sourceMappingURL=refs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.test.js","sourceRoot":"","sources":["../../../src/shared/tests/refs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -246,5 +246,19 @@ export interface DomainModel {
|
|
|
246
246
|
contexts: Map<string, DomainContext>;
|
|
247
247
|
/** All ADR records keyed by ADR id. */
|
|
248
248
|
adrs: Map<string, AdrRecord>;
|
|
249
|
+
/**
|
|
250
|
+
* Service identity for this repo (federation). Present when a
|
|
251
|
+
* `.dkk/service.yml` was found; otherwise `undefined`. Legacy
|
|
252
|
+
* unfederated repos keep working unchanged.
|
|
253
|
+
*/
|
|
254
|
+
service?: import("./federation.js").ServiceManifest;
|
|
255
|
+
/**
|
|
256
|
+
* Peer service models loaded from `.dkk/federation.yml`. Keyed by
|
|
257
|
+
* peer service name. Each value is a fully-loaded `DomainModel`
|
|
258
|
+
* (one level deep — peer's own peers are not transitively followed).
|
|
259
|
+
* Present only when federation is configured and at least one peer
|
|
260
|
+
* was reachable.
|
|
261
|
+
*/
|
|
262
|
+
peers?: Map<string, DomainModel>;
|
|
249
263
|
}
|
|
250
264
|
//# sourceMappingURL=domain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/shared/types/domain.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/shared/types/domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript interfaces for the multi-repo federation layer.
|
|
3
|
+
*
|
|
4
|
+
* `service.yml` declares this repo's service identity. `federation.yml`
|
|
5
|
+
* lists peer services whose `.dkk/` directories should be loaded
|
|
6
|
+
* alongside the local model (read-only).
|
|
7
|
+
*
|
|
8
|
+
* Aligns with JSON schemas under tools/dkk/schema/service.schema.json
|
|
9
|
+
* and federation.schema.json.
|
|
10
|
+
*/
|
|
11
|
+
/** Service identity file (.dkk/service.yml). */
|
|
12
|
+
export interface ServiceManifest {
|
|
13
|
+
/** Kebab-case service identifier (e.g. "ordering"). Globally unique within an org. */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Bounded-context names this service publishes for cross-repo consumption. */
|
|
16
|
+
exports: string[];
|
|
17
|
+
/** Optional human-readable description of the service. */
|
|
18
|
+
description?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Filesystem-path peer source. */
|
|
21
|
+
export interface LocalPeerSource {
|
|
22
|
+
type: "local";
|
|
23
|
+
/** Absolute or repo-root-relative path to the peer's repository root. */
|
|
24
|
+
path: string;
|
|
25
|
+
}
|
|
26
|
+
/** Git-clone peer source (sparse-checkout of `.dkk/`). */
|
|
27
|
+
export interface GitPeerSource {
|
|
28
|
+
type: "git";
|
|
29
|
+
/** Git URL (https / ssh). */
|
|
30
|
+
url: string;
|
|
31
|
+
/** Branch to track. */
|
|
32
|
+
branch: string;
|
|
33
|
+
/** Optional sub-path inside the peer repo where `.dkk/` lives. Defaults to repo root. */
|
|
34
|
+
path?: string;
|
|
35
|
+
}
|
|
36
|
+
/** Discriminated union of supported peer source types. */
|
|
37
|
+
export type PeerSource = LocalPeerSource | GitPeerSource;
|
|
38
|
+
/** A single peer entry in the federation manifest. */
|
|
39
|
+
export interface PeerSpec {
|
|
40
|
+
/** Kebab-case service name (must match the peer's own `service.yml`). */
|
|
41
|
+
name: string;
|
|
42
|
+
/** Where to read the peer's `.dkk/` from. */
|
|
43
|
+
source: PeerSource;
|
|
44
|
+
}
|
|
45
|
+
/** Federation manifest file (.dkk/federation.yml). */
|
|
46
|
+
export interface FederationManifest {
|
|
47
|
+
peers: PeerSpec[];
|
|
48
|
+
}
|
|
49
|
+
/** A single entry in the federation lockfile (pins git SHAs). */
|
|
50
|
+
export interface LockEntry {
|
|
51
|
+
/** Mirrors the manifest entry's source for change detection. */
|
|
52
|
+
source: PeerSource;
|
|
53
|
+
/** Resolved commit SHA at the time of fetch (git sources only). */
|
|
54
|
+
sha?: string;
|
|
55
|
+
/** ISO-8601 timestamp of the fetch. */
|
|
56
|
+
fetchedAt?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Lockfile shape (.dkk/federation.lock.json). */
|
|
59
|
+
export type FederationLock = Record<string, LockEntry>;
|
|
60
|
+
//# sourceMappingURL=federation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../../src/shared/types/federation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,aAAa,CAAC;AAEzD,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,MAAM,EAAE,UAAU,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript interfaces for the multi-repo federation layer.
|
|
3
|
+
*
|
|
4
|
+
* `service.yml` declares this repo's service identity. `federation.yml`
|
|
5
|
+
* lists peer services whose `.dkk/` directories should be loaded
|
|
6
|
+
* alongside the local model (read-only).
|
|
7
|
+
*
|
|
8
|
+
* Aligns with JSON schemas under tools/dkk/schema/service.schema.json
|
|
9
|
+
* and federation.schema.json.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=federation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../../../src/shared/types/federation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "domain-knowledge-kit",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.16",
|
|
4
4
|
"description": "Domain Knowledge Pack — YAML + ADR links + deterministic search + generated docs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"dist/",
|
|
19
19
|
"tools/dkk/schema/",
|
|
20
20
|
"tools/dkk/templates/",
|
|
21
|
+
"tools/dkk/claude/",
|
|
21
22
|
".github/skills/",
|
|
22
23
|
"LICENSE",
|
|
23
24
|
"README.md"
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
"lint:fix": "eslint . --fix",
|
|
31
32
|
"check": "npm run typecheck && npm run lint",
|
|
32
33
|
"prepublishOnly": "npm run build",
|
|
33
|
-
"test": "tsx src/features/pipeline/tests/validate-schemas.test.ts && tsx src/shared/tests/loader.test.ts && tsx src/features/pipeline/tests/validator.test.ts && tsx src/shared/tests/graph.test.ts && tsx src/features/pipeline/tests/indexer.test.ts && tsx src/features/query/tests/searcher.test.ts && tsx src/features/pipeline/tests/renderer.test.ts && tsx src/shared/tests/verify-collision-fix.test.ts && tsx test/cli-integration.ts"
|
|
34
|
+
"test": "tsx src/features/pipeline/tests/validate-schemas.test.ts && tsx src/shared/tests/loader.test.ts && tsx src/shared/tests/refs.test.ts && tsx src/shared/tests/paths.test.ts && tsx src/features/federation/tests/loader.test.ts && tsx src/features/federation/tests/schema-load.test.ts && tsx src/features/federation/tests/git-fetcher.test.ts && tsx src/features/federation/tests/validator.test.ts && tsx src/features/federation/tests/phase5.test.ts && tsx src/features/pipeline/tests/validator.test.ts && tsx src/shared/tests/graph.test.ts && tsx src/features/pipeline/tests/indexer.test.ts && tsx src/features/query/tests/searcher.test.ts && tsx src/features/pipeline/tests/renderer.test.ts && tsx src/shared/tests/verify-collision-fix.test.ts && tsx test/cli-integration.ts"
|
|
34
35
|
},
|
|
35
36
|
"engines": {
|
|
36
37
|
"node": ">=21.2.0"
|
|
@@ -47,12 +48,14 @@
|
|
|
47
48
|
"vitest": "^4.1.0"
|
|
48
49
|
},
|
|
49
50
|
"dependencies": {
|
|
51
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
50
52
|
"ajv": "^8.12.0",
|
|
51
53
|
"ajv-formats": "^3.0.1",
|
|
52
54
|
"better-sqlite3": "^11.0.0",
|
|
53
55
|
"commander": "^12.0.0",
|
|
54
56
|
"fast-glob": "^3.3.2",
|
|
55
57
|
"handlebars": "^4.7.8",
|
|
56
|
-
"js-yaml": "^4.1.0"
|
|
58
|
+
"js-yaml": "^4.1.0",
|
|
59
|
+
"zod": "^4.4.3"
|
|
57
60
|
}
|
|
58
61
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dkk-domain-reviewer
|
|
3
|
+
description: Review a code change, branch, or PR for impact on the local Domain Knowledge Pack. Identifies affected domain items, computes blast radius, flags ADR drift, and returns a single bounded report. Use when the user asks to review a diff, audit a PR, or check whether a change is domain-safe.
|
|
4
|
+
tools: Read, Grep, Glob, Bash, mcp__dkk__search, mcp__dkk__show, mcp__dkk__summary, mcp__dkk__related, mcp__dkk__list, mcp__dkk__locate, mcp__dkk__stats, mcp__dkk__validate, mcp__dkk__story, mcp__dkk__prime
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# DKK Domain Reviewer
|
|
8
|
+
|
|
9
|
+
You review a code change for impact on the project's Domain Knowledge Pack. Your job is to surface domain risk that would be invisible from a syntactic diff review: broken cross-references, blast radius beyond the changed file, drift between code and ADR-recorded decisions.
|
|
10
|
+
|
|
11
|
+
You return a **single bounded report**. You do not converse — caller invokes you, you investigate, you reply once.
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
|
|
15
|
+
The caller provides one of:
|
|
16
|
+
|
|
17
|
+
- A list of changed files (relative paths)
|
|
18
|
+
- A git diff range (e.g. `origin/main...HEAD`)
|
|
19
|
+
- A PR number/URL — in which case run `gh pr diff <number>` to retrieve the diff
|
|
20
|
+
|
|
21
|
+
If no input is provided, default to the working-tree diff: `git diff` and `git status` to enumerate changed files.
|
|
22
|
+
|
|
23
|
+
## Investigation procedure
|
|
24
|
+
|
|
25
|
+
1. **Enumerate changed files.** From the diff or file list, separate:
|
|
26
|
+
- Domain YAML changes under `.dkk/domain/**/*.yml`
|
|
27
|
+
- ADR changes under `.dkk/adr/*.md`
|
|
28
|
+
- Code changes that *might* implement a domain command, event, policy, aggregate, or read model
|
|
29
|
+
2. **For each changed domain YAML file**: extract the item id (path → `<context>.<Name>`). Call `mcp__dkk__summary` for orientation, then `mcp__dkk__related` with `depth: 2` for blast radius. Note every neighbour whose definition file was *not* in the diff — those are the items most likely to break invariants.
|
|
30
|
+
3. **For each changed ADR**: call `mcp__dkk__show` on the ADR id. List every item in `domain_refs`. For each, verify (via `mcp__dkk__show`) that the item's `adr_refs` still contains this ADR. Flag missing back-links.
|
|
31
|
+
4. **For each code change**: grep the file for tokens that look like domain identifiers (PascalCase command/event names, `actor.<Name>`, etc.). For each match, call `mcp__dkk__search` with the token. If the token does not resolve to a model item, flag it as a possible drift (code references a name that the model doesn't know about, or vice versa).
|
|
32
|
+
5. **Run `mcp__dkk__validate`** to check schema and cross-reference health on the post-change model. Include any errors or warnings verbatim in the report.
|
|
33
|
+
6. **Spot-check ADR drift.** For each domain item touched by the change, look at its `adr_refs`. Read each referenced ADR via `mcp__dkk__show` and check whether the change is consistent with the ADR's *Decision* and *Consequences* sections. Flag any change that appears to contradict an Accepted ADR.
|
|
34
|
+
|
|
35
|
+
## Report format
|
|
36
|
+
|
|
37
|
+
Return one markdown report with these sections (omit a section if empty):
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
## Domain Review
|
|
41
|
+
|
|
42
|
+
### Changed domain items
|
|
43
|
+
- `<id>` — <one-line summary> [<context>]
|
|
44
|
+
|
|
45
|
+
### Blast radius (depth 2)
|
|
46
|
+
- `<changed-id>` → affects <N> items not in this diff:
|
|
47
|
+
- `<neighbour-id>` (<kind>) — <relationship>
|
|
48
|
+
|
|
49
|
+
### Cross-reference issues
|
|
50
|
+
- <description>; <path or id>
|
|
51
|
+
|
|
52
|
+
### ADR drift
|
|
53
|
+
- `<adr-id>: <title>` — <how the change appears to deviate>
|
|
54
|
+
|
|
55
|
+
### Validation
|
|
56
|
+
- <verbatim errors / warnings, or "clean">
|
|
57
|
+
|
|
58
|
+
### Recommendations
|
|
59
|
+
- <ordered, actionable items>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
If the diff has no domain impact, return: *"No domain-relevant changes detected."*
|
|
63
|
+
|
|
64
|
+
## Constraints
|
|
65
|
+
|
|
66
|
+
- Read-only. Do not edit files. Do not call `dkk render`, `dkk add`, `dkk rename`, `dkk rm`, or any write-side `dkk` command.
|
|
67
|
+
- Do not run tests, builds, or arbitrary scripts. The Bash allowance is for `git`, `gh`, and read-only `dkk` queries only.
|
|
68
|
+
- Stay focused on **domain** impact. General code review (style, performance, security) is out of scope — leave those for other reviewers.
|
|
69
|
+
- If you cannot determine impact for some change with confidence, say so explicitly rather than guessing.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Draft a new Architecture Decision Record using the dkk-adr-author skill.
|
|
3
|
+
argument-hint: <decision-topic>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Invoke the `dkk-adr-author` skill. The decision topic is `$ARGUMENTS`.
|
|
7
|
+
|
|
8
|
+
- If `$ARGUMENTS` is empty, ask the user to describe the decision in one sentence before proceeding.
|
|
9
|
+
- Otherwise, treat `$ARGUMENTS` as the topic and start the skill workflow at step 1 (search for prior ADRs covering this topic via `mcp__dkk__search` with `type: adr`).
|
|
10
|
+
|
|
11
|
+
Follow the skill's workflow end to end, including the bidirectional `domain_refs` ↔ `adr_refs` linking and the final `dkk render` quality gate.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Show blast radius for a DKK item — summary, depth-3 graph neighbours, and linked ADRs.
|
|
3
|
+
argument-hint: <item-id>
|
|
4
|
+
allowed-tools: mcp__dkk__summary, mcp__dkk__related, mcp__dkk__show, mcp__dkk__locate
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Compute and present the blast radius of `$ARGUMENTS`.
|
|
8
|
+
|
|
9
|
+
1. Call `mcp__dkk__summary` with `id: $ARGUMENTS`. Report the item's name, kind, context, and one-line description.
|
|
10
|
+
2. Call `mcp__dkk__related` with `id: $ARGUMENTS` and `depth: 3`. Group results by kind.
|
|
11
|
+
3. From the summary, collect any `adr_refs`. For each, call `mcp__dkk__show` and report the ADR id, title, and status.
|
|
12
|
+
4. Call `mcp__dkk__locate` and report the absolute path(s) where this item is defined.
|
|
13
|
+
|
|
14
|
+
Format the output as:
|
|
15
|
+
|
|
16
|
+
```markdown
|
|
17
|
+
## Impact: <id>
|
|
18
|
+
|
|
19
|
+
**<name>** (<kind>, <context>) — <description>
|
|
20
|
+
|
|
21
|
+
### Source
|
|
22
|
+
- <absolute path>
|
|
23
|
+
|
|
24
|
+
### Direct neighbours (depth 1)
|
|
25
|
+
- <kind>: <id>, <id>, ...
|
|
26
|
+
|
|
27
|
+
### Extended blast radius (depth 2–3)
|
|
28
|
+
- <kind>: <id>, <id>, ...
|
|
29
|
+
|
|
30
|
+
### Linked ADRs
|
|
31
|
+
- <adr-id>: <title> (<status>)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If the id does not resolve, list the closest candidates from `mcp__dkk__list` or `mcp__dkk__search` and stop.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Walk through framework-agnostic implementation of a DKK flow using the dkk-flow-implementer skill.
|
|
3
|
+
argument-hint: <flow-id-or-feature-name>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Invoke the `dkk-flow-implementer` skill. The user's target is `$ARGUMENTS`.
|
|
7
|
+
|
|
8
|
+
- If `$ARGUMENTS` is empty, ask the user which flow to implement, or list available flows via `mcp__dkk__list` (filter `type: flow`).
|
|
9
|
+
- If `$ARGUMENTS` looks like a flow id (`flow.<Name>` or bare `<Name>`), pass it through to `mcp__dkk__story`.
|
|
10
|
+
- Otherwise, run `mcp__dkk__search` with `$ARGUMENTS` first to identify the matching flow or root command, then proceed.
|
|
11
|
+
|
|
12
|
+
Follow the skill's workflow: retrieve story, ask clarifying questions, present ADR constraints, generate the framework-agnostic checklist, and walk the user through items interactively.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Re-inject DKK agent context (domain principles, item types, CLI reference, current model summary). Use after compaction or topic drift.
|
|
3
|
+
allowed-tools: mcp__dkk__prime
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call `mcp__dkk__prime` with default arguments and read the response. After loading, briefly confirm the number of contexts, items, and ADRs currently in the model. Do not summarize the prime content itself — the user just needs the agent to be re-primed.
|