@flancer32/skill-adsm-ctx 0.5.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/CHANGELOG.md +15 -0
- package/README.md +23 -10
- package/package.json +3 -2
- package/skills/adsm-ctx/SKILL.md +12 -2
- package/skills/adsm-ctx/references/agents-hierarchy.md +3 -1
- package/skills/adsm-ctx/references/context-evolution.md +12 -8
- package/skills/adsm-ctx/references/context-lifecycle.md +2 -2
- package/skills/adsm-ctx/references/document-projections.md +4 -2
- package/skills/adsm-ctx/references/testing-and-verification.md +20 -0
- package/skills/adsm-ctx/templates/AGENTS.md +13 -1
- package/skills/adsm-ctx/templates/ctx/README.md +1 -1
- package/skills/adsm-ctx/templates/ctx/adsm.json +1 -1
- package/skills/adsm-ctx/templates/ctx/docs/architecture/AGENTS.md +1 -1
- package/skills/adsm-ctx/templates/ctx/docs/architecture/behavior.md +4 -4
- package/skills/adsm-ctx/templates/ctx/docs/code/AGENTS.md +1 -1
- package/skills/adsm-ctx/templates/ctx/docs/code/testing.md +3 -1
- package/skills/adsm-ctx/templates/ctx/docs/environment/AGENTS.md +1 -1
- package/skills/adsm-ctx/templates/ctx/docs/filesystem.md +1 -1
- package/skills/adsm-ctx/templates/ctx/docs/product/AGENTS.md +1 -1
- package/src/Cli/Command/Init.mjs +21 -5
- package/src/Cli/Command/InstallSkill.mjs +16 -5
- package/src/Cli/Command/Validate.mjs +17 -5
- package/src/Init/Service.mjs +21 -21
- package/src/Shared/Constants.mjs +2 -1
- package/src/Shared/CopyDirectory.mjs +9 -9
- package/src/Shared/Metadata.mjs +1 -1
- package/src/Skill/Installer.mjs +2 -2
- package/src/Validate/Service.mjs +96 -141
- package/types.d.ts +31 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this package are documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.7.0 — 2026-11-05
|
|
6
|
+
|
|
7
|
+
- Target context schema `0.7`; validate older schema labels as unsupported without changing their contexts. Evolve existing contexts through agent review before updating metadata.
|
|
8
|
+
- Make fresh integration of trusted first-party dependencies part of the Rapid Evolution default, subject to accepted security, reproducibility, offline, and deployment requirements.
|
|
9
|
+
- Clarify that failure handling and compatibility require an accepted requirement, demonstrated problem, or meaningful identified risk; align root and architecture templates.
|
|
10
|
+
- Separate bounded product verification from technical test suites and align verification specifications and CI.
|
|
11
|
+
- Clarify Git delivery authorization in generated root instructions and maintain substantive template version dates.
|
|
12
|
+
|
|
13
|
+
## 0.6.0 — 2026-11-04
|
|
14
|
+
|
|
15
|
+
- Use two-part context schema versions aligned to the npm package major and minor; target schema `0.6`, retaining it for package patches.
|
|
16
|
+
- Clarify development policy and project testing versus product verification in the skill and initialization templates. Evolve existing contexts through agent inspection and human decisions.
|
|
17
|
+
- Report unsupported schema versions uniformly without automatic migration; preserve context and metadata during validation.
|
|
18
|
+
- Align TeqFW dependencies and JSDoc contracts, and improve repository context navigation.
|
|
19
|
+
|
|
5
20
|
## 0.5.0 — 2026-10-24
|
|
6
21
|
|
|
7
22
|
- Adopt context schema `0.5.0`: require five documentation directories, including the cross-cutting Verification Layer, while preserving four ordered declarative levels. Allow an AGENTS-only verification root without placeholder specifications.
|
package/README.md
CHANGED
|
@@ -10,6 +10,8 @@ It manages the lifecycle of project context as its primary object. It does not d
|
|
|
10
10
|
|
|
11
11
|
This package is developed according to the [ADSM methodology](http://fly.wiredgeese.com/flancer/leanpub/adsm-en/).
|
|
12
12
|
|
|
13
|
+
ADSM defaults to **Rapid Evolution by Default, Reliability by Requirement**: deliver essential functionality in short feedback cycles, fail visibly, avoid unrequired compatibility, and verify according to contracts and risk. Humans control acceptable risk and can set a different project policy; accepted context, security, integrity, and explicit invariants remain binding. New projects receive a concise policy in their root `AGENTS.md`; existing projects are not rewritten. See the bundled [skill guidance](skills/adsm-ctx/SKILL.md#development-policy) for details.
|
|
14
|
+
|
|
13
15
|
The package includes:
|
|
14
16
|
|
|
15
17
|
- the `adsm-ctx` CLI for lifecycle operations;
|
|
@@ -58,7 +60,7 @@ This package does not:
|
|
|
58
60
|
Install the package and then explicitly install its matching agent payload:
|
|
59
61
|
|
|
60
62
|
```sh
|
|
61
|
-
npm install --global
|
|
63
|
+
npm install --global @flancer32/skill-adsm-ctx
|
|
62
64
|
adsm-ctx install-skill "$HOME/.agents/skills"
|
|
63
65
|
```
|
|
64
66
|
|
|
@@ -76,11 +78,11 @@ test -f "$HOME/.agents/skills/adsm-ctx/SKILL.md"
|
|
|
76
78
|
To update, update the global npm package and reinstall its payload:
|
|
77
79
|
|
|
78
80
|
```sh
|
|
79
|
-
npm install --global
|
|
81
|
+
npm install --global @flancer32/skill-adsm-ctx
|
|
80
82
|
adsm-ctx install-skill "$HOME/.agents/skills"
|
|
81
83
|
```
|
|
82
84
|
|
|
83
|
-
The npm package is the canonical distribution of both artifacts. Its public `adsm-ctx` launcher runs the package as an explicit TeqFW host; the `install-skill` command copies the version-matched `skills/adsm-ctx/` bundle. Do not copy only `SKILL.md` manually: the payload also needs its references and templates.
|
|
85
|
+
The public npm registry package is the canonical distribution of both artifacts and does not require GitHub SSH access. Its public `adsm-ctx` launcher runs the package as an explicit TeqFW host; the `install-skill` command copies the version-matched `skills/adsm-ctx/` bundle. Do not copy only `SKILL.md` manually: the payload also needs its references and templates.
|
|
84
86
|
|
|
85
87
|
For a project-pinned CI or team workflow, install the package locally and invoke the same public launcher with npm:
|
|
86
88
|
|
|
@@ -133,7 +135,7 @@ teq --host @flancer32/skill-adsm-ctx adsm-ctx:validate .
|
|
|
133
135
|
|
|
134
136
|
### `init`
|
|
135
137
|
|
|
136
|
-
Creates the minimal ADSM-compatible context structure, starter documents, and `ctx/adsm.json` metadata. Schema `0.
|
|
138
|
+
Creates the minimal ADSM-compatible context structure, starter documents, and `ctx/adsm.json` metadata. Schema `0.7` creates all five documentation directories, including `ctx/docs/verification/AGENTS.md`, without empty target categories or placeholder specifications.
|
|
137
139
|
|
|
138
140
|
### `design`
|
|
139
141
|
|
|
@@ -157,7 +159,7 @@ The default compression corpus is `ctx/docs/`. Operational context such as `ctx/
|
|
|
157
159
|
|
|
158
160
|
### Agent-driven evolution
|
|
159
161
|
|
|
160
|
-
Use [the skill evolution procedure](skills/adsm-ctx/references/context-evolution.md) for existing contexts, including unknown historical states. The agent follows discover → interpret → compare → plan → evolve → validate → finalize, preserving accepted meaning and semantic skins. Humans decide changes to accepted meaning and authority. CLI `validate` supplies deterministic findings; there is no evolution command or automatic schema promotion. The agent records target schema `0.
|
|
162
|
+
Use [the skill evolution procedure](skills/adsm-ctx/references/context-evolution.md) for existing contexts, including unknown historical states. The agent follows discover → interpret → compare → plan → evolve → validate → finalize, preserving accepted meaning and semantic skins. Humans decide changes to accepted meaning and authority. CLI `validate` supplies deterministic findings; there is no evolution command or automatic schema promotion. The agent records target schema `0.7` only after structural checks and semantic review succeed, then validates again. The package major and minor match the two-part schema version.
|
|
161
163
|
|
|
162
164
|
## Workflow
|
|
163
165
|
|
|
@@ -184,7 +186,7 @@ product
|
|
|
184
186
|
|
|
185
187
|
Use the architecture level once product meaning is clear enough to define stable engineering guardrails.
|
|
186
188
|
|
|
187
|
-
`ctx/docs/verification/` is mandatory and cross-cutting in schema `0.
|
|
189
|
+
`ctx/docs/verification/` is mandatory and cross-cutting in schema `0.7`. It is not a fifth declarative level. Its root may contain only `AGENTS.md`; create primary-target categories only when durable specifications exist; place that specification below the category of the declaration it primarily evaluates.
|
|
188
190
|
|
|
189
191
|
The bundled architecture templates expect these top-level documents:
|
|
190
192
|
|
|
@@ -241,12 +243,23 @@ Run the CLI directly from the repository:
|
|
|
241
243
|
npm exec -- adsm-ctx --help
|
|
242
244
|
```
|
|
243
245
|
|
|
244
|
-
Run the
|
|
246
|
+
Run the fast local project smoke check (context structure and skill/package conventions):
|
|
245
247
|
|
|
246
248
|
```sh
|
|
247
249
|
npm test
|
|
248
250
|
```
|
|
249
251
|
|
|
252
|
+
Run bounded product verification and the technical suites separately:
|
|
253
|
+
|
|
254
|
+
```sh
|
|
255
|
+
npm run verify
|
|
256
|
+
npm run test:unit
|
|
257
|
+
npm run test:integration
|
|
258
|
+
npm run test:package
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Project testing checks technical health and engineering correctness; product verification evaluates observable behavior or properties against accepted declarations using applicable specifications. Test level and mechanism do not determine this distinction. The smoke check does not establish product conformity or semantic context correctness. The verification specifications under `ctx/docs/verification/` identify the observed contracts and their limits. The package installation scenario uses a temporary installation and may skip locally when its offline dependency cache is unavailable; a skip is not evidence of successful installation.
|
|
262
|
+
|
|
250
263
|
## Changelog
|
|
251
264
|
|
|
252
265
|
See [CHANGELOG.md](CHANGELOG.md) for the dated release notes.
|
|
@@ -261,15 +274,15 @@ Apache-2.0
|
|
|
261
274
|
|
|
262
275
|
## Versioning And Compatibility
|
|
263
276
|
|
|
264
|
-
|
|
277
|
+
Package `0.7.0` targets context schema `0.7`. Schema versions use major.minor; npm package versions use major.minor.patch with matching major and minor. Package patch `0.7.1` retains schema `0.7`; a new minor establishes a new schema target. Changes in context conventions require a new minor.
|
|
265
278
|
|
|
266
|
-
`adsm-ctx --version` identifies the installed npm package. Read `ctx/adsm.json` for a project's schema; `adsm-ctx validate <project-root>` reports recorded and supported schema versions. Compatibility follows supported requirements, not numerical equality. Current validation supports schema `0.
|
|
279
|
+
`adsm-ctx --version` identifies the installed npm package. Read `ctx/adsm.json` for a project's schema; `adsm-ctx validate <project-root>` reports recorded and supported schema versions. Compatibility follows supported requirements, not numerical equality. Current validation supports schema `0.7`; all other versions are unsupported and require investigation.
|
|
267
280
|
|
|
268
281
|
Installing or updating the package and explicitly reinstalling its skill do not promote project metadata. An agent compares actual context with the installed skill's target conventions and evolves directly when needed, preserving project meaning and skins. Humans approve changes to accepted meaning. Only after conformance and semantic review does the agent record the target schema; no intermediate CLI migrations are required.
|
|
269
282
|
|
|
270
283
|
## Continuous Integration
|
|
271
284
|
|
|
272
|
-
GitHub Actions runs `.github/workflows/ci.yaml` for pushes and pull requests to `main`, and on manual dispatch. Ubuntu jobs use Node.js 20 (minimum) and 24 (LTS), run `npm ci`, `npm test`, context validation, and `npm pack --dry-run`.
|
|
285
|
+
GitHub Actions runs `.github/workflows/ci.yaml` for pushes and pull requests to `main`, and on manual dispatch. Ubuntu jobs use Node.js 20 (minimum) and 24 (LTS), run `npm ci`, `npm test`, all three technical suites, `npm run verify`, context validation, and `npm pack --dry-run`.
|
|
273
286
|
|
|
274
287
|
Package tests install a real npm archive into an isolated temporary environment, exercise the installed CLI and skill installer, compare the complete payload, and preserve neighboring skills. In CI the installation test uses network-enabled dependency resolution and fails on errors instead of skipping for missing offline cache. Local offline runs may report a skip; that is incomplete installation evidence. CI does not publish packages or prove semantic correctness of project documentation.
|
|
275
288
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flancer32/skill-adsm-ctx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Build and evolve project cognitive context for Agent-Driven Software Management (ADSM).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
"test:unit": "find test/unit -name '*.test.mjs' -print0 | xargs -0 -r node --test",
|
|
30
30
|
"test:integration": "find test/integration -name '*.test.mjs' -print0 | xargs -0 -r node --test",
|
|
31
31
|
"test:package": "node --test test/package/*.test.mjs",
|
|
32
|
-
"test": "
|
|
32
|
+
"test": "node bin/adsm-ctx.mjs validate . && node --test test/package/skill.test.mjs",
|
|
33
|
+
"verify": "node --test test/integration/schema-050.test.mjs test/integration/cli-init-validate.test.mjs test/integration/cli-install-skill.test.mjs test/package/installation.test.mjs test/package/skill.test.mjs"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
35
36
|
"@teqfw/cli": "^2.2.0",
|
package/skills/adsm-ctx/SKILL.md
CHANGED
|
@@ -9,6 +9,16 @@ Manage the lifecycle of an ADSM project cognitive context. Manage generic contex
|
|
|
9
9
|
|
|
10
10
|
Humans own direction, accepted meaning, approval, and accountability. Agents refine, check consistency, maintain documentation, and report decisions that require human authority.
|
|
11
11
|
|
|
12
|
+
## Development Policy
|
|
13
|
+
|
|
14
|
+
ADSM defaults to **Rapid Evolution by Default, Reliability by Requirement**. Plan short hypothesis → implementation → execution → feedback cycles around essential functionality. Prefer simple working solutions; add retries, fallbacks, recovery systems, migrations, compatibility layers, or other defensive machinery only for accepted requirements, demonstrated problems, or meaningful identified risks. Fail fast and visibly on unexpected conditions and contract violations rather than hiding them with speculative retries, repairs, or fallbacks.
|
|
15
|
+
|
|
16
|
+
Accepted cognitive context defines the target; code and tests converge on it, and historical behavior is not independent architectural authority. Breaking software interfaces is acceptable by default; retain compatibility, migrations, or legacy layers only for accepted requirements, demonstrated problems, or meaningful identified risks. Preserve decisions explaining accepted and rejected directions. Verify the happy path and essential contracts with sufficient fast feedback; add regression coverage and stronger checks for observed defects, meaningful risks, or explicit requirements.
|
|
17
|
+
|
|
18
|
+
Fresh integration of trusted, actively developed first-party dependencies is inherited from this default without separate opt-in to expose cross-package incompatibilities early. Accepted requirements or human instructions can override it, including for secure, reproducible, offline, or production use. Investigate failures and fix the responsible contract or implementation instead of masking them. See [testing and verification](references/testing-and-verification.md#fresh-first-party-integration) for applicability and npm details.
|
|
19
|
+
|
|
20
|
+
Humans decide acceptable risks and reliability guarantees; project-specific accepted context can strengthen or replace this default. Never silently compromise security, integrity, or accepted invariants. This software compatibility default does not authorize rewriting consumer contexts or bypassing context-schema evolution and human approval.
|
|
21
|
+
|
|
12
22
|
## Start Here
|
|
13
23
|
|
|
14
24
|
1. Identify the target repository and the requested lifecycle mode.
|
|
@@ -22,7 +32,7 @@ Humans own direction, accepted meaning, approval, and accountability. Agents ref
|
|
|
22
32
|
| --- | --- |
|
|
23
33
|
| `init` baseline | [context-lifecycle.md](references/context-lifecycle.md); use the `templates/ctx/` baseline. |
|
|
24
34
|
| `design` or new branch | [context-lifecycle.md](references/context-lifecycle.md), [design-questionnaire.md](references/design-questionnaire.md), and [specialized-skills.md](references/specialized-skills.md). |
|
|
25
|
-
| Verification Layer or Software Evolution Loop | [document-projections.md](references/document-projections.md), [context-lifecycle.md](references/context-lifecycle.md), [documentation-quality-audit.md](references/documentation-quality-audit.md), and [specialized-skills.md](references/specialized-skills.md). |
|
|
35
|
+
| Project testing, Verification Layer, or Software Evolution Loop | [testing-and-verification.md](references/testing-and-verification.md), [document-projections.md](references/document-projections.md), [context-lifecycle.md](references/context-lifecycle.md), [documentation-quality-audit.md](references/documentation-quality-audit.md), and [specialized-skills.md](references/specialized-skills.md). |
|
|
26
36
|
| `validate` structure | [context-lifecycle.md](references/context-lifecycle.md), [document-projections.md](references/document-projections.md), and the repository-provided deterministic validator when available. Report errors and warnings separately. |
|
|
27
37
|
| `quality-audit` | Run `validate` first; then load [documentation-quality-audit.md](references/documentation-quality-audit.md). Report findings; do not rewrite project meaning. |
|
|
28
38
|
| `documentation-compression` | Load [documentation-compression.md](references/documentation-compression.md). Rewrite only with authorization and preserve accepted meaning. |
|
|
@@ -53,7 +63,7 @@ The existing context supplies accepted project meaning; this installed skill sup
|
|
|
53
63
|
|
|
54
64
|
Finish with explicit validation results, Verification Layer structure and specification presence when relevant, specialization gaps, human decisions, and any preserved project-specific content. Use `templates/AGENTS.md` and `templates/ctx/` for initialization; use skill `assets/` only for authorized agent-guided document or report work.
|
|
55
65
|
|
|
56
|
-
The current target is schema `0.
|
|
66
|
+
The current target is schema `0.7`. The npm package major and minor match this two-part schema version; package patches retain the same schema. Package updates and context evolution remain separate. Inspect project metadata and actual conformance against this installed skill; never infer compatibility or promote metadata from package-version equality. See [context evolution](references/context-evolution.md) for the decision procedure.
|
|
57
67
|
|
|
58
68
|
## Resource Ownership
|
|
59
69
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AGENTS Hierarchy
|
|
2
2
|
|
|
3
3
|
- Path: `skills/adsm-ctx/references/agents-hierarchy.md`
|
|
4
|
-
- Changed: `
|
|
4
|
+
- Changed: `20261104`
|
|
5
5
|
|
|
6
6
|
This reference operationalizes `AGENTS.md` handling for ADSM contexts.
|
|
7
7
|
|
|
@@ -32,6 +32,8 @@ Repository-root and context-side files are not identical:
|
|
|
32
32
|
- the repository-root `AGENTS.md` controls root work and may use a lighter shape;
|
|
33
33
|
- context-side `AGENTS.md` files under `ctx/` must contain `Purpose`, `Level Map`, and `Level Boundary`.
|
|
34
34
|
|
|
35
|
+
The root template states the skill's Rapid Evolution development default concisely and routes agents to the skill for its meaning. Accepted project context may strengthen or replace that default under human authority; deeper instructions must preserve the root's security, integrity, and accepted-context boundaries. Initialization does not overwrite existing root instructions.
|
|
36
|
+
|
|
35
37
|
For skill operation:
|
|
36
38
|
|
|
37
39
|
- interpret `AGENTS.md` as local control files inside already-declared boundaries;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
# Agent-Driven Context Evolution
|
|
2
2
|
|
|
3
3
|
- Path: `skills/adsm-ctx/references/context-evolution.md`
|
|
4
|
-
- Changed: `
|
|
4
|
+
- Changed: `20261105`
|
|
5
5
|
|
|
6
6
|
Evolution brings an existing cognitive context into conformance with the installed skill's target conventions through agent inspection and reasoning. The starting point is the actual context, not an assumed version-to-version file transformation. Use this procedure for methodology, organization, authority relationships, projection rules, and schema changes, including contexts predating known schema versions. Evolution is a skill-guided agent activity and has no CLI command.
|
|
7
7
|
|
|
8
|
+
Apply the skill's Rapid Evolution default to planning and verification: work toward accepted target meaning in small feedback cycles, without preserving obsolete software behavior by default. This does not make existing context or schema disposable: investigate actual conventions, preserve accepted meaning and decisions, and obtain human approval for semantic or authority changes. Do not automatically rewrite consumer projects when the skill or root template changes. Required reliability and verification remain controlled by humans and applicable project context.
|
|
9
|
+
|
|
8
10
|
## Target And Responsibilities
|
|
9
11
|
|
|
10
|
-
The current target is context schema `adsm-context` version `0.
|
|
12
|
+
The current target is context schema `adsm-context` version `0.7`, matching the npm package major and minor. Require five documentation directories: `product/`, `architecture/`, `environment/`, `code/`, and `verification/`, each with `AGENTS.md`. Exactly four form the ordered hierarchy product → architecture → environment → code. The cross-cutting verification root may contain only `AGENTS.md`; create primary-target categories only for actual durable specifications. Keep specifications distinct from observations, evidence records, and operational feedback state. Use [document-projections.md](document-projections.md) for projection, links, assets, and capacity conventions.
|
|
11
13
|
|
|
12
14
|
The skill defines target conventions and this procedure. The agent interprets the existing context, compares, applies authorized changes, checks consistency, and finalizes metadata. CLI `init` creates missing baseline files, including verification routing and initial metadata, without overwriting existing files. CLI `validate` is read-only: it never creates verification files, replaces documents, changes skins, or promotes metadata. There is no CLI evolution command. Humans control accepted project meaning, authority, and approval of changes beyond the agent's existing authorization.
|
|
13
15
|
|
|
16
|
+
For schema `0.7`, assess the rapid-evolution development default, inherited fresh first-party integration, requirement-driven reliability, and the distinction between project testing and bounded product verification against the actual project instructions, testing documentation, and accepted decisions. Existing `0.6` contexts require this review as well; preserve explicitly accepted reproducibility and security requirements. The default is replaceable by project policy; do not override a project's accepted policy or copy template text blindly. Reconcile testing guidance with the project's ecosystem and existing requirements, with human decisions for changes to accepted meaning.
|
|
17
|
+
|
|
14
18
|
## 1. Discover
|
|
15
19
|
|
|
16
20
|
Inspect applicable `AGENTS.md` instructions, the existing context and metadata, filesystem types, Git boundaries, and current worktree changes. Identify separately mounted `ctx/` and keep each history in place. Do not remove, replace, relocate, or unmount it. Do not traverse unrelated repositories or secret-bearing files. Resolve unsafe links, nested repository ownership, or missing permissions before editing affected paths.
|
|
@@ -23,7 +27,7 @@ Locate authoritative product intent, architecture decisions and rationale, envir
|
|
|
23
27
|
|
|
24
28
|
## 3. Compare
|
|
25
29
|
|
|
26
|
-
Compare actual structure and meaning with current target conventions, even when the recorded version is unknown or already `0.
|
|
30
|
+
Compare actual structure and meaning with current target conventions, even when the recorded version is unknown or already `0.7`. Inventory structural, documentary, projection, and authority differences. Run `adsm-ctx validate <project-root>` and distinguish mechanical findings from semantic inconsistencies. A current version is not proof of conformance; green structure does not establish semantic correctness, verification coverage, or runtime correctness.
|
|
27
31
|
|
|
28
32
|
For example, `0.1.0` and `0.2.0` may lack `verification/AGENTS.md` or describe verification as optional. Inspect their actual documents instead of applying a fixed replacement. Unknown historical layouts require investigation and explicit reporting of what cannot yet be interpreted safely.
|
|
29
33
|
|
|
@@ -33,23 +37,23 @@ Classify proposed changes as structural, editorial, semantic, or requiring human
|
|
|
33
37
|
|
|
34
38
|
## 5. Evolve
|
|
35
39
|
|
|
36
|
-
Apply authorized changes in documentation dependency order. Add missing required boundaries from canonical templates only after inspecting the destination; adapt routing to the actual project instead of replacing custom instructions. For `0.
|
|
40
|
+
Apply authorized changes in documentation dependency order. Add missing required boundaries from canonical templates only after inspecting the destination; adapt routing to the actual project instead of replacing custom instructions. For `0.7`, add missing `verification/AGENTS.md`, update the documentation Level Map, and reconcile optional-adoption wording with accepted declarations and skins. Preserve existing specifications and project directories; create no placeholder specifications or empty target categories.
|
|
37
41
|
|
|
38
42
|
Restructure or clarify only within authorization. Preserve intent, constraints, rationale, history, and projection meaning. Update linked consumers when moving a document and preserve one canonical authority home. Use deterministic helpers only for bounded, agent-selected operations; they do not decide semantic changes. Reinspect on partial failure, report completed work and unresolved differences, and preserve the previous schema label while work remains incomplete.
|
|
39
43
|
|
|
40
44
|
## 6. Validate
|
|
41
45
|
|
|
42
|
-
Run deterministic validation and inspect every error and warning. Assess semantic consistency across declarations, decisions, projections, and local instructions separately. Confirm preserved project-specific knowledge and correct Git boundaries. If the context still bears
|
|
46
|
+
Run deterministic validation and inspect every error and warning. Assess semantic consistency across declarations, decisions, projections, and local instructions separately. Confirm preserved project-specific knowledge and correct Git boundaries. If the context still bears an unsupported schema label, the validator's version finding is expected: establish that all other target requirements pass before promotion. Never ignore malformed metadata, unknown-version ambiguity, or unresolved semantic conflicts as merely a version mismatch. Obtain required human decisions before finalizing.
|
|
43
47
|
|
|
44
48
|
## 7. Finalize
|
|
45
49
|
|
|
46
|
-
Only after target structural requirements and semantic consistency are satisfied, update `ctx/adsm.json` to version `0.
|
|
50
|
+
Only after target structural requirements and semantic consistency are satisfied, update `ctx/adsm.json` to version `0.7`, preserving meaningful metadata fields. A version edit records successful evolution; it does not perform it. Do not promote partially evolved contexts. Run validation again against the final metadata; investigate any failure and retain or restore the prior label if conformance is not established. Do not overwrite an unknown future schema based on this package's older target conventions.
|
|
47
51
|
|
|
48
52
|
Report changes and rationale, preserved content, deterministic results, semantic review scope and limits, remaining warnings, human decisions, and relevant Git histories. On a repeat request, compare the actual state again and make only necessary authorized changes. Repeated CLI validation remain read-only regardless of context state.
|
|
49
53
|
|
|
50
54
|
|
|
51
55
|
## Package Updates And Schema Compatibility
|
|
52
56
|
|
|
53
|
-
A package update replaces the npm implementation; explicitly rerun `adsm-ctx install-skill <skills-root>` to replace its bundled agent guidance. This does not change any context schema metadata and does not imply context evolution is required. Schema versions describe accepted context conventions; package versions describe implementation releases. Package `0.
|
|
57
|
+
A package update replaces the npm implementation; explicitly rerun `adsm-ctx install-skill <skills-root>` to replace its bundled agent guidance. This does not change any context schema metadata and does not imply context evolution is required. Schema versions describe accepted context conventions; package versions describe implementation releases. Package `0.7.1` targets schema `0.7` unchanged. Never infer compatibility from numerical equality.
|
|
54
58
|
|
|
55
|
-
Read the current schema from the project's `ctx/adsm.json`; identify this installed skill's target from Target Conventions above, not the npm version shown by `adsm-ctx --version`. Compare actual context with those conventions and use `validate` to check recorded and supported schema labels plus structural findings. If already conforming to the same schema, no evolution is needed merely because the package changed. Classify structural repairs separately from semantic changes; use the seven phases above for needed evolution and obtain human approval for changes to accepted meaning or authority.
|
|
59
|
+
Read the current schema from the project's `ctx/adsm.json`; identify this installed skill's target from Target Conventions above, not the npm version shown by `adsm-ctx --version`. Compare actual context with those conventions and use `validate` to check recorded and supported schema labels plus structural findings. If already conforming to the same schema, no evolution is needed merely because the package changed. Classify structural repairs separately from semantic changes; use the seven phases above for needed evolution and obtain human approval for changes to accepted meaning or authority. Unsupported labels require investigation; no version-specific migration is provided. Never relabel an older context based solely on package installation.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Context Lifecycle
|
|
2
2
|
|
|
3
3
|
- Path: `skills/adsm-ctx/references/context-lifecycle.md`
|
|
4
|
-
- Changed: `
|
|
4
|
+
- Changed: `20261104`
|
|
5
5
|
|
|
6
6
|
`adsm-ctx` manages six lifecycle modes for project cognitive context.
|
|
7
7
|
|
|
@@ -27,7 +27,7 @@ The lifecycle is iterative. A project may return to `design`, `validate`, `quali
|
|
|
27
27
|
The package-level `adsm-ctx install-skill <skills-root>` command installs the version-matched skill payload into an explicitly supplied agent skills root. After installation or update, run:
|
|
28
28
|
|
|
29
29
|
```sh
|
|
30
|
-
npm install --global
|
|
30
|
+
npm install --global @flancer32/skill-adsm-ctx
|
|
31
31
|
adsm-ctx install-skill "$HOME/.agents/skills"
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Documentation Projections
|
|
2
2
|
|
|
3
3
|
- Path: `skills/adsm-ctx/references/document-projections.md`
|
|
4
|
-
- Changed: `
|
|
4
|
+
- Changed: `20261105`
|
|
5
5
|
|
|
6
6
|
Use this reference whenever an agent initializes, designs, validates, audits, compresses, or evolves ADSM documentation under `ctx/docs/`.
|
|
7
7
|
|
|
@@ -122,7 +122,9 @@ Their meanings remain:
|
|
|
122
122
|
|
|
123
123
|
`ctx/docs/verification/` is a mandatory cross-cutting documentation block. It relates declarations to observations of reality, but is not a fifth refinement level and does not change declaration authority.
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
For the distinction between project testing and product verification, evidence limits, and npm command conventions, see [testing-and-verification.md](testing-and-verification.md).
|
|
126
|
+
|
|
127
|
+
Require the block in schema `0.7`, even when it contains only `AGENTS.md`. Its root requires `AGENTS.md`; direct categories are optional `product/`, `architecture/`, `environment/`, and `code/`. Create a category only when a durable specification exists beneath it. Do not initialize empty categories or placeholder specifications.
|
|
126
128
|
|
|
127
129
|
A verification specification has one canonical home selected by its **primary verification target**: the declaration or bounded declaration group whose truth it chiefly evaluates. It may link to secondary declarations, executable tests, monitors, environments, dependencies, and other contexts. Mechanism, test framework, source path, CI job, endpoint, reporting context, and current Responsible Context do not determine placement.
|
|
128
130
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Project Testing And Product Verification
|
|
2
|
+
|
|
3
|
+
- Path: `skills/adsm-ctx/references/testing-and-verification.md`
|
|
4
|
+
- Changed: `20261105`
|
|
5
|
+
|
|
6
|
+
Project testing checks technical health and engineering conventions of the project and its artifacts, such as context structure, types, module conventions, dependency boundaries, and packaging. A passing project check is not evidence that the product satisfies all its declared requirements. In particular, structural context validation cannot establish semantic correctness.
|
|
7
|
+
|
|
8
|
+
Product verification assesses a declared product property or behavior through bounded observations guided by applicable specifications under `ctx/docs/verification/`. Specifications identify the target, applicable state, approach, and interpretation limits; actual evidence and its provenance remain separate. Explain what each scenario establishes and what it does not: a controlled collaborator can support a bounded contract check, but does not prove live interoperability. The Verification Layer is cross-cutting and cannot redefine accepted product meaning.
|
|
9
|
+
|
|
10
|
+
Choose checks proportionally to the change and risk. Include focused negative tests when security or failure boundaries change. The same test mechanism can contribute to either concern when its target and evidence are explicit; test level alone does not decide the distinction. Humans and accepted project context determine required guarantees. Projects own their scenarios, mechanisms, and evidence; do not invent them in generic templates.
|
|
11
|
+
|
|
12
|
+
For npm projects, `npm test` should be a very fast local project smoke check: no network, temporary installations, or end-to-end scenarios. Use focused `test:*` commands where useful for other project checks. Use `npm run verify` for explicitly bounded product verification, not an indiscriminate aggregate of technical suites, and optional `verify:*` commands for selected scopes; document their coverage, prerequisites, skips, and limits. Do not prescribe a universal suite or mandatory end-to-end setup. These are npm conventions, not requirements to use npm in other ecosystems; keep existing contexts intact and evolve project commands only within the authorized scope.
|
|
13
|
+
|
|
14
|
+
## Fresh First-Party Integration
|
|
15
|
+
|
|
16
|
+
Projects inherit this convention from the Rapid Evolution default without separate opt-in: prefer freshly resolved integration of trusted, actively developed first-party libraries to shorten feedback across repositories. Accepted project context and human instructions override this default, including reproducibility, offline, security, integrity, operational, and deployment requirements. It does not prescribe floating third-party dependencies or production and regulated deployments. Releases and deployments may require independently locked, reproducible inputs. Do not rewrite existing consumer repositories without authorization.
|
|
17
|
+
|
|
18
|
+
For applicable npm projects, a dependency such as `"@teqfw/dem-idb": "github:teqfw/dem-idb"` has no ref selector and resolves the repository's default branch on fresh resolution. Avoid maintaining a committed `package-lock.json` by default: set `package-lock=false` in the project `.npmrc` so npm neither consumes nor writes that lockfile, ignore `package-lock.json`, and stop tracking an existing one only as part of an authorized transition. Check for other lock mechanisms, such as `npm-shrinkwrap.json`, and explicit requirements before assuming resolution is fresh.
|
|
19
|
+
|
|
20
|
+
Use clean CI installations with `npm install` for this integration mode; `npm ci` requires a lockfile and installs its frozen graph. An ordinary `npm install` over existing `node_modules` does not guarantee a newer Git revision: explicitly refresh the dependency or use a clean installation when freshness matters. Do not require npm publication for every first-party iteration. Investigate incompatibilities and fix the responsible contract or implementation instead of silently pinning an older revision, masking failures, or adding speculative compatibility layers.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Root Level
|
|
2
2
|
|
|
3
3
|
- Path: `AGENTS.md`
|
|
4
|
-
- Template Version: `
|
|
4
|
+
- Template Version: `20261105`
|
|
5
5
|
- Changed: `YYYYMMDD`
|
|
6
6
|
|
|
7
7
|
## Boundary
|
|
@@ -12,8 +12,20 @@ This file controls repository work. `ctx/` owns project meaning and is authorita
|
|
|
12
12
|
|
|
13
13
|
A task may cover multiple repositories. Coordinate affected contracts and consumers, verify their integration, and keep each Git history separate. Do not expand into unrelated repositories. The human defines scope and approves changes to accepted meaning.
|
|
14
14
|
|
|
15
|
+
## Development Policy
|
|
16
|
+
|
|
17
|
+
Default to Rapid Evolution by Default, Reliability by Requirement: deliver the essential happy path for fast feedback, fail visibly on unexpected conditions, and avoid speculative defenses and backward compatibility unless justified by accepted requirements, demonstrated problems, or meaningful identified risks. Verify essential contracts and increase verification when risk or observed defects justify it. Accepted context defines the target; humans determine acceptable risk and may strengthen or replace this default. Preserve security, integrity, and explicit invariants. Consult the `adsm-ctx` skill for the policy.
|
|
18
|
+
|
|
19
|
+
This default includes fresh integration of trusted, actively developed first-party dependencies without separate opt-in. Accepted requirements or human instructions may override it; preserve required security, integrity, offline operation, and reproducibility, particularly for releases and deployments. Follow the skill's dependency guidance.
|
|
20
|
+
|
|
15
21
|
## Efficient Execution
|
|
16
22
|
|
|
17
23
|
Classify the task before reading context or running checks. Git-only work needs Git-state checks, not product-context scans or tests. For code or context changes, inspect only relevant owners; run deterministic checks chosen by changed responsibility and risk. Capture verbose output outside the model context and inspect logs on failure or when evidence is needed. Report results, omitted coverage, and material risks concisely.
|
|
18
24
|
|
|
19
25
|
Do not modify, replace, delete, or relocate this file without explicit human instruction. Do not read, search, or expose secret-bearing files or credentials; non-secret examples may describe configuration shape. If a secret is accidentally exposed, do not repeat it; notify the human that it should be rotated or revoked.
|
|
26
|
+
|
|
27
|
+
## Git Delivery
|
|
28
|
+
|
|
29
|
+
An explicit task instruction to commit and push authorizes delivery of the verified commit to the named repository and branch, or to its configured upstream when the branch is unspecified. Inspect the worktree, branch, and remote before pushing. If sandbox networking blocks Git, use the normal approved escalation path; do not ask for duplicate authorization.
|
|
30
|
+
|
|
31
|
+
An automated approval rejection is a platform restriction, not evidence that user authorization is missing. Report the specific restriction and request only the approval the gate requires. Keep delivery pending while that approval is required. These instructions do not override platform security or approval controls or applicable repository rules.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Architecture Behavior
|
|
2
2
|
|
|
3
3
|
- Path: `ctx/docs/architecture/behavior.md`
|
|
4
|
-
- Template Version: `
|
|
4
|
+
- Template Version: `20261105`
|
|
5
5
|
- Changed: `YYYYMMDD`
|
|
6
6
|
|
|
7
7
|
## Purpose
|
|
@@ -14,7 +14,7 @@ This document explains how the system works internally, not which product outcom
|
|
|
14
14
|
|
|
15
15
|
Describe the main architectural flows that matter for the system.
|
|
16
16
|
|
|
17
|
-
Examples may include request handling, synchronization, ingestion, supervision, background processing
|
|
17
|
+
Examples may include request handling, synchronization, ingestion, supervision, or background processing when relevant.
|
|
18
18
|
|
|
19
19
|
Do not rewrite product use cases here.
|
|
20
20
|
|
|
@@ -27,9 +27,9 @@ For each major flow, clarify:
|
|
|
27
27
|
- where important decisions are made;
|
|
28
28
|
- where the flow ends or commits durable change.
|
|
29
29
|
|
|
30
|
-
## Failure
|
|
30
|
+
## Failure Behavior
|
|
31
31
|
|
|
32
|
-
Describe
|
|
32
|
+
Describe visible failure behavior and any handling required by accepted requirements, demonstrated problems, or meaningful identified risks. Do not introduce retries, fallback, recovery, or degradation speculatively. Preserve security, integrity, and accepted invariants.
|
|
33
33
|
|
|
34
34
|
## Product Dependency
|
|
35
35
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Testing Overview
|
|
2
2
|
|
|
3
3
|
- Path: `ctx/docs/code/testing.md`
|
|
4
|
-
- Template Version: `
|
|
4
|
+
- Template Version: `20261104`
|
|
5
5
|
- Changed: `YYYYMMDD`
|
|
6
6
|
|
|
7
7
|
## Purpose
|
|
@@ -15,3 +15,5 @@ List the main test layers, directories, and intended verification scope.
|
|
|
15
15
|
## Verification Target Boundary
|
|
16
16
|
|
|
17
17
|
Keep executable test organization, framework conventions, fixtures, and isolation in this code-level document. When a project adds a durable specification under the mandatory `ctx/docs/verification/` boundary, that specification states the observed declared expectation and primary target; the executable mechanism remains governed here.
|
|
18
|
+
|
|
19
|
+
Distinguish project health checks from product verification and document each command's scope and limits. Apply the `adsm-ctx` skill's testing and verification guidance to the project's ecosystem and risk.
|
package/src/Cli/Command/Init.mjs
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @namespace Fl32_Skill_Adsm_Ctx_Cli_Command_Init
|
|
5
|
+
* @description Initializes project context via the CLI.
|
|
6
|
+
*/
|
|
6
7
|
export default class Init {
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @param {object} deps
|
|
10
|
+
* @param {Fl32_Skill_Adsm_Ctx_Cli_Config} deps.config
|
|
11
|
+
* @param {Fl32_Skill_Adsm_Ctx_Init_Service} deps.init
|
|
12
|
+
* @param {typeof import("node:process")} deps.processModule
|
|
13
|
+
*/
|
|
14
|
+
constructor({config, init, processModule}) {
|
|
8
15
|
this.id = "adsm-ctx:init";
|
|
9
16
|
this.summary = "Initialize an ADSM context.";
|
|
10
17
|
this.lifetime = "finite";
|
|
18
|
+
/**
|
|
19
|
+
* @param {object} deps
|
|
20
|
+
* @param {Record<string, string>} deps.args
|
|
21
|
+
* @returns {Promise<void>}
|
|
22
|
+
*/
|
|
11
23
|
this.execute = async function ({args}) {
|
|
12
24
|
const result = await init.execute({targetPath: args["target-path"] ?? config.cwd});
|
|
13
25
|
processModule.stdout.write(`${formatInitReport(result)}\n`);
|
|
@@ -15,8 +27,12 @@ export default class Init {
|
|
|
15
27
|
}
|
|
16
28
|
}
|
|
17
29
|
|
|
30
|
+
/**
|
|
31
|
+
* @param {Fl32_Skill_Adsm_Ctx_Init_Result} result
|
|
32
|
+
* @returns {string}
|
|
33
|
+
*/
|
|
18
34
|
function formatInitReport(result) {
|
|
19
35
|
return [`Initialized ADSM context in ${result.ctxRoot}`, ...result.created.map((entry) => `Created: ${entry}`), ...result.skipped.map((entry) => `Skipped: ${entry}`)].join("\n");
|
|
20
36
|
}
|
|
21
37
|
|
|
22
|
-
export const __deps__ = Object.freeze({default: Object.freeze({config: "TeqFw_Cli_Config$", init: "Fl32_Skill_Adsm_Ctx_Init_Service$"})});
|
|
38
|
+
export const __deps__ = Object.freeze({default: Object.freeze({processModule: "node:process", config: "TeqFw_Cli_Config$", init: "Fl32_Skill_Adsm_Ctx_Init_Service$"})});
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @namespace Fl32_Skill_Adsm_Ctx_Cli_Command_InstallSkill
|
|
5
|
+
* @description Installs the skill payload via the CLI.
|
|
6
|
+
*/
|
|
6
7
|
export default class InstallSkill {
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @param {object} deps
|
|
10
|
+
* @param {Fl32_Skill_Adsm_Ctx_Skill_Installer} deps.installer
|
|
11
|
+
* @param {typeof import("node:process")} deps.processModule
|
|
12
|
+
*/
|
|
13
|
+
constructor({installer, processModule}) {
|
|
8
14
|
this.id = "adsm-ctx:install-skill";
|
|
9
15
|
this.summary = "Install the bundled agent skill payload.";
|
|
10
16
|
this.lifetime = "finite";
|
|
17
|
+
/**
|
|
18
|
+
* @param {object} deps
|
|
19
|
+
* @param {Record<string, string>} deps.args
|
|
20
|
+
* @returns {Promise<void>}
|
|
21
|
+
*/
|
|
11
22
|
this.execute = async function ({args}) {
|
|
12
23
|
const targetDir = await installer.execute({targetRoot: args["skills-root"]});
|
|
13
24
|
processModule.stdout.write(`Installed skill payload to ${targetDir}\n`);
|
|
@@ -15,4 +26,4 @@ export default class InstallSkill {
|
|
|
15
26
|
}
|
|
16
27
|
}
|
|
17
28
|
|
|
18
|
-
export const __deps__ = Object.freeze({default: Object.freeze({installer: "Fl32_Skill_Adsm_Ctx_Skill_Installer$"})});
|
|
29
|
+
export const __deps__ = Object.freeze({default: Object.freeze({processModule: "node:process", installer: "Fl32_Skill_Adsm_Ctx_Skill_Installer$"})});
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @namespace Fl32_Skill_Adsm_Ctx_Cli_Command_Validate
|
|
5
|
+
* @description Validates project context via the CLI.
|
|
6
|
+
*/
|
|
6
7
|
export default class Validate {
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @param {object} deps
|
|
10
|
+
* @param {Fl32_Skill_Adsm_Ctx_Cli_Config} deps.config
|
|
11
|
+
* @param {typeof import("node:process")} deps.processModule
|
|
12
|
+
* @param {Fl32_Skill_Adsm_Ctx_Validate_Service} deps.validate
|
|
13
|
+
*/
|
|
14
|
+
constructor({config, processModule, validate}) {
|
|
8
15
|
this.id = "adsm-ctx:validate";
|
|
9
16
|
this.summary = "Validate an ADSM context.";
|
|
10
17
|
this.lifetime = "finite";
|
|
18
|
+
/**
|
|
19
|
+
* @param {object} deps
|
|
20
|
+
* @param {Record<string, string>} deps.args
|
|
21
|
+
* @returns {Promise<void>}
|
|
22
|
+
*/
|
|
11
23
|
this.execute = async function ({args}) {
|
|
12
24
|
const result = await validate.execute({targetPath: args["target-path"] ?? config.cwd});
|
|
13
25
|
processModule.stdout.write(`${validate.format({result})}\n`);
|
|
@@ -16,4 +28,4 @@ export default class Validate {
|
|
|
16
28
|
}
|
|
17
29
|
}
|
|
18
30
|
|
|
19
|
-
export const __deps__ = Object.freeze({default: Object.freeze({config: "TeqFw_Cli_Config$", validate: "Fl32_Skill_Adsm_Ctx_Validate_Service$"})});
|
|
31
|
+
export const __deps__ = Object.freeze({default: Object.freeze({processModule: "node:process", config: "TeqFw_Cli_Config$", validate: "Fl32_Skill_Adsm_Ctx_Validate_Service$"})});
|
package/src/Init/Service.mjs
CHANGED
|
@@ -21,9 +21,9 @@ export default class Service {
|
|
|
21
21
|
/**
|
|
22
22
|
* Creates baseline context structure in the target project.
|
|
23
23
|
*
|
|
24
|
-
* @param {object}
|
|
25
|
-
* @param {string}
|
|
26
|
-
* @returns {Promise<
|
|
24
|
+
* @param {object} deps
|
|
25
|
+
* @param {string} deps.targetPath
|
|
26
|
+
* @returns {Promise<Fl32_Skill_Adsm_Ctx_Init_Result>}
|
|
27
27
|
*/
|
|
28
28
|
this.execute = async function ({targetPath}) {
|
|
29
29
|
const projectRoot = pathService.resolve(targetPath);
|
|
@@ -49,12 +49,12 @@ export default class Service {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
|
-
* @param {object}
|
|
53
|
-
* @param {string
|
|
54
|
-
* @param {typeof import("node:fs")}
|
|
55
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
56
|
-
* @param {string}
|
|
57
|
-
* @param {string
|
|
52
|
+
* @param {object} deps
|
|
53
|
+
* @param {Array<string>} deps.created
|
|
54
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
55
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
56
|
+
* @param {string} deps.projectRoot
|
|
57
|
+
* @param {Array<string>} deps.skipped
|
|
58
58
|
* @returns {void}
|
|
59
59
|
*/
|
|
60
60
|
function ensureRootAgents({created, fs, pathService, projectRoot, skipped}) {
|
|
@@ -68,11 +68,11 @@ function ensureRootAgents({created, fs, pathService, projectRoot, skipped}) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
|
-
* @param {object}
|
|
72
|
-
* @param {string
|
|
73
|
-
* @param {typeof import("node:fs")}
|
|
74
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
75
|
-
* @param {string}
|
|
71
|
+
* @param {object} deps
|
|
72
|
+
* @param {Array<string>} deps.created
|
|
73
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
74
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
75
|
+
* @param {string} deps.projectRoot
|
|
76
76
|
* @returns {void}
|
|
77
77
|
*/
|
|
78
78
|
function stampCreatedMarkdownDates({created, fs, pathService, projectRoot}) {
|
|
@@ -87,13 +87,13 @@ function stampCreatedMarkdownDates({created, fs, pathService, projectRoot}) {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
|
-
* @param {object}
|
|
91
|
-
* @param {string
|
|
92
|
-
* @param {typeof import("node:fs")}
|
|
93
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Metadata}
|
|
94
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
95
|
-
* @param {string}
|
|
96
|
-
* @param {string
|
|
90
|
+
* @param {object} deps
|
|
91
|
+
* @param {Array<string>} deps.created
|
|
92
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
93
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Metadata} deps.metadata
|
|
94
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
95
|
+
* @param {string} deps.projectRoot
|
|
96
|
+
* @param {Array<string>} deps.skipped
|
|
97
97
|
* @returns {void}
|
|
98
98
|
*/
|
|
99
99
|
function writeMetadata({created, fs, metadata, pathService, projectRoot, skipped}) {
|
package/src/Shared/Constants.mjs
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
export default class Constants {
|
|
9
|
+
/** Initializes the supported context constants. */
|
|
9
10
|
constructor() {
|
|
10
11
|
this.CONTEXT_SCHEMA = "adsm-context";
|
|
11
|
-
this.CONTEXT_VERSION = "0.
|
|
12
|
+
this.CONTEXT_VERSION = "0.7";
|
|
12
13
|
this.VERIFICATION_CAPABILITY = "verification-layer";
|
|
13
14
|
this.CONTEXT_CAPABILITIES = Object.freeze([this.VERIFICATION_CAPABILITY]);
|
|
14
15
|
this.VERIFICATION_BLOCK = "verification";
|
|
@@ -15,9 +15,9 @@ export default class CopyDirectory {
|
|
|
15
15
|
/**
|
|
16
16
|
* Copies a directory tree recursively.
|
|
17
17
|
*
|
|
18
|
-
* @param {object}
|
|
19
|
-
* @param {string}
|
|
20
|
-
* @param {string}
|
|
18
|
+
* @param {object} deps
|
|
19
|
+
* @param {string} deps.sourcePath
|
|
20
|
+
* @param {string} deps.targetPath
|
|
21
21
|
* @returns {void}
|
|
22
22
|
*/
|
|
23
23
|
this.execute = function ({sourcePath, targetPath}) {
|
|
@@ -36,12 +36,12 @@ export default class CopyDirectory {
|
|
|
36
36
|
/**
|
|
37
37
|
* Copies only missing directories and files from source to target.
|
|
38
38
|
*
|
|
39
|
-
* @param {object}
|
|
40
|
-
* @param {string
|
|
41
|
-
* @param {string}
|
|
42
|
-
* @param {string
|
|
43
|
-
* @param {string}
|
|
44
|
-
* @param {string}
|
|
39
|
+
* @param {object} deps
|
|
40
|
+
* @param {Array<string>} deps.created
|
|
41
|
+
* @param {string} deps.pathPrefix
|
|
42
|
+
* @param {Array<string>} deps.skipped
|
|
43
|
+
* @param {string} deps.sourcePath
|
|
44
|
+
* @param {string} deps.targetPath
|
|
45
45
|
* @returns {void}
|
|
46
46
|
*/
|
|
47
47
|
this.copyMissing = function ({created, pathPrefix, skipped, sourcePath, targetPath}) {
|
package/src/Shared/Metadata.mjs
CHANGED
package/src/Skill/Installer.mjs
CHANGED
|
@@ -19,8 +19,8 @@ export default class Installer {
|
|
|
19
19
|
/**
|
|
20
20
|
* Installs the skill payload.
|
|
21
21
|
*
|
|
22
|
-
* @param {object}
|
|
23
|
-
* @param {string}
|
|
22
|
+
* @param {object} deps
|
|
23
|
+
* @param {string} deps.targetRoot
|
|
24
24
|
* @returns {Promise<string>}
|
|
25
25
|
*/
|
|
26
26
|
this.execute = async function ({targetRoot}) {
|
package/src/Validate/Service.mjs
CHANGED
|
@@ -21,30 +21,9 @@ export default class Validate {
|
|
|
21
21
|
/**
|
|
22
22
|
* Validates context structure.
|
|
23
23
|
*
|
|
24
|
-
* @param {object}
|
|
25
|
-
* @param {string}
|
|
26
|
-
* @returns {Promise<
|
|
27
|
-
* errorCount: number,
|
|
28
|
-
* findings: {
|
|
29
|
-
* message: string,
|
|
30
|
-
* path: string,
|
|
31
|
-
* ruleId: string,
|
|
32
|
-
* severity: "error" | "warning"
|
|
33
|
-
* }[],
|
|
34
|
-
* metadata: {capabilities?: string[], schema: string, version: string, initializedAt?: string} | null,
|
|
35
|
-
* missingPaths: string[],
|
|
36
|
-
* ok: boolean,
|
|
37
|
-
* projectRoot: string,
|
|
38
|
-
* projection: {
|
|
39
|
-
* assets: string[],
|
|
40
|
-
* bodies: string[],
|
|
41
|
-
* orphanSkins: string[],
|
|
42
|
-
* pairs: {body: string, skin: string}[],
|
|
43
|
-
* skins: string[],
|
|
44
|
-
* verification: {categories: string[], present: boolean}
|
|
45
|
-
* },
|
|
46
|
-
* warningCount: number
|
|
47
|
-
* }>}
|
|
24
|
+
* @param {object} deps
|
|
25
|
+
* @param {string} deps.targetPath
|
|
26
|
+
* @returns {Promise<Fl32_Skill_Adsm_Ctx_Validate_Result>}
|
|
48
27
|
*/
|
|
49
28
|
this.execute = async function ({targetPath}) {
|
|
50
29
|
const projectRoot = pathService.resolve(targetPath);
|
|
@@ -96,20 +75,8 @@ export default class Validate {
|
|
|
96
75
|
/**
|
|
97
76
|
* Formats validation result for CLI output.
|
|
98
77
|
*
|
|
99
|
-
* @param {object}
|
|
100
|
-
* @param {
|
|
101
|
-
* errorCount: number,
|
|
102
|
-
* findings: {
|
|
103
|
-
* message: string,
|
|
104
|
-
* path: string,
|
|
105
|
-
* ruleId: string,
|
|
106
|
-
* severity: "error" | "warning"
|
|
107
|
-
* }[],
|
|
108
|
-
* metadata: {version: string} | null,
|
|
109
|
-
* ok: boolean,
|
|
110
|
-
* projectRoot: string,
|
|
111
|
-
* warningCount: number
|
|
112
|
-
* }} params.result
|
|
78
|
+
* @param {object} deps
|
|
79
|
+
* @param {Fl32_Skill_Adsm_Ctx_Validate_Result} deps.result
|
|
113
80
|
* @returns {string}
|
|
114
81
|
*/
|
|
115
82
|
this.format = function ({result}) {
|
|
@@ -140,12 +107,12 @@ export default class Validate {
|
|
|
140
107
|
}
|
|
141
108
|
|
|
142
109
|
/**
|
|
143
|
-
* @param {object}
|
|
144
|
-
* @param {string}
|
|
145
|
-
* @param {string}
|
|
146
|
-
* @param {string}
|
|
147
|
-
* @param {
|
|
148
|
-
* @returns {
|
|
110
|
+
* @param {object} deps
|
|
111
|
+
* @param {string} deps.message
|
|
112
|
+
* @param {string} deps.path
|
|
113
|
+
* @param {string} deps.ruleId
|
|
114
|
+
* @param {Fl32_Skill_Adsm_Ctx_Finding_Severity} deps.severity
|
|
115
|
+
* @returns {Fl32_Skill_Adsm_Ctx_Finding}
|
|
149
116
|
*/
|
|
150
117
|
function createFinding({message, path, ruleId, severity}) {
|
|
151
118
|
return {message, path, ruleId, severity};
|
|
@@ -155,7 +122,7 @@ function createFinding({message, path, ruleId, severity}) {
|
|
|
155
122
|
* Classifies a semantic-skin filename and derives its canonical agent document.
|
|
156
123
|
*
|
|
157
124
|
* @param {string} file
|
|
158
|
-
* @returns {
|
|
125
|
+
* @returns {Fl32_Skill_Adsm_Ctx_SkinInfo_Optional}
|
|
159
126
|
*/
|
|
160
127
|
function parseSkinFilename(file) {
|
|
161
128
|
const explicitMatch = file.match(EXPLICIT_SKIN_FILENAME);
|
|
@@ -185,18 +152,12 @@ function parseSkinFilename(file) {
|
|
|
185
152
|
}
|
|
186
153
|
|
|
187
154
|
/**
|
|
188
|
-
* @param {object}
|
|
189
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants}
|
|
190
|
-
* @param {typeof import("node:fs")}
|
|
191
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
192
|
-
* @param {string}
|
|
193
|
-
* @returns {
|
|
194
|
-
* ok: false,
|
|
195
|
-
* finding: {message: string, path: string, ruleId: string, severity: "error" | "warning"}
|
|
196
|
-
* } | {
|
|
197
|
-
* ok: true,
|
|
198
|
-
* metadata: {schema: string, version: string, initializedAt?: string}
|
|
199
|
-
* }}
|
|
155
|
+
* @param {object} deps
|
|
156
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants} deps.constants
|
|
157
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
158
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
159
|
+
* @param {string} deps.projectRoot
|
|
160
|
+
* @returns {Fl32_Skill_Adsm_Ctx_Metadata_ReadResult}
|
|
200
161
|
*/
|
|
201
162
|
function readMetadata({constants, fs, pathService, projectRoot}) {
|
|
202
163
|
const findings = [];
|
|
@@ -223,9 +184,7 @@ function readMetadata({constants, fs, pathService, projectRoot}) {
|
|
|
223
184
|
}
|
|
224
185
|
if (parsed.version !== constants.CONTEXT_VERSION) {
|
|
225
186
|
findings.push(createFinding({
|
|
226
|
-
message:
|
|
227
|
-
? `Legacy schema ${parsed.version}; use skill adsm-ctx for agent-driven context evolution. Target schema: ${constants.CONTEXT_VERSION}.`
|
|
228
|
-
: `Unsupported metadata version: ${parsed.version}; investigate with skill adsm-ctx before changing schema metadata.`,
|
|
187
|
+
message: `Unsupported metadata version: ${parsed.version}; target schema: ${constants.CONTEXT_VERSION}. Investigate with skill adsm-ctx before changing schema metadata.`,
|
|
229
188
|
path: "ctx/adsm.json",
|
|
230
189
|
ruleId: "metadata-version",
|
|
231
190
|
severity: "error",
|
|
@@ -279,26 +238,13 @@ function readMetadata({constants, fs, pathService, projectRoot}) {
|
|
|
279
238
|
}
|
|
280
239
|
|
|
281
240
|
/**
|
|
282
|
-
* @param {object}
|
|
283
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants}
|
|
284
|
-
* @param {typeof import("node:fs")}
|
|
285
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
286
|
-
* @param {string}
|
|
287
|
-
* @
|
|
288
|
-
*
|
|
289
|
-
* message: string,
|
|
290
|
-
* path: string,
|
|
291
|
-
* ruleId: string,
|
|
292
|
-
* severity: "error" | "warning"
|
|
293
|
-
* }[],
|
|
294
|
-
* summary: {
|
|
295
|
-
* assets: string[],
|
|
296
|
-
* bodies: string[],
|
|
297
|
-
* orphanSkins: string[],
|
|
298
|
-
* pairs: {body: string, skin: string}[],
|
|
299
|
-
* skins: string[]
|
|
300
|
-
* }
|
|
301
|
-
* }}
|
|
241
|
+
* @param {object} deps
|
|
242
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants} deps.constants
|
|
243
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
244
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
245
|
+
* @param {string} deps.projectRoot
|
|
246
|
+
* @param {Fl32_Skill_Adsm_Ctx_Metadata_Optional} deps.metadata
|
|
247
|
+
* @returns {Fl32_Skill_Adsm_Ctx_Projection_Result}
|
|
302
248
|
*/
|
|
303
249
|
function inspectProjection({constants, fs, metadata, pathService, projectRoot}) {
|
|
304
250
|
const docsRoot = pathService.join(projectRoot, "ctx", "docs");
|
|
@@ -441,16 +387,13 @@ function inspectProjection({constants, fs, metadata, pathService, projectRoot})
|
|
|
441
387
|
* Inspects the cross-cutting Verification Layer without treating it as a fifth
|
|
442
388
|
* declarative documentation level.
|
|
443
389
|
*
|
|
444
|
-
* @param {object}
|
|
445
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants}
|
|
446
|
-
* @param {
|
|
447
|
-
* @param {typeof import("node:fs")}
|
|
448
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
449
|
-
* @param {string}
|
|
450
|
-
* @returns {
|
|
451
|
-
* findings: {message: string, path: string, ruleId: string, severity: "error" | "warning"}[],
|
|
452
|
-
* summary: {categories: string[], present: boolean}
|
|
453
|
-
* }}
|
|
390
|
+
* @param {object} deps
|
|
391
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants} deps.constants
|
|
392
|
+
* @param {Fl32_Skill_Adsm_Ctx_DirectoryEntryMap} deps.docsEntryMap
|
|
393
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
394
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
395
|
+
* @param {string} deps.projectRoot
|
|
396
|
+
* @returns {Fl32_Skill_Adsm_Ctx_Verification_Result}
|
|
454
397
|
*/
|
|
455
398
|
function inspectVerificationBlock({constants, docsEntryMap, fs, pathService, projectRoot}) {
|
|
456
399
|
const findings = [];
|
|
@@ -550,13 +493,13 @@ function inspectVerificationBlock({constants, docsEntryMap, fs, pathService, pro
|
|
|
550
493
|
* Warns when a documentation level exceeds the recommended direct-entry capacity
|
|
551
494
|
* and requires its local AGENTS.md to make an intentional exception explicit.
|
|
552
495
|
*
|
|
553
|
-
* @param {object}
|
|
554
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants}
|
|
555
|
-
* @param {
|
|
556
|
-
* @param {typeof import("node:fs")}
|
|
557
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
558
|
-
* @param {string}
|
|
559
|
-
* @returns {
|
|
496
|
+
* @param {object} deps
|
|
497
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants} deps.constants
|
|
498
|
+
* @param {Fl32_Skill_Adsm_Ctx_DirectoryEntryMap} deps.docsEntryMap
|
|
499
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
500
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
501
|
+
* @param {string} deps.projectRoot
|
|
502
|
+
* @returns {Array<Fl32_Skill_Adsm_Ctx_Finding>}
|
|
560
503
|
*/
|
|
561
504
|
function validateDocumentationLevelCapacity({constants, docsEntryMap, fs, pathService, projectRoot}) {
|
|
562
505
|
const findings = [];
|
|
@@ -622,12 +565,12 @@ function validateDocumentationLevelCapacity({constants, docsEntryMap, fs, pathSe
|
|
|
622
565
|
}
|
|
623
566
|
|
|
624
567
|
/**
|
|
625
|
-
* @param {object}
|
|
626
|
-
* @param {typeof import("node:fs")}
|
|
627
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
628
|
-
* @param {string}
|
|
629
|
-
* @param {string}
|
|
630
|
-
* @returns {string
|
|
568
|
+
* @param {object} deps
|
|
569
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
570
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
571
|
+
* @param {string} deps.root
|
|
572
|
+
* @param {string} deps.prefix
|
|
573
|
+
* @returns {Array<string>}
|
|
631
574
|
*/
|
|
632
575
|
function listFiles({fs, pathService, root, prefix}) {
|
|
633
576
|
const result = [];
|
|
@@ -644,21 +587,20 @@ function listFiles({fs, pathService, root, prefix}) {
|
|
|
644
587
|
}
|
|
645
588
|
|
|
646
589
|
/**
|
|
647
|
-
* @param {object}
|
|
648
|
-
* @param {typeof import("node:fs")}
|
|
649
|
-
* @param {string}
|
|
650
|
-
* @returns {
|
|
590
|
+
* @param {object} deps
|
|
591
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
592
|
+
* @param {string} deps.root
|
|
593
|
+
* @returns {Array<Fl32_Skill_Adsm_Ctx_DirectoryEntry>}
|
|
651
594
|
*/
|
|
652
595
|
function listEntries({fs, root}) {
|
|
653
596
|
return fs.readdirSync(root, {withFileTypes: true});
|
|
654
597
|
}
|
|
655
598
|
|
|
656
599
|
/**
|
|
657
|
-
* @param {object}
|
|
658
|
-
* @param {string}
|
|
659
|
-
* @param {
|
|
660
|
-
* @
|
|
661
|
-
* @returns {{message: string, path: string, ruleId: string, severity: "error" | "warning"}[]}
|
|
600
|
+
* @param {object} deps
|
|
601
|
+
* @param {string} deps.file
|
|
602
|
+
* @param {string} deps.text
|
|
603
|
+
* @returns {Array<Fl32_Skill_Adsm_Ctx_Finding>}
|
|
662
604
|
*/
|
|
663
605
|
function validateDocumentMetadata({file, text}) {
|
|
664
606
|
const findings = [];
|
|
@@ -700,13 +642,13 @@ function validateDocumentMetadata({file, text}) {
|
|
|
700
642
|
}
|
|
701
643
|
|
|
702
644
|
/**
|
|
703
|
-
* @param {object}
|
|
704
|
-
* @param {string}
|
|
705
|
-
* @param {typeof import("node:fs")}
|
|
706
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path}
|
|
707
|
-
* @param {string}
|
|
708
|
-
* @param {string}
|
|
709
|
-
* @returns {
|
|
645
|
+
* @param {object} deps
|
|
646
|
+
* @param {string} deps.file
|
|
647
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
648
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
649
|
+
* @param {string} deps.projectRoot
|
|
650
|
+
* @param {string} deps.text
|
|
651
|
+
* @returns {Array<Fl32_Skill_Adsm_Ctx_Finding>}
|
|
710
652
|
*/
|
|
711
653
|
function validateLocalMarkdownLinks({file, fs, pathService, projectRoot, text}) {
|
|
712
654
|
const findings = [];
|
|
@@ -738,12 +680,13 @@ function validateLocalMarkdownLinks({file, fs, pathService, projectRoot, text})
|
|
|
738
680
|
}
|
|
739
681
|
|
|
740
682
|
/**
|
|
741
|
-
* @param {object}
|
|
742
|
-
* @param {
|
|
743
|
-
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants}
|
|
744
|
-
* @param {string}
|
|
745
|
-
* @param {
|
|
746
|
-
* @
|
|
683
|
+
* @param {object} deps
|
|
684
|
+
* @param {Fl32_Skill_Adsm_Ctx_StringSet} deps.bodySet
|
|
685
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Constants} deps.constants
|
|
686
|
+
* @param {string} deps.file
|
|
687
|
+
* @param {Fl32_Skill_Adsm_Ctx_SkinInfo} deps.skinInfo
|
|
688
|
+
* @param {string} deps.text
|
|
689
|
+
* @returns {Array<Fl32_Skill_Adsm_Ctx_Finding>}
|
|
747
690
|
*/
|
|
748
691
|
function validateSkinDocument({bodySet, constants, file, skinInfo, text}) {
|
|
749
692
|
const findings = [];
|
|
@@ -767,9 +710,9 @@ function validateSkinDocument({bodySet, constants, file, skinInfo, text}) {
|
|
|
767
710
|
}
|
|
768
711
|
|
|
769
712
|
/**
|
|
770
|
-
* @param {object}
|
|
771
|
-
* @param {string}
|
|
772
|
-
* @param {string}
|
|
713
|
+
* @param {object} deps
|
|
714
|
+
* @param {string} deps.sectionName
|
|
715
|
+
* @param {string} deps.text
|
|
773
716
|
* @returns {string}
|
|
774
717
|
*/
|
|
775
718
|
function extractSectionBody({sectionName, text}) {
|
|
@@ -789,10 +732,10 @@ function extractSectionBody({sectionName, text}) {
|
|
|
789
732
|
}
|
|
790
733
|
|
|
791
734
|
/**
|
|
792
|
-
* @param {object}
|
|
793
|
-
* @param {string}
|
|
794
|
-
* @param {string}
|
|
795
|
-
* @returns {
|
|
735
|
+
* @param {object} deps
|
|
736
|
+
* @param {string} deps.file
|
|
737
|
+
* @param {string} deps.link
|
|
738
|
+
* @returns {Fl32_Skill_Adsm_Ctx_Validate_Link_Optional}
|
|
796
739
|
*/
|
|
797
740
|
function normalizeLocalMarkdownLink({file, link}) {
|
|
798
741
|
const trimmed = link.trim();
|
|
@@ -819,8 +762,8 @@ function normalizeLocalMarkdownLink({file, link}) {
|
|
|
819
762
|
}
|
|
820
763
|
|
|
821
764
|
/**
|
|
822
|
-
* @param {string
|
|
823
|
-
* @returns {string
|
|
765
|
+
* @param {Array<string>} parts
|
|
766
|
+
* @returns {Array<string>}
|
|
824
767
|
*/
|
|
825
768
|
function normalizeRelativeSegments(parts) {
|
|
826
769
|
const result = [];
|
|
@@ -835,17 +778,23 @@ function normalizeRelativeSegments(parts) {
|
|
|
835
778
|
return result;
|
|
836
779
|
}
|
|
837
780
|
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
}
|
|
843
|
-
|
|
844
|
-
|
|
781
|
+
/**
|
|
782
|
+
* Checks context-side routing sections; root repository instructions have a separate shape.
|
|
783
|
+
* @param {object} deps
|
|
784
|
+
* @param {typeof import("node:fs")} deps.fs
|
|
785
|
+
* @param {Fl32_Skill_Adsm_Ctx_Shared_Path} deps.pathService
|
|
786
|
+
* @param {string} deps.projectRoot
|
|
787
|
+
* @returns {Array<Fl32_Skill_Adsm_Ctx_Finding>}
|
|
788
|
+
*/
|
|
845
789
|
function inspectAgentsHierarchy({fs, pathService, projectRoot}) {
|
|
846
790
|
const findings = [];
|
|
847
791
|
const root = pathService.join(projectRoot, "ctx");
|
|
848
792
|
if (!fs.existsSync(root)) return findings;
|
|
793
|
+
/**
|
|
794
|
+
* @param {string} directory
|
|
795
|
+
* @param {string} relative
|
|
796
|
+
* @returns {void}
|
|
797
|
+
*/
|
|
849
798
|
const visit = (directory, relative) => {
|
|
850
799
|
let entries;
|
|
851
800
|
try { entries = listEntries({fs, root: directory}); }
|
|
@@ -890,3 +839,9 @@ function inspectAgentsHierarchy({fs, pathService, projectRoot}) {
|
|
|
890
839
|
visit(root, "ctx");
|
|
891
840
|
return findings;
|
|
892
841
|
}
|
|
842
|
+
|
|
843
|
+
export const __deps__ = Object.freeze({default: Object.freeze({
|
|
844
|
+
constants: "Fl32_Skill_Adsm_Ctx_Shared_Constants$",
|
|
845
|
+
fs: "node:fs",
|
|
846
|
+
pathService: "Fl32_Skill_Adsm_Ctx_Shared_Path$",
|
|
847
|
+
})});
|
package/types.d.ts
CHANGED
|
@@ -1,14 +1,45 @@
|
|
|
1
1
|
declare global {
|
|
2
2
|
type Fl32_Skill_Adsm_Ctx_Cli_Command_Init = import("./src/Cli/Command/Init.mjs").default;
|
|
3
|
+
type Fl32_Skill_Adsm_Ctx_Cli_Command_Init__Class = typeof import("./src/Cli/Command/Init.mjs").default;
|
|
3
4
|
type Fl32_Skill_Adsm_Ctx_Cli_Command_InstallSkill = import("./src/Cli/Command/InstallSkill.mjs").default;
|
|
5
|
+
type Fl32_Skill_Adsm_Ctx_Cli_Command_InstallSkill__Class = typeof import("./src/Cli/Command/InstallSkill.mjs").default;
|
|
4
6
|
type Fl32_Skill_Adsm_Ctx_Cli_Command_Validate = import("./src/Cli/Command/Validate.mjs").default;
|
|
7
|
+
type Fl32_Skill_Adsm_Ctx_Cli_Command_Validate__Class = typeof import("./src/Cli/Command/Validate.mjs").default;
|
|
8
|
+
type Fl32_Skill_Adsm_Ctx_Cli_Config = {cwd: string};
|
|
9
|
+
type Fl32_Skill_Adsm_Ctx_DirectoryEntry = {name: string; isDirectory: () => boolean; isFile: () => boolean};
|
|
10
|
+
type Fl32_Skill_Adsm_Ctx_DirectoryEntryMap = {get: (name: string) => Fl32_Skill_Adsm_Ctx_DirectoryEntry | undefined};
|
|
11
|
+
type Fl32_Skill_Adsm_Ctx_Finding = {message: string; path: string; ruleId: string; severity: "error" | "warning"};
|
|
12
|
+
type Fl32_Skill_Adsm_Ctx_Finding_Severity = "error" | "warning";
|
|
13
|
+
type Fl32_Skill_Adsm_Ctx_Init_Result = {created: Array<string>; ctxRoot: string; projectRoot: string; skipped: Array<string>};
|
|
5
14
|
type Fl32_Skill_Adsm_Ctx_Init_Service = import("./src/Init/Service.mjs").default;
|
|
15
|
+
type Fl32_Skill_Adsm_Ctx_Init_Service__Class = typeof import("./src/Init/Service.mjs").default;
|
|
16
|
+
type Fl32_Skill_Adsm_Ctx_Metadata = {schema: string; version: string; capabilities?: Array<string>; initializedAt?: string};
|
|
17
|
+
type Fl32_Skill_Adsm_Ctx_Metadata_Optional = Fl32_Skill_Adsm_Ctx_Metadata | null;
|
|
18
|
+
type Fl32_Skill_Adsm_Ctx_Metadata_ReadResult = {findings: Array<Fl32_Skill_Adsm_Ctx_Finding>; metadata: Fl32_Skill_Adsm_Ctx_Metadata | null; ok: boolean};
|
|
19
|
+
type Fl32_Skill_Adsm_Ctx_Metadata_Value = {schema: string; version: string; capabilities: Array<string>};
|
|
20
|
+
type Fl32_Skill_Adsm_Ctx_Projection = {assets: Array<string>; bodies: Array<string>; orphanSkins: Array<string>; pairs: Array<Fl32_Skill_Adsm_Ctx_Projection_Pair>; skins: Array<string>; verification?: Fl32_Skill_Adsm_Ctx_Verification_Summary};
|
|
21
|
+
type Fl32_Skill_Adsm_Ctx_Projection_Pair = {body: string; skin: string};
|
|
22
|
+
type Fl32_Skill_Adsm_Ctx_Projection_Result = {findings: Array<Fl32_Skill_Adsm_Ctx_Finding>; summary: Fl32_Skill_Adsm_Ctx_Projection};
|
|
6
23
|
type Fl32_Skill_Adsm_Ctx_Shared_Constants = import("./src/Shared/Constants.mjs").default;
|
|
24
|
+
type Fl32_Skill_Adsm_Ctx_Shared_Constants__Class = typeof import("./src/Shared/Constants.mjs").default;
|
|
7
25
|
type Fl32_Skill_Adsm_Ctx_Shared_CopyDirectory = import("./src/Shared/CopyDirectory.mjs").default;
|
|
26
|
+
type Fl32_Skill_Adsm_Ctx_Shared_CopyDirectory__Class = typeof import("./src/Shared/CopyDirectory.mjs").default;
|
|
8
27
|
type Fl32_Skill_Adsm_Ctx_Shared_Metadata = import("./src/Shared/Metadata.mjs").default;
|
|
28
|
+
type Fl32_Skill_Adsm_Ctx_Shared_Metadata__Class = typeof import("./src/Shared/Metadata.mjs").default;
|
|
9
29
|
type Fl32_Skill_Adsm_Ctx_Shared_Path = import("./src/Shared/Path.mjs").default;
|
|
30
|
+
type Fl32_Skill_Adsm_Ctx_Shared_Path__Class = typeof import("./src/Shared/Path.mjs").default;
|
|
10
31
|
type Fl32_Skill_Adsm_Ctx_Skill_Installer = import("./src/Skill/Installer.mjs").default;
|
|
32
|
+
type Fl32_Skill_Adsm_Ctx_Skill_Installer__Class = typeof import("./src/Skill/Installer.mjs").default;
|
|
33
|
+
type Fl32_Skill_Adsm_Ctx_SkinInfo = {body: string; language: string | null; markerError: string | null};
|
|
34
|
+
type Fl32_Skill_Adsm_Ctx_SkinInfo_Optional = Fl32_Skill_Adsm_Ctx_SkinInfo | null;
|
|
35
|
+
type Fl32_Skill_Adsm_Ctx_StringSet = {has: (value: string) => boolean};
|
|
36
|
+
type Fl32_Skill_Adsm_Ctx_Validate_Link = {fragment: string | null; path: string};
|
|
37
|
+
type Fl32_Skill_Adsm_Ctx_Validate_Link_Optional = Fl32_Skill_Adsm_Ctx_Validate_Link | null;
|
|
38
|
+
type Fl32_Skill_Adsm_Ctx_Validate_Result = {errorCount: number; findings: Array<Fl32_Skill_Adsm_Ctx_Finding>; metadata: Fl32_Skill_Adsm_Ctx_Metadata | null; missingPaths: Array<string>; ok: boolean; projectRoot: string; projection: Fl32_Skill_Adsm_Ctx_Projection; warningCount: number};
|
|
11
39
|
type Fl32_Skill_Adsm_Ctx_Validate_Service = import("./src/Validate/Service.mjs").default;
|
|
40
|
+
type Fl32_Skill_Adsm_Ctx_Validate_Service__Class = typeof import("./src/Validate/Service.mjs").default;
|
|
41
|
+
type Fl32_Skill_Adsm_Ctx_Verification_Result = {findings: Array<Fl32_Skill_Adsm_Ctx_Finding>; summary: Fl32_Skill_Adsm_Ctx_Verification_Summary};
|
|
42
|
+
type Fl32_Skill_Adsm_Ctx_Verification_Summary = {categories: Array<string>; present: boolean};
|
|
12
43
|
}
|
|
13
44
|
|
|
14
45
|
export {};
|