ctxr-cli 0.6.0 → 0.7.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/dist/adapters/types.d.ts +2 -3
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/commands/archive.d.ts +2 -2
- package/dist/commands/archive.js +2 -2
- package/dist/commands/catalog-show.d.ts +0 -1
- package/dist/commands/catalog-show.d.ts.map +1 -1
- package/dist/commands/catalog-show.js +1 -1
- package/dist/commands/catalog-show.js.map +1 -1
- package/dist/commands/graph-query.d.ts +2 -11
- package/dist/commands/graph-query.d.ts.map +1 -1
- package/dist/commands/graph-query.js +11 -14
- package/dist/commands/graph-query.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/publish-check.d.ts.map +1 -1
- package/dist/commands/publish-check.js +0 -4
- package/dist/commands/publish-check.js.map +1 -1
- package/dist/commands/publish-gather.d.ts +6 -16
- package/dist/commands/publish-gather.d.ts.map +1 -1
- package/dist/commands/publish-gather.js +11 -30
- package/dist/commands/publish-gather.js.map +1 -1
- package/dist/commands/publish-new.d.ts +5 -4
- package/dist/commands/publish-new.d.ts.map +1 -1
- package/dist/commands/publish-new.js +32 -10
- package/dist/commands/publish-new.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +6 -25
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/session-capture.d.ts.map +1 -1
- package/dist/commands/session-capture.js +0 -2
- package/dist/commands/session-capture.js.map +1 -1
- package/dist/config/defaults.d.ts +12 -29
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +11 -28
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +18 -44
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +18 -52
- package/dist/config/schema.js.map +1 -1
- package/dist/core/agents-doc.d.ts +9 -0
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +31 -16
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/browse/nav.d.ts +10 -0
- package/dist/core/browse/nav.d.ts.map +1 -0
- package/dist/core/browse/nav.js +101 -0
- package/dist/core/browse/nav.js.map +1 -0
- package/dist/core/browse/routes.d.ts +11 -2
- package/dist/core/browse/routes.d.ts.map +1 -1
- package/dist/core/browse/routes.js +19 -7
- package/dist/core/browse/routes.js.map +1 -1
- package/dist/core/browse/templates.d.ts +11 -2
- package/dist/core/browse/templates.d.ts.map +1 -1
- package/dist/core/browse/templates.js +16 -3
- package/dist/core/browse/templates.js.map +1 -1
- package/dist/core/browse/tree.d.ts +33 -0
- package/dist/core/browse/tree.d.ts.map +1 -0
- package/dist/core/browse/tree.js +53 -0
- package/dist/core/browse/tree.js.map +1 -0
- package/dist/core/catalog/build.d.ts +1 -1
- package/dist/core/catalog/build.d.ts.map +1 -1
- package/dist/core/catalog/build.js +1 -2
- package/dist/core/catalog/build.js.map +1 -1
- package/dist/core/catalog/model.d.ts +2 -0
- package/dist/core/catalog/model.d.ts.map +1 -1
- package/dist/core/catalog/model.js +2 -1
- package/dist/core/catalog/model.js.map +1 -1
- package/dist/core/checks/manifest.d.ts.map +1 -1
- package/dist/core/checks/manifest.js +0 -5
- package/dist/core/checks/manifest.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +1 -2
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +1 -2
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/checks/types.d.ts +1 -1
- package/dist/core/convention-doc.d.ts +15 -12
- package/dist/core/convention-doc.d.ts.map +1 -1
- package/dist/core/convention-doc.js +25 -66
- package/dist/core/convention-doc.js.map +1 -1
- package/dist/core/errors.d.ts +9 -8
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +14 -18
- package/dist/core/errors.js.map +1 -1
- package/dist/core/exit-codes.d.ts +7 -5
- package/dist/core/exit-codes.d.ts.map +1 -1
- package/dist/core/exit-codes.js +7 -5
- package/dist/core/exit-codes.js.map +1 -1
- package/dist/core/ingest/identity.d.ts +4 -4
- package/dist/core/ingest/identity.js +4 -4
- package/dist/core/migrations/add-explanation-craft-skill.d.ts +26 -0
- package/dist/core/migrations/add-explanation-craft-skill.d.ts.map +1 -0
- package/dist/core/migrations/add-explanation-craft-skill.js +94 -0
- package/dist/core/migrations/add-explanation-craft-skill.js.map +1 -0
- package/dist/core/migrations/drop-access-axes.d.ts +24 -0
- package/dist/core/migrations/drop-access-axes.d.ts.map +1 -0
- package/dist/core/migrations/drop-access-axes.js +54 -0
- package/dist/core/migrations/drop-access-axes.js.map +1 -0
- package/dist/core/migrations/registry.d.ts +11 -1
- package/dist/core/migrations/registry.d.ts.map +1 -1
- package/dist/core/migrations/registry.js +15 -3
- package/dist/core/migrations/registry.js.map +1 -1
- package/dist/core/notes/list.d.ts +1 -12
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/reconcile.js +2 -2
- package/dist/core/reconcile.js.map +1 -1
- package/dist/core/records.d.ts +4 -5
- package/dist/core/records.d.ts.map +1 -1
- package/dist/core/records.js +0 -2
- package/dist/core/records.js.map +1 -1
- package/dist/core/skills.d.ts +6 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +7 -4
- package/dist/core/skills.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +15 -53
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/templates/agents/canonical.md +0 -2
- package/templates/conventions/baseline-conventions.md +1 -34
- package/templates/serve/shell.html +3 -0
- package/templates/serve/style.css +78 -3
- package/templates/skills/ctxr-organize-audit.md +2 -10
- package/templates/skills/ctxr-placement.md +6 -24
- package/templates/skills/ctxr-publish.md +26 -21
- package/templates/skills/ctxr-session-capture.md +1 -4
- package/templates/vendor/eli5/LICENSE.txt +21 -0
- package/templates/vendor/eli5/SKILL.md +116 -0
- package/templates/vendor/eli5/provenance.json +8 -0
- package/dist/commands/check.d.ts +0 -30
- package/dist/commands/check.d.ts.map +0 -1
- package/dist/commands/check.js +0 -65
- package/dist/commands/check.js.map +0 -1
- package/dist/commands/note-resolve.d.ts +0 -14
- package/dist/commands/note-resolve.d.ts.map +0 -1
- package/dist/commands/note-resolve.js +0 -24
- package/dist/commands/note-resolve.js.map +0 -1
- package/dist/core/checks/disclosure-checks.d.ts +0 -4
- package/dist/core/checks/disclosure-checks.d.ts.map +0 -1
- package/dist/core/checks/disclosure-checks.js +0 -24
- package/dist/core/checks/disclosure-checks.js.map +0 -1
- package/dist/core/disclosure/leak-scan.d.ts +0 -19
- package/dist/core/disclosure/leak-scan.d.ts.map +0 -1
- package/dist/core/disclosure/leak-scan.js +0 -31
- package/dist/core/disclosure/leak-scan.js.map +0 -1
- package/dist/core/disclosure/model.d.ts +0 -29
- package/dist/core/disclosure/model.d.ts.map +0 -1
- package/dist/core/disclosure/model.js +0 -69
- package/dist/core/disclosure/model.js.map +0 -1
- package/dist/core/graph/visibility-filter.d.ts +0 -13
- package/dist/core/graph/visibility-filter.d.ts.map +0 -1
- package/dist/core/graph/visibility-filter.js +0 -26
- package/dist/core/graph/visibility-filter.js.map +0 -1
- package/dist/core/migrations/rename-visibility-field.d.ts +0 -3
- package/dist/core/migrations/rename-visibility-field.d.ts.map +0 -1
- package/dist/core/migrations/rename-visibility-field.js +0 -62
- package/dist/core/migrations/rename-visibility-field.js.map +0 -1
- package/dist/core/notes/checks.d.ts +0 -20
- package/dist/core/notes/checks.d.ts.map +0 -1
- package/dist/core/notes/checks.js +0 -58
- package/dist/core/notes/checks.js.map +0 -1
- package/dist/core/notes/visibility.d.ts +0 -26
- package/dist/core/notes/visibility.d.ts.map +0 -1
- package/dist/core/notes/visibility.js +0 -41
- package/dist/core/notes/visibility.js.map +0 -1
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Store } from '../store.js';
|
|
2
|
-
import type { GraphBuildResult } from './model.js';
|
|
3
|
-
/**
|
|
4
|
-
* context-visibility spec: "excluded... before that operation ranks,
|
|
5
|
-
* traverses, or otherwise processes results" — filtering the persisted
|
|
6
|
-
* graph down to only visible nodes BEFORE calling neighbors/shortestPath/
|
|
7
|
-
* hubs/orphans means an excluded note contributes no edges to any of them,
|
|
8
|
-
* not merely a post-hoc omission from the final list. A node with no
|
|
9
|
-
* corresponding current note (a stale graph entry) is excluded rather than
|
|
10
|
-
* included — visibility can't be resolved for it, so it fails closed.
|
|
11
|
-
*/
|
|
12
|
-
export declare function filterGraphByAudience(store: Store, graph: GraphBuildResult, audience: string): Promise<GraphBuildResult>;
|
|
13
|
-
//# sourceMappingURL=visibility-filter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visibility-filter.d.ts","sourceRoot":"","sources":["../../../src/core/graph/visibility-filter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAa3B"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { listNotes } from '../notes/list.js';
|
|
2
|
-
import { canSee, resolveVisibility } from '../notes/visibility.js';
|
|
3
|
-
import { subgraph } from './query.js';
|
|
4
|
-
/**
|
|
5
|
-
* context-visibility spec: "excluded... before that operation ranks,
|
|
6
|
-
* traverses, or otherwise processes results" — filtering the persisted
|
|
7
|
-
* graph down to only visible nodes BEFORE calling neighbors/shortestPath/
|
|
8
|
-
* hubs/orphans means an excluded note contributes no edges to any of them,
|
|
9
|
-
* not merely a post-hoc omission from the final list. A node with no
|
|
10
|
-
* corresponding current note (a stale graph entry) is excluded rather than
|
|
11
|
-
* included — visibility can't be resolved for it, so it fails closed.
|
|
12
|
-
*/
|
|
13
|
-
export async function filterGraphByAudience(store, graph, audience) {
|
|
14
|
-
const notes = await listNotes(store.root, store.config);
|
|
15
|
-
const byPath = new Map(notes.map((note) => [note.path, note]));
|
|
16
|
-
const visibleIds = graph.nodes
|
|
17
|
-
.filter((node) => {
|
|
18
|
-
const note = byPath.get(node.path);
|
|
19
|
-
if (!note)
|
|
20
|
-
return false;
|
|
21
|
-
return canSee(store.config, audience, resolveVisibility(store.config, note).value);
|
|
22
|
-
})
|
|
23
|
-
.map((node) => node.id);
|
|
24
|
-
return subgraph(graph, visibleIds);
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=visibility-filter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visibility-filter.js","sourceRoot":"","sources":["../../../src/core/graph/visibility-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAY,EACZ,KAAuB,EACvB,QAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK;SAC3B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE1B,OAAO,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rename-visibility-field.d.ts","sourceRoot":"","sources":["../../../src/core/migrations/rename-visibility-field.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAC;AAsB5D,eAAO,MAAM,8BAA8B,EAAE,SAuC5C,CAAC"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { DEFAULT_VISIBILITY_FIELD_KEY, SCHEMA_V1_VISIBILITY_FIELD_KEY } from '../../config/defaults.js';
|
|
3
|
-
import { readConfig } from '../../config/load.js';
|
|
4
|
-
import { renderStoreConfig } from '../../config/render.js';
|
|
5
|
-
import { writeFileAtomic } from '../fs/atomic.js';
|
|
6
|
-
import { listNotes } from '../notes/list.js';
|
|
7
|
-
import { parseNote } from '../notes/parse.js';
|
|
8
|
-
import { renderNoteText } from '../notes/render.js';
|
|
9
|
-
const OLD_KEY = SCHEMA_V1_VISIBILITY_FIELD_KEY;
|
|
10
|
-
const NEW_KEY = DEFAULT_VISIBILITY_FIELD_KEY;
|
|
11
|
-
/**
|
|
12
|
-
* store-lifecycle spec (task 9.2): the concrete migration proving the
|
|
13
|
-
* naming-inoculation design holds. The key to search for is the FIXED
|
|
14
|
-
* historical literal (OLD_KEY), never `store.config.fields.visibility` —
|
|
15
|
-
* that field is exactly what apply()'s own last step changes, so deriving
|
|
16
|
-
* "what to look for" from it would make a resumed run, on a store whose
|
|
17
|
-
* config was already bumped but whose notes weren't all done yet,
|
|
18
|
-
* incorrectly treat the (already-correct) new key as something to rename
|
|
19
|
-
* away from. A per-note check is "done" precisely when OLD_KEY is gone
|
|
20
|
-
* from its frontmatter — true whether it was never present or already
|
|
21
|
-
* renamed, which is what makes a re-run naturally skip completed work.
|
|
22
|
-
*/
|
|
23
|
-
async function pendingNoteRenames(store) {
|
|
24
|
-
const notes = await listNotes(store.root, store.config);
|
|
25
|
-
return notes.filter((note) => note.frontmatter?.[OLD_KEY] !== undefined).map((note) => note.path);
|
|
26
|
-
}
|
|
27
|
-
export const renameVisibilityFieldMigration = {
|
|
28
|
-
id: '0002-rename-visibility-field-to-lens',
|
|
29
|
-
fromVersion: 1,
|
|
30
|
-
toVersion: 2,
|
|
31
|
-
description: `Rename the visibility frontmatter field from "${OLD_KEY}" to "${NEW_KEY}", on every note and in contexture.yaml.`,
|
|
32
|
-
async plan(store) {
|
|
33
|
-
const deltas = (await pendingNoteRenames(store)).map((notePath) => ({
|
|
34
|
-
path: notePath,
|
|
35
|
-
description: `rename frontmatter field "${OLD_KEY}" to "${NEW_KEY}"`,
|
|
36
|
-
}));
|
|
37
|
-
if (store.config.fields.visibility !== NEW_KEY || store.config.schema_version < 2) {
|
|
38
|
-
deltas.push({ path: 'contexture.yaml', description: `set fields.visibility to "${NEW_KEY}" and schema_version to 2` });
|
|
39
|
-
}
|
|
40
|
-
return deltas;
|
|
41
|
-
},
|
|
42
|
-
async apply(store) {
|
|
43
|
-
const applied = [];
|
|
44
|
-
for (const notePath of await pendingNoteRenames(store)) {
|
|
45
|
-
const absolutePath = path.join(store.root, notePath);
|
|
46
|
-
const note = await parseNote(absolutePath, notePath);
|
|
47
|
-
const { [OLD_KEY]: value, ...rest } = note.frontmatter ?? {};
|
|
48
|
-
const frontmatter = { ...rest, [NEW_KEY]: value };
|
|
49
|
-
await writeFileAtomic(absolutePath, renderNoteText(frontmatter, note.body));
|
|
50
|
-
applied.push({ path: notePath, description: `renamed frontmatter field "${OLD_KEY}" to "${NEW_KEY}"` });
|
|
51
|
-
}
|
|
52
|
-
const configPath = path.join(store.root, 'contexture.yaml');
|
|
53
|
-
const currentConfig = await readConfig(store.root);
|
|
54
|
-
if (currentConfig.fields.visibility !== NEW_KEY || currentConfig.schema_version < 2) {
|
|
55
|
-
const nextConfig = { ...currentConfig, fields: { ...currentConfig.fields, visibility: NEW_KEY }, schema_version: 2 };
|
|
56
|
-
await writeFileAtomic(configPath, renderStoreConfig(nextConfig));
|
|
57
|
-
applied.push({ path: 'contexture.yaml', description: `set fields.visibility to "${NEW_KEY}" and schema_version to 2` });
|
|
58
|
-
}
|
|
59
|
-
return applied;
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
//# sourceMappingURL=rename-visibility-field.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rename-visibility-field.js","sourceRoot":"","sources":["../../../src/core/migrations/rename-visibility-field.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* store-lifecycle/context-visibility: a note relying on the fail-closed
|
|
3
|
-
* default is a health OBSERVATION (lint), not a doctor-failing invariant —
|
|
4
|
-
* doctor's own fail-closed-visibility invariant (wired in Phase 5, below)
|
|
5
|
-
* is a different, stricter check. `severity: 'observation'` is what keeps
|
|
6
|
-
* this out of doctor's exit code by construction, via the same registry
|
|
7
|
-
* lint reads from in Phase 7.
|
|
8
|
-
*/
|
|
9
|
-
export declare const failClosedVisibilityCheck: import("../checks/types.js").CheckDefinition;
|
|
10
|
-
/**
|
|
11
|
-
* context-visibility spec (task 5.2): the same underlying condition as the
|
|
12
|
-
* lint-facing observation above, registered a second time as its own
|
|
13
|
-
* invariant so `doctor` can fail a run on it. Each check id carries exactly
|
|
14
|
-
* one severity, so the two never double-count a single run's pass/fail
|
|
15
|
-
* totals against each other (task 9.4) even though both watch the same
|
|
16
|
-
* condition for two different audiences (an operator skimming lint output,
|
|
17
|
-
* versus a gate that must block).
|
|
18
|
-
*/
|
|
19
|
-
export declare const failClosedVisibilityInvariantCheck: import("../checks/types.js").CheckDefinition;
|
|
20
|
-
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/core/notes/checks.ts"],"names":[],"mappings":"AAsBA;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,8CAUpC,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,kCAAkC,8CAU7C,CAAC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { defineCheck } from '../checks/types.js';
|
|
2
|
-
import { resolveVisibility } from './visibility.js';
|
|
3
|
-
async function failClosedFindings(ctx) {
|
|
4
|
-
const notes = await ctx.notes();
|
|
5
|
-
const findings = [];
|
|
6
|
-
for (const note of notes) {
|
|
7
|
-
const resolution = resolveVisibility(ctx.config, note);
|
|
8
|
-
if (resolution.reason === 'fail-closed default') {
|
|
9
|
-
findings.push({
|
|
10
|
-
code: 'visibility.fail_closed_default',
|
|
11
|
-
severity: 'info',
|
|
12
|
-
message: `"${note.path}" has no explicit or directory-derived visibility; relying on the fail-closed default.`,
|
|
13
|
-
subject: note.path,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return findings;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* store-lifecycle/context-visibility: a note relying on the fail-closed
|
|
21
|
-
* default is a health OBSERVATION (lint), not a doctor-failing invariant —
|
|
22
|
-
* doctor's own fail-closed-visibility invariant (wired in Phase 5, below)
|
|
23
|
-
* is a different, stricter check. `severity: 'observation'` is what keeps
|
|
24
|
-
* this out of doctor's exit code by construction, via the same registry
|
|
25
|
-
* lint reads from in Phase 7.
|
|
26
|
-
*/
|
|
27
|
-
export const failClosedVisibilityCheck = defineCheck({
|
|
28
|
-
id: 'visibility.fail_closed_default',
|
|
29
|
-
title: 'Notes relying on the fail-closed default visibility',
|
|
30
|
-
severity: 'observation',
|
|
31
|
-
capability: 'context-visibility',
|
|
32
|
-
scopes: ['store'],
|
|
33
|
-
async run(ctx) {
|
|
34
|
-
const findings = await failClosedFindings(ctx);
|
|
35
|
-
return { status: findings.length > 0 ? 'fail' : 'pass', findings };
|
|
36
|
-
},
|
|
37
|
-
});
|
|
38
|
-
/**
|
|
39
|
-
* context-visibility spec (task 5.2): the same underlying condition as the
|
|
40
|
-
* lint-facing observation above, registered a second time as its own
|
|
41
|
-
* invariant so `doctor` can fail a run on it. Each check id carries exactly
|
|
42
|
-
* one severity, so the two never double-count a single run's pass/fail
|
|
43
|
-
* totals against each other (task 9.4) even though both watch the same
|
|
44
|
-
* condition for two different audiences (an operator skimming lint output,
|
|
45
|
-
* versus a gate that must block).
|
|
46
|
-
*/
|
|
47
|
-
export const failClosedVisibilityInvariantCheck = defineCheck({
|
|
48
|
-
id: 'visibility.fail_closed_default_invariant',
|
|
49
|
-
title: 'Every note has a resolvable visibility value',
|
|
50
|
-
severity: 'invariant',
|
|
51
|
-
capability: 'context-visibility',
|
|
52
|
-
scopes: ['store'],
|
|
53
|
-
async run(ctx) {
|
|
54
|
-
const findings = await failClosedFindings(ctx);
|
|
55
|
-
return { status: findings.length > 0 ? 'fail' : 'pass', findings };
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
//# sourceMappingURL=checks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/core/notes/checks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,KAAK,UAAU,kBAAkB,CAAC,GAAiB;IACjD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,UAAU,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,wFAAwF;gBAC9G,OAAO,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;IACnD,EAAE,EAAE,gCAAgC;IACpC,KAAK,EAAE,qDAAqD;IAC5D,QAAQ,EAAE,aAAa;IACvB,UAAU,EAAE,oBAAoB;IAChC,MAAM,EAAE,CAAC,OAAO,CAAC;IACjB,KAAK,CAAC,GAAG,CAAC,GAAG;QACX,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,WAAW,CAAC;IAC5D,EAAE,EAAE,0CAA0C;IAC9C,KAAK,EAAE,8CAA8C;IACrD,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,oBAAoB;IAChC,MAAM,EAAE,CAAC,OAAO,CAAC;IACjB,KAAK,CAAC,GAAG,CAAC,GAAG;QACX,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { StoreConfig } from '../../config/schema.js';
|
|
2
|
-
import type { Note } from './list.js';
|
|
3
|
-
/**
|
|
4
|
-
* context-visibility spec: resolution order is explicit → directory default
|
|
5
|
-
* → the configured fail-closed default, and every resolution reports WHICH
|
|
6
|
-
* rung produced it — not just the resolved value — so a note relying on the
|
|
7
|
-
* fail-closed default is distinguishable from one genuinely classified.
|
|
8
|
-
*/
|
|
9
|
-
export type VisibilityReason = 'explicit' | 'directory default' | 'fail-closed default';
|
|
10
|
-
export interface VisibilityResolution {
|
|
11
|
-
value: string;
|
|
12
|
-
reason: VisibilityReason;
|
|
13
|
-
}
|
|
14
|
-
export declare function resolveVisibility(config: StoreConfig, note: Note): VisibilityResolution;
|
|
15
|
-
/**
|
|
16
|
-
* context-visibility spec (visibility-contexts-and-wall-verdicts): the set
|
|
17
|
-
* of visibility VALUES a requesting context can see — the one shared
|
|
18
|
-
* primitive every filtered consumer (graph pre-filter, disclosure rung 3)
|
|
19
|
-
* calls instead of raw equality. Identity default: an unconfigured context
|
|
20
|
-
* sees exactly its own value, so unconfigured stores behave exactly as
|
|
21
|
-
* before the mapping existed, and unknown contexts fail closed to it.
|
|
22
|
-
*/
|
|
23
|
-
export declare function visibleValuesFor(config: StoreConfig, context: string): readonly string[];
|
|
24
|
-
/** Whether `context` can see a note whose resolved visibility is `value`. */
|
|
25
|
-
export declare function canSee(config: StoreConfig, context: string, value: string): boolean;
|
|
26
|
-
//# sourceMappingURL=visibility.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../../src/core/notes/visibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAExF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,oBAAoB,CAavF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAExF;AAED,6EAA6E;AAC7E,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnF"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export function resolveVisibility(config, note) {
|
|
2
|
-
const fieldKey = config.fields.visibility;
|
|
3
|
-
const explicit = note.frontmatter?.[fieldKey];
|
|
4
|
-
if (typeof explicit === 'string' && explicit.length > 0) {
|
|
5
|
-
return { value: explicit, reason: 'explicit' };
|
|
6
|
-
}
|
|
7
|
-
const directoryDefault = findDirectoryDefault(config, note.path);
|
|
8
|
-
if (directoryDefault !== undefined) {
|
|
9
|
-
return { value: directoryDefault, reason: 'directory default' };
|
|
10
|
-
}
|
|
11
|
-
return { value: config.visibility.default_context, reason: 'fail-closed default' };
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* context-visibility spec (visibility-contexts-and-wall-verdicts): the set
|
|
15
|
-
* of visibility VALUES a requesting context can see — the one shared
|
|
16
|
-
* primitive every filtered consumer (graph pre-filter, disclosure rung 3)
|
|
17
|
-
* calls instead of raw equality. Identity default: an unconfigured context
|
|
18
|
-
* sees exactly its own value, so unconfigured stores behave exactly as
|
|
19
|
-
* before the mapping existed, and unknown contexts fail closed to it.
|
|
20
|
-
*/
|
|
21
|
-
export function visibleValuesFor(config, context) {
|
|
22
|
-
return config.visibility.contexts[context] ?? [context];
|
|
23
|
-
}
|
|
24
|
-
/** Whether `context` can see a note whose resolved visibility is `value`. */
|
|
25
|
-
export function canSee(config, context, value) {
|
|
26
|
-
return visibleValuesFor(config, context).includes(value);
|
|
27
|
-
}
|
|
28
|
-
/** Longest matching path-prefix wins, so a more specific directory default overrides a broader one. */
|
|
29
|
-
function findDirectoryDefault(config, notePath) {
|
|
30
|
-
let best;
|
|
31
|
-
for (const [prefix, value] of Object.entries(config.visibility.directory_defaults)) {
|
|
32
|
-
const normalizedPrefix = prefix.endsWith('/') ? prefix : `${prefix}/`;
|
|
33
|
-
if (notePath === prefix || notePath.startsWith(normalizedPrefix)) {
|
|
34
|
-
if (!best || prefix.length > best.prefix.length) {
|
|
35
|
-
best = { prefix, value };
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return best?.value;
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=visibility.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../../src/core/notes/visibility.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,iBAAiB,CAAC,MAAmB,EAAE,IAAU;IAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;AACrF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,OAAe;IACnE,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,MAAM,CAAC,MAAmB,EAAE,OAAe,EAAE,KAAa;IACxE,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,uGAAuG;AACvG,SAAS,oBAAoB,CAAC,MAAmB,EAAE,QAAgB;IACjE,IAAI,IAAmD,CAAC;IACxD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnF,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;QACtE,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChD,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,EAAE,KAAK,CAAC;AACrB,CAAC"}
|