forgeos 0.1.0-alpha.68 → 0.1.0-alpha.69
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/.agents/skills/forge-agent-fabric/SKILL.md +21 -1
- package/.agents/skills/forge-agent-fabric/references/repository-analysis.md +102 -0
- package/.agents/skills/forge-agent-fabric/scripts/repository.mjs +44 -0
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +16 -0
- package/README.md +12 -3
- package/docs/agent-fabric.md +13 -0
- package/docs/architecture/agent-fabric/REPOSITORY_MANIFEST_PLAN.md +272 -0
- package/docs/changelog.md +32 -0
- package/docs/repository-agent-benchmark.md +179 -0
- package/docs/repository-analysis.md +139 -0
- package/docs/repository-context-quality.md +179 -0
- package/docs/repository-runtime-observation.md +82 -0
- package/package.json +14 -2
- package/schemas/forge-manifest.schema.json +385 -53
- package/src/forge/_generated/releaseManifest.json +1 -1
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/agent-fabric/managed-run-contract.ts +1 -0
- package/src/forge/agent-fabric/managed-run-service.ts +10 -1
- package/src/forge/agent-fabric/managed-run-store.ts +20 -0
- package/src/forge/agent-fabric/managed-workspace.ts +56 -18
- package/src/forge/agent-fabric/repository-context.ts +83 -0
- package/src/forge/agent-memory/mcp.ts +38 -1
- package/src/forge/cair/index.ts +15 -3
- package/src/forge/cair/types.ts +9 -2
- package/src/forge/cli/commands.ts +19 -0
- package/src/forge/cli/main.ts +15 -0
- package/src/forge/cli/parse.ts +70 -16
- package/src/forge/cli/repository.ts +151 -0
- package/src/forge/compiler/external-manifest/registry.ts +21 -9
- package/src/forge/delta/process-identity.ts +22 -16
- package/src/forge/repository-analysis/adapters/common.ts +72 -0
- package/src/forge/repository-analysis/adapters/docker.ts +185 -0
- package/src/forge/repository-analysis/adapters/java.ts +133 -0
- package/src/forge/repository-analysis/adapters/typescript.ts +350 -0
- package/src/forge/repository-analysis/adapters/vue.ts +71 -0
- package/src/forge/repository-analysis/analyze.ts +434 -0
- package/src/forge/repository-analysis/benchmark.ts +336 -0
- package/src/forge/repository-analysis/cache-gc.ts +154 -0
- package/src/forge/repository-analysis/check-selection.ts +123 -0
- package/src/forge/repository-analysis/context-node.ts +17 -0
- package/src/forge/repository-analysis/context.ts +456 -0
- package/src/forge/repository-analysis/http-resolution.ts +135 -0
- package/src/forge/repository-analysis/identity.ts +45 -0
- package/src/forge/repository-analysis/index.ts +18 -0
- package/src/forge/repository-analysis/nuxt-resolution.ts +188 -0
- package/src/forge/repository-analysis/quality.ts +60 -0
- package/src/forge/repository-analysis/retrieval.ts +309 -0
- package/src/forge/repository-analysis/runtime-artifacts.ts +195 -0
- package/src/forge/repository-analysis/runtime-observation.ts +316 -0
- package/src/forge/repository-analysis/scanner.ts +174 -0
- package/src/forge/repository-analysis/storage.ts +193 -0
- package/src/forge/repository-analysis/test-associations.ts +59 -0
- package/src/forge/repository-analysis/types.ts +99 -0
- package/src/forge/repository-manifest/index.ts +178 -0
- package/src/forge/repository-manifest/types.ts +63 -0
- package/src/forge/version.ts +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: forge-agent-fabric
|
|
3
|
-
description: Conduct or resume
|
|
3
|
+
description: Conduct or resume Forge Agent Fabric tasks and prepare repository manifests, analysis maps and source-bound context in existing projects, including Vue, Java and Docker.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Forge Agent Fabric
|
|
@@ -38,6 +38,26 @@ Native MCP tools are `fabric_attached_*`, `fabric_workflow_*` and `fabric_run_*`
|
|
|
38
38
|
offers the same operations. State which transport you actually demonstrated.
|
|
39
39
|
Do not register MCP or change global configuration as a side effect of using this skill.
|
|
40
40
|
|
|
41
|
+
## Analyze an existing repository
|
|
42
|
+
|
|
43
|
+
When asked to prepare a project for Forge maps, read
|
|
44
|
+
[repository analysis](references/repository-analysis.md). Use the shared runtime through
|
|
45
|
+
`scripts/repository.mjs --project <target-directory> manifest|repository|cair <operation>`.
|
|
46
|
+
This helper does not require Git; managed Fabric execution still requires Git with HEAD.
|
|
47
|
+
Discovery returns a proposal. Inspect it against project instructions and code, then prepare
|
|
48
|
+
`forge.manifest.json` only when edits are authorized. Preserve an existing service manifest.
|
|
49
|
+
Validate the repository manifest before analyzing. Maps describe static evidence and
|
|
50
|
+
coverage gaps, not runtime availability or executed test coverage. Checks are suggestions;
|
|
51
|
+
never execute them just because the manifesto contains them. Do not start containers,
|
|
52
|
+
build Java, execute configuration scripts or install hooks/MCP during static analysis.
|
|
53
|
+
Use repository queries to give each task compact context with snapshotId. Refresh analysis
|
|
54
|
+
when sources change, and never reuse source snippets or handles from a stale snapshot.
|
|
55
|
+
For manifests stored outside the project, keep passing the same explicit `--manifest`
|
|
56
|
+
to analysis and CAIR queries; the helper binds their root from `--project`.
|
|
57
|
+
Managed SDK workers receive analysis from their own prepared clone when it contains a
|
|
58
|
+
valid repository manifest. This context supplements acceptance checks and does not
|
|
59
|
+
change publication or review requirements.
|
|
60
|
+
|
|
41
61
|
Read [managed request fields and examples](references/managed-workflows.md) before
|
|
42
62
|
preparing run-start. The references travel with this skill and require no Forge checkout.
|
|
43
63
|
For MCP, inspect tool schemas and select the registered target project explicitly through
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Repository manifests and maps
|
|
2
|
+
|
|
3
|
+
Use Forge as analysis tooling in an existing project without adding the Forge application
|
|
4
|
+
runtime. Shared installation is enough. Vue/Nuxt, Java/Spring, TypeScript/JavaScript and
|
|
5
|
+
Docker/Compose adapters report their coverage; partial static knowledge remains partial.
|
|
6
|
+
|
|
7
|
+
Run these with the absolute installed skill helper and an explicit target directory:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
node <skill>/scripts/repository.mjs --project <project> manifest discover --json
|
|
11
|
+
node <skill>/scripts/repository.mjs --project <project> manifest validate forge.manifest.json --json
|
|
12
|
+
node <skill>/scripts/repository.mjs --project <project> repository analyze --write --json
|
|
13
|
+
node <skill>/scripts/repository.mjs --project <project> repository context --query routes --json
|
|
14
|
+
node <skill>/scripts/repository.mjs --project <project> repository context --query coverage --json
|
|
15
|
+
node <skill>/scripts/repository.mjs --project <project> repository quality --cases <absolute-reviewed-cases.json> --json
|
|
16
|
+
node <skill>/scripts/repository.mjs --project <project> cair query "Q S name=<symbol>" --snapshot-id <snapshot-id> --json
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Discovery is read-only by default: it returns a draft for the agent to review and save within the
|
|
20
|
+
user's authorized scope. Confirm component roots and adapters against actual files,
|
|
21
|
+
retain uncertainty, and do not overwrite a service 1.0 manifest. Repository manifests
|
|
22
|
+
use `forgeProtocol: "2.0"` and `kind: "repository"`. Keep paths relative to the project.
|
|
23
|
+
The manifest configures analysis; it is not a hand-maintained symbol inventory.
|
|
24
|
+
|
|
25
|
+
Validate before analyzing. Analysis with `--write` saves explicit output to `.forge/repository/`
|
|
26
|
+
unless a host-local cache destination is requested. Without `--write`, analysis returns
|
|
27
|
+
an ephemeral snapshot and creates no cache. It does not alter
|
|
28
|
+
generated application code, `.gitignore`, application dependencies or global integrations.
|
|
29
|
+
Use `--help` for supported flags and current query grammar. Query results identify the
|
|
30
|
+
snapshot and source evidence; a stale-source diagnostic requires fresh analysis.
|
|
31
|
+
|
|
32
|
+
The helper binds `--project` explicitly for repository operations and CAIR. For a manifest
|
|
33
|
+
kept outside the project, add `--manifest <absolute-file>` consistently to analysis and
|
|
34
|
+
queries. Its location does not redefine the project root. Do not substitute another
|
|
35
|
+
project's snapshot or leave out the external manifest when querying that snapshot.
|
|
36
|
+
|
|
37
|
+
Do not read actual `.env` or secret files to resolve infrastructure. Unknown interpolation,
|
|
38
|
+
dynamic URLs, Java reflection, Vue dynamic components and unresolved imports are gaps,
|
|
39
|
+
not permission to infer certainty. A Compose dependency is declared topology, not observed
|
|
40
|
+
traffic. A statically associated test is not proof that it ran or covered the component.
|
|
41
|
+
|
|
42
|
+
For Fabric, keep analysis configuration in the project before run-start. Each SDK attempt
|
|
43
|
+
analyzes its prepared clone after upstream changes and environment preparation. Clone
|
|
44
|
+
snapshot IDs cannot be substituted with the original checkout's snapshot. Maps do not
|
|
45
|
+
remove required reviews/checks, execute suggested checks, or authorize publication.
|
|
46
|
+
Worker packets prioritize task matches and scoped symbols, include both endpoints of
|
|
47
|
+
every returned edge, and declare truncation when their context budget omits facts.
|
|
48
|
+
Their phase is `prepared-input`, not an assertion about later worker edits. Invalid
|
|
49
|
+
configuration yields unavailable maps without echoing manifest source values in run status.
|
|
50
|
+
|
|
51
|
+
Use optional `component.analysis.aliases` and `component.analysis.nuxt` to declare
|
|
52
|
+
contained local resolution paths that executable config cannot establish statically.
|
|
53
|
+
These paths are relative to the component root. `httpClients` may map a client ID
|
|
54
|
+
(including `$api`) and file scope to a literal base path/API component. Record the
|
|
55
|
+
scenario behind a mapping: a deployment default is declared evidence and never
|
|
56
|
+
observed routing. Keep unknown URLs and ambiguous endpoints unresolved.
|
|
57
|
+
|
|
58
|
+
Task context prioritizes exact/scoped targets, relevant consumers and case-level
|
|
59
|
+
test evidence. A test-file import does not associate all sibling cases with that
|
|
60
|
+
function. Included neighbors outside write scope are read-only. Suggested checks
|
|
61
|
+
retain argv arrays, working directories, selection reasons, cost/category and
|
|
62
|
+
unknown/missing/satisfied symbolic requirements; no check runs during map preparation.
|
|
63
|
+
`ready` means the packet was prepared. Static quality is always partial and does not
|
|
64
|
+
claim runtime observation.
|
|
65
|
+
|
|
66
|
+
For quality review, prepare a JSON task array with `id`, `query`, `expectedFiles`
|
|
67
|
+
and optionally `scope`, `expectedTests`, `forbiddenFiles` and `forbiddenTests`.
|
|
68
|
+
Run `repository quality` against a current explicitly saved snapshot. It returns
|
|
69
|
+
missing/forbidden associations, context size, truncation and recall/precision against
|
|
70
|
+
the supplied expected file set. Require a reviewed set; do not remove failing
|
|
71
|
+
expectations merely to obtain a pass. This read-only benchmark runs no models or
|
|
72
|
+
application tests and cannot establish productivity improvement or executed coverage.
|
|
73
|
+
|
|
74
|
+
Large v2 caches use hash-checked partitions and on-demand hydration, with complete
|
|
75
|
+
integrity validation and a two-partition decoded cache. V1 compatibility is eager;
|
|
76
|
+
wide queries may retain extra results. Analysis with --write maintains orphan caches
|
|
77
|
+
after conservative retention; cache-gc defaults to preview and --write applies it.
|
|
78
|
+
Never reclaim a foreign lock or treat serialized resident bytes as heap usage.
|
|
79
|
+
Use benchmark-plan with reviewed cases and explicit model settings to prepare a paired
|
|
80
|
+
experiment; benchmark-report evaluates supplied evidence without running workers/checks.
|
|
81
|
+
Missing evidence is unknown, and model execution still requires authorized cost/scope.
|
|
82
|
+
Matching parse facts can be reused read-only in a managed clone, but its graph,
|
|
83
|
+
root, manifest/scenario connections and freshness are rebuilt. No per-project
|
|
84
|
+
dependency, native hook or MCP installation is required for this flow. These features
|
|
85
|
+
require a runtime containing the quality implementation; copying a newer skill onto
|
|
86
|
+
an older runtime does not upgrade that runtime.
|
|
87
|
+
|
|
88
|
+
Runtime observations are optional and explicit. Add reviewed `runtime.observations`
|
|
89
|
+
with commands, contained cwd and generated artifact paths, then use `repository
|
|
90
|
+
runtime-plan --environment-id local --json` before `runtime-observe --environment-id
|
|
91
|
+
local --execute --write --json`. The latter executes trusted argv in an independent
|
|
92
|
+
temporary source copy; it is not an OS/network/container security sandbox. Dependencies
|
|
93
|
+
must be prepared by declared commands. Do not copy credentials or assume external
|
|
94
|
+
services are authorized merely because a manifest mentions them. No model runs here.
|
|
95
|
+
`runtime-context` reads sanitized bounded evidence, validates input bindings and expiry,
|
|
96
|
+
and never executes. Nuxt registrations, Spring exports, Docker inspection and HTTP
|
|
97
|
+
traces retain their format-specific limitations; they are not exhaustive runtime coverage.
|
|
98
|
+
Exporters must close external resources they start. No hook or MCP installation is needed
|
|
99
|
+
per project. Fabric can add matching saved observations to a prepared worker packet
|
|
100
|
+
without running an exporter; composed input changes invalidate this reuse. Keep original
|
|
101
|
+
protected repositories read-only and use the dedicated pilot copies for validation.
|
|
102
|
+
See `docs/repository-runtime-observation.md` for the contract and execution examples.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync, realpathSync, existsSync, statSync } from 'node:fs';
|
|
3
|
+
import { dirname, resolve, isAbsolute } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { spawnSync } from 'node:child_process';
|
|
6
|
+
|
|
7
|
+
// Analysis can target a directory without Git. Runtime configuration never sets cwd.
|
|
8
|
+
const skillRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
9
|
+
try {
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
let project = process.cwd();
|
|
12
|
+
if (args.filter(arg => arg === '--project').length > 1) throw new Error('--project may be supplied only once');
|
|
13
|
+
const index = args.indexOf('--project');
|
|
14
|
+
if (index >= 0) {
|
|
15
|
+
if (!args[index + 1] || args[index + 1].startsWith('--')) throw new Error('--project requires a target directory');
|
|
16
|
+
project = args[index + 1];
|
|
17
|
+
args.splice(index, 2);
|
|
18
|
+
}
|
|
19
|
+
const cwd = realpathSync(project);
|
|
20
|
+
if (!statSync(cwd).isDirectory()) throw new Error('Analysis project must be a directory');
|
|
21
|
+
const surface = args.shift();
|
|
22
|
+
if (!['manifest', 'repository', 'cair'].includes(surface)) throw new Error('Choose manifest, repository or cair before the operation');
|
|
23
|
+
if (index >= 0 && (surface === 'repository' || surface === 'cair' || (surface === 'manifest' && args[0] === 'discover')) && !args.includes('--root')) args.push('--root', cwd);
|
|
24
|
+
let runtime = {};
|
|
25
|
+
const config = resolve(skillRoot, 'runtime.json');
|
|
26
|
+
if (existsSync(config)) runtime = JSON.parse(readFileSync(config, 'utf8'));
|
|
27
|
+
let cliPath = process.env.FORGE_FABRIC_CLI || runtime.cliPath;
|
|
28
|
+
if (!cliPath) {
|
|
29
|
+
const lookup = spawnSync(process.platform === 'win32' ? 'where.exe' : 'which', ['forge'], { encoding: 'utf8', windowsHide: true });
|
|
30
|
+
for (const candidate of lookup.stdout?.trim().split(/\r?\n/).filter(Boolean) || []) {
|
|
31
|
+
const bin = realpathSync(candidate);
|
|
32
|
+
cliPath = [bin, resolve(dirname(bin), 'node_modules/forgeos/bin/forge.mjs')].find(path => path.endsWith('.mjs') && existsSync(path));
|
|
33
|
+
if (cliPath) break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!cliPath || !isAbsolute(cliPath) || !existsSync(cliPath)) throw new Error('Forge runtime not found. Install this skill with --runtime <absolute forge.mjs>, or set FORGE_FABRIC_CLI.');
|
|
37
|
+
// No recorder Delta side effects for repository reads; artifacts are explicit analyze outputs.
|
|
38
|
+
const result = spawnSync(runtime.nodeExecutable || process.execPath, [realpathSync(cliPath), surface, ...args, '--no-delta'], { cwd, stdio: 'inherit', windowsHide: true });
|
|
39
|
+
if (result.error) throw result.error;
|
|
40
|
+
process.exitCode = result.status ?? 1;
|
|
41
|
+
} catch (error) {
|
|
42
|
+
process.stderr.write(`${error.message}\n`);
|
|
43
|
+
process.exitCode = 1;
|
|
44
|
+
}
|
package/AGENTS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// @forge-generated generator=0.1.0-alpha.
|
|
1
|
+
// @forge-generated generator=0.1.0-alpha.69 input=a62f6d9631d76e83840b1f77cac5b6c6e1f6da1acab63d41614e2fe47b9d5ca7 content=721818a6f9a664aa898092d4aa5cd68cbbd8ad6e150c7d3ad3ef785a2e3fcf53
|
|
2
2
|
# AGENTS.md
|
|
3
3
|
|
|
4
4
|
<!-- forge-generated:start -->
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# forgeos
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- Add opt-in repository runtime observation with independent temporary source copies, bounded Nuxt/Spring/Docker/HTTP artifact collectors, input-bound expiring reports and shared CLI/MCP plan/observe/context operations. Fabric consumes only compatible saved observations, without implicit project execution.
|
|
6
|
+
- Recover once from a premature Bun/Windows process-identity timeout while retaining unknown identity on repeated failures; protect existing lock ownership semantics.
|
|
7
|
+
|
|
8
|
+
- Complete large-map query storage with lazy hydration and streaming fingerprints; preserve legacy caches, cap resident partitions and avoid relation-ranking read amplification. Maintain retained orphan chunks automatically and expose cache-gc previews. Add source-bound paired agent benchmark planning/reporting without implicit model execution.
|
|
9
|
+
|
|
10
|
+
- Improve repository task context with deterministic scoped retrieval, case-level test associations, local Nuxt resolution and explicit HTTP client mappings. Expose static quality and informative check requirements without executing project commands.
|
|
11
|
+
- Store large maps and root-neutral parse facts in validated partitions, reuse matching facts in prepared Fabric clones, and add a read-only `repository quality --cases` benchmark for reviewed expectations.
|
|
12
|
+
|
|
13
|
+
## 0.1.0-alpha.69
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Add repository manifests and static Vue, Java, and Docker maps for existing projects, with snapshot-bound CAIR queries and clone-specific Agent Fabric context. Preserve service manifests and keep discovery, validation, and context reads free of implicit project execution or local recorder writes.
|
|
18
|
+
|
|
3
19
|
## 0.1.0-alpha.68
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -140,9 +140,18 @@ npm run field:test -- --package-managers npm --templates minimal-web --forge-spe
|
|
|
140
140
|
|
|
141
141
|
The scheduled/manual `Field Tests` workflow expands that coverage across Linux, macOS, Windows, Node 22, Node 24, and npm/pnpm/yarn/bun.
|
|
142
142
|
|
|
143
|
-
## External Runtimes And Adapters
|
|
144
|
-
|
|
145
|
-
|
|
143
|
+
## External Runtimes And Adapters
|
|
144
|
+
|
|
145
|
+
For agent maps in an existing Vue, Java/Spring, TypeScript, or Docker/Compose repository,
|
|
146
|
+
use the shared CLI without migrating the app to Forge. `forge manifest discover --json`
|
|
147
|
+
proposes a repository manifest; after reviewing and saving it, run
|
|
148
|
+
`forge repository analyze --write --json` and `forge repository context --query routes --json`.
|
|
149
|
+
The same maps are available through CAIR and feed prepared Agent Fabric clones.
|
|
150
|
+
Discovery and queries do not start project tools; maps report static coverage and unresolved relations.
|
|
151
|
+
See [Repository Analysis](docs/repository-analysis.md) for the versioned manifest,
|
|
152
|
+
host-local cache options, snapshot-bound queries and language limitations.
|
|
153
|
+
|
|
154
|
+
ForgeOS can import services written outside TypeScript through the Forge Protocol.
|
|
146
155
|
External runtimes publish a `forge.manifest.json` that describes commands, queries,
|
|
147
156
|
transport, policies, risk metadata, tenant scope, and schemas. Forge then emits
|
|
148
157
|
the same machine-readable app/API/agent artifacts and exposes runtime bridge
|
package/docs/agent-fabric.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Forge Agent Fabric
|
|
2
2
|
|
|
3
|
+
Existing repositories can attach optional [runtime observations](repository-runtime-observation.md)
|
|
4
|
+
to their maps. Worker preparation reads compatible saved evidence without executing
|
|
5
|
+
exporters; changes composed into a clone invalidate reuse. A runtime observation does
|
|
6
|
+
not satisfy verification gates or extend worker write scope.
|
|
7
|
+
|
|
3
8
|
Forge Agent Fabric is an experimental protocol-oriented execution layer for dynamically materialized agents and workflows. It extends Forge's existing compiler, outbox, actions, workflows, policy, and agent runtime rather than replacing them.
|
|
4
9
|
|
|
5
10
|
## Implementation status
|
|
@@ -58,6 +63,14 @@ through a mutable folder. The optional environment object accepts mode auto/none
|
|
|
58
63
|
ignoreScripts, timeoutMs (100..1800000) and an HTTPS registry without credentials, query
|
|
59
64
|
or fragment. Reviewers and commands are read-only after environment preparation.
|
|
60
65
|
|
|
66
|
+
Tracked assets larger than 16 MiB outside the task's editable and captured configuration
|
|
67
|
+
scope remain in Git clones as read-only inputs. Inventories record their SHA-256 by
|
|
68
|
+
streaming 256 KiB blocks, without embedding asset bytes in worker metadata. Fingerprints
|
|
69
|
+
include asset sizes; baseline and out-of-scope changes are still rejected. These assets
|
|
70
|
+
are bounded to 512 MiB each and 1 GiB in aggregate. Editable snapshots retain their
|
|
71
|
+
16 MiB per-file / 128 MiB aggregate limits, and changed artifacts retain the 8 MiB
|
|
72
|
+
per-file limit. Declaring a large asset as editable does not bypass those bounds.
|
|
73
|
+
|
|
61
74
|
Controls are run-steer/pause/resume/cancel/reconcile. Mutations require
|
|
62
75
|
`{runId,requestId,expectedVersion}` and complete `--file` bodies. Reuse requestId only for
|
|
63
76
|
the identical body; after a version conflict read status and choose a new requestId.
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# Forge em repositórios existentes: manifesto, mapas e Agent Fabric
|
|
2
|
+
|
|
3
|
+
Data: 2026-10-06
|
|
4
|
+
|
|
5
|
+
Status: proposta revisada por subagent independente; ajustes incorporados em 2026-10-06. Nenhum comando ou campo proposto neste documento implica suporte atual.
|
|
6
|
+
|
|
7
|
+
## 1. Objetivo
|
|
8
|
+
|
|
9
|
+
Permitir que Codex prepare um repositório existente para usar análise, mapas, consultas CAIR e contexto do Agent Fabric, preservando sua arquitetura, ferramentas e runtime. Vue/Nuxt, Java/Spring e Docker/Compose devem estar presentes no primeiro piloto integrado, além de TypeScript/JavaScript.
|
|
10
|
+
|
|
11
|
+
O usuário permanece no chat do Codex e pede, por exemplo: “Prepare este projeto para usar os mapas do Forge”. O agente descobre a estrutura, gera um `forge.manifest.json`, valida o documento e solicita análise. O Forge deriva mapas do código; o agente usa os mapas para localizar funcionalidades, planejar alterações e selecionar verificações.
|
|
12
|
+
|
|
13
|
+
Não é necessária migração para commands, queries, banco ou runtime Forge. Descobrir operações não as transforma em ferramentas executáveis. Esta entrega de planejamento não autoriza implementação, publicação ou instalação de integrações em outros projetos.
|
|
14
|
+
|
|
15
|
+
## 2. Evidência da implementação atual
|
|
16
|
+
|
|
17
|
+
Repositório analisado: `C:/Users/stahl/Projects/forge`, versão local `0.1.0-alpha.68`.
|
|
18
|
+
|
|
19
|
+
| Componente | Base existente | Lacuna |
|
|
20
|
+
| --- | --- | --- |
|
|
21
|
+
| Manifesto externo | Serviços, entries, schemas, HTTP/stdio e registro | Não representa análise de repositório sem serviço |
|
|
22
|
+
| Brownfield import | Inventário, rotas, chamadas, riscos e candidatos | Orientado a migração; análise predominantemente textual |
|
|
23
|
+
| Vue/Nuxt | Dependências e algumas páginas/componentes no frontend graph | Brownfield não coleta `.vue`; frontend graph assume `web` e bindings Forge |
|
|
24
|
+
| Java/Spring | Controllers por annotations e inventário Maven | Regex, sem resolução semântica; Gradle ausente no inventário examinado |
|
|
25
|
+
| App graph | Símbolos, módulos, referências, hashes e parsing incremental | Parser orientado a TypeScript/TSX; tipos parcialmente ligados ao runtime |
|
|
26
|
+
| Test graph | Descoberta/classificação de testes | Extensões e diretórios específicos de TypeScript |
|
|
27
|
+
| CAIR | Snapshot compacto, símbolos, referências e impacto | Leitura direta de artefatos do compilador Forge |
|
|
28
|
+
| Docker | Backend de sandbox | Não equivale a grafo estático de Dockerfile/Compose |
|
|
29
|
+
| Agent Fabric | Runtime compartilhado, registro de projetos, owners e clones | Falta integração explícita com os mapas propostos |
|
|
30
|
+
|
|
31
|
+
Fontes relativas ao checkout Forge:
|
|
32
|
+
|
|
33
|
+
- `src/forge/brownfield-import/index.ts` e `types.ts`.
|
|
34
|
+
- `src/forge/compiler/external-manifest/{types,validate,registry}.ts`.
|
|
35
|
+
- `schemas/forge-manifest.schema.json`.
|
|
36
|
+
- `src/forge/compiler/frontend-graph/build.ts`.
|
|
37
|
+
- `src/forge/compiler/app-graph/parser.ts` e `compiler/types/app-graph.ts`.
|
|
38
|
+
- `src/forge/compiler/test-graph/build.ts`.
|
|
39
|
+
- `src/forge/cair/snapshot.ts`.
|
|
40
|
+
- `docs/brownfield-import.md` e `docs/forge-protocol.md`.
|
|
41
|
+
|
|
42
|
+
Detalhe a corrigir: tipos/validador externo contemplam `commandArgs`, mas o JSON Schema examinado não declara o campo. Confirmar e alinhar schema, validadores, tipos, fixtures e documentação durante a implementação.
|
|
43
|
+
|
|
44
|
+
Limites adicionais confirmados na revisão: o importador atual ignora `tests` e `__tests__` e lê arquivos `.env` e `.env.local` para extrair nomes de variáveis. Isso não prova emissão dos valores, mas viola a política proposta de não abrir esses arquivos. Reutilizar classificadores úteis após introduzir scanner configurável; não reutilizar a coleta atual sem correção. CAIR consulta fonte atual diretamente em definições e usa busca textual em referências; seu snapshot não garante que a resposta consultada pertença à mesma versão.
|
|
45
|
+
|
|
46
|
+
## 3. Decisões de arquitetura
|
|
47
|
+
|
|
48
|
+
### 3.1 Um manifesto, modalidades distintas
|
|
49
|
+
|
|
50
|
+
Preservar o nome `forge.manifest.json`. Manter suporte ao protocolo de serviço 1.0. Introduzir uma modalidade discriminada de repositório, com schema próprio dentro do mesmo sistema de manifestos. A versão `2.0` abaixo é ilustrativa: decidir o versionamento final após verificar consumidores e política de compatibilidade.
|
|
51
|
+
|
|
52
|
+
Internamente, separar `ServiceManifest` e `RepositoryManifest`; nunca fazer um consumidor de serviços assumir `manifest.service.name` em um manifesto de repositório. Um projeto analisado pode referenciar contratos de serviços existentes por arquivos relativos, sem transformar seus candidatos em serviços automaticamente.
|
|
53
|
+
|
|
54
|
+
Introduzir loader discriminado antes do registry atual: descoberta automática de `forge.manifest.json` deve classificar o documento; registry/runtime externos recebem somente ServiceManifest. Um root RepositoryManifest não pode quebrar a geração de uma aplicação Forge nem tornar-se serviço inválido. Quando já existir um root ServiceManifest, discovery não o sobrescreve: oferecer documento composto versionado ou configuração externa/referências explícitas. Esta escolha integra a decisão de schema de E1.
|
|
55
|
+
|
|
56
|
+
Exemplo conceitual, ainda não aceito pela CLI atual:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"forgeProtocol": "2.0",
|
|
61
|
+
"kind": "repository",
|
|
62
|
+
"components": [
|
|
63
|
+
{ "id": "frontend", "root": "frontend", "adapters": ["vue", "typescript"] },
|
|
64
|
+
{ "id": "backend", "root": "backend", "adapters": ["java", "spring", "maven"] },
|
|
65
|
+
{ "id": "infra", "root": ".", "adapters": ["docker"], "files": ["compose.yaml", "backend/Dockerfile"] }
|
|
66
|
+
],
|
|
67
|
+
"exclude": ["**/node_modules/**", "**/target/**"],
|
|
68
|
+
"checks": [
|
|
69
|
+
{ "id": "frontend-tests", "component": "frontend", "argv": ["npm", "test"] }
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
O manifesto declara configuração, raízes, aliases/overrides necessários e verificações sugeridas. Não contém inventário manual de todas as funções. Contratos de APIs e integrações são opcionais. Validar IDs únicos, caminhos, limites e conflitos entre componentes sobrepostos.
|
|
75
|
+
|
|
76
|
+
Usar caminhos relativos ao repositório. A localização absoluta pertence ao registro host-local do Fabric. Se o usuário não desejar arquivo no projeto, permitir um manifesto externo explicitamente associado a uma raiz registrada; não inferir raízes externas a partir de texto arbitrário.
|
|
77
|
+
|
|
78
|
+
### 3.2 Descoberta determinística e complemento pelo Codex
|
|
79
|
+
|
|
80
|
+
1. Resolver a raiz desejada e ler instruções do projeto.
|
|
81
|
+
2. Descobrir manifests de pacotes, arquivos de build, componentes, frameworks e infraestrutura.
|
|
82
|
+
3. Entregar inventário e lacunas ao agente.
|
|
83
|
+
4. Codex prepara o manifesto e documenta decisões que a descoberta não resolve.
|
|
84
|
+
5. Forge valida e calcula o grafo.
|
|
85
|
+
6. Codex consulta o resultado e corrige configuração quando necessário.
|
|
86
|
+
|
|
87
|
+
Definir um único resolvedor de raiz para todas as novas operações: raiz explícita ou projectId primeiro; descoberta ascendente limitada a marcadores reconhecidos quando omitida. Não exigir package.json para Java/infra. A CLI atual usa cwd em diversos caminhos; não assumir descoberta universal. Para análise estática, permitir diretório sem Git; preservar exigência Git+HEAD do Fabric para clones gerenciados. Relatar separadamente análise disponível e execução gerenciada disponível.
|
|
88
|
+
|
|
89
|
+
Não aceitar root e projectId divergentes; se ambos forem fornecidos, exigir identidade canônica equivalente. Definir paragem de descoberta em worktrees/submódulos e diagnóstico para manifestos ancestrais ambíguos. Um manifesto externo não redefine a raiz para o diretório onde o arquivo está salvo.
|
|
90
|
+
|
|
91
|
+
Registrar proveniência de declarações do agente e overrides. Não dar a essas declarações a mesma classificação de relações observadas no código. A configuração muda com a estrutura; mapas mudam com o conteúdo.
|
|
92
|
+
|
|
93
|
+
### 3.3 Modelo comum de análise
|
|
94
|
+
|
|
95
|
+
Criar um grafo neutro de repositório, separado das exigências do runtime Forge. Reutilizar hashing, serialização determinística, diagnósticos e primitives compatíveis. Adaptadores produzem fatos; uma fase de resolução combina fatos e identifica ambiguidades.
|
|
96
|
+
|
|
97
|
+
Entidades: repository, component, package, file, symbol, page, UI component, endpoint, data model, test, container service, build stage, image, volume e network.
|
|
98
|
+
|
|
99
|
+
Relações: contains, imports, references, calls, renders, routes-to, implements, tests, builds, runs, depends-on e connects-to. Distinguir ligação declarada de configuração, referência resolvida e possibilidade inferida.
|
|
100
|
+
|
|
101
|
+
Cada fato inclui ID determinístico, localização, hash de fonte, adaptador/versão e referências de evidência. Definir estabilidade de IDs em edição e comportamento em renomeação. Uma mudança de ID não pode produzir referência silenciosa a uma entidade diferente.
|
|
102
|
+
|
|
103
|
+
Padronizar coordenadas de fonte: offsets UTF-16 e intervalos semiabertos para integração Node, com linha/coluna e conversão explícita dos offsets de parsers em bytes. Preservar CRLF e Unicode; source mapping de blocos Vue retorna sempre posições no SFC original. IDs abreviados CAIR, como S#1, são handles locais ao snapshot: chamadas dependentes exigem snapshotId e não podem reaplicar o handle em outra ordenação.
|
|
104
|
+
|
|
105
|
+
Usar categorias de evidência `declared`, `syntactic`, `resolved` e `inferred`, com resolução `complete`, `partial` ou `unresolved`. Não apresentar scores fixos como probabilidades calibradas.
|
|
106
|
+
|
|
107
|
+
### 3.4 Cobertura como resultado de primeira classe
|
|
108
|
+
|
|
109
|
+
Todo snapshot inclui arquivos encontrados, analisados, ignorados, com erro e sem adaptador; razões de exclusão; recursos não suportados; relações não resolvidas e diagnósticos. Mapas parciais continuam úteis, mas não podem ser apresentados como compreensão completa.
|
|
110
|
+
|
|
111
|
+
## 4. Adaptadores do primeiro piloto
|
|
112
|
+
|
|
113
|
+
### 4.1 TypeScript/JavaScript
|
|
114
|
+
|
|
115
|
+
Reaproveitar extração existente quando independente do runtime. Identificar módulos, exports, símbolos e imports. Resolução de aliases, workspaces e imports deve seguir configurações reais, sem exigir package.json na raiz de todos os projetos. Diferenciar parsing de resolução semântica; escolher ferramentas após um spike de compatibilidade e distribuição.
|
|
116
|
+
|
|
117
|
+
### 4.2 Vue/Nuxt
|
|
118
|
+
|
|
119
|
+
Analisar `.vue` com entendimento de template, script, script setup e style. Preservar posições no arquivo original ao trabalhar com blocos. Identificar imports, componentes usados, props, emits, composables, stores, Vue Router e convenções Nuxt. Tratar aliases e autoimports conforme configuração.
|
|
120
|
+
|
|
121
|
+
Relacionar páginas a componentes e clientes HTTP. Componentes dinâmicos, URLs construídas e autoimports não resolvidos permanecem explícitos no relatório. Não executar configuração arbitrária para apenas descobrir estrutura.
|
|
122
|
+
|
|
123
|
+
Descobrir testes Vitest/Jest e uso de Vue Test Utils quando presentes. Distinguir teste encontrado, associação estática ao componente e cobertura observada por execução; nenhuma associação por nome é prova de cobertura executada.
|
|
124
|
+
|
|
125
|
+
### 4.3 Java/Spring
|
|
126
|
+
|
|
127
|
+
Nível inicial: parser sintático para packages, classes, interfaces, métodos, imports e annotations; endpoints, DTOs e relações Spring quando observáveis. Inventário Maven/Gradle multimódulo. Leitura estática de arquivos Gradle tem limites por ser uma DSL executável; declarar esses limites.
|
|
128
|
+
|
|
129
|
+
Nível opcional: resolução semântica com ferramentas Java disponíveis, classpath e configuração explicitamente preparados. Não executar wrappers ou builds durante uma análise declarada estática. Reflection, Lombok, proxies e código gerado entram no relatório de cobertura. Chamada a interface não garante qual implementação recebe a chamada.
|
|
130
|
+
|
|
131
|
+
Descobrir testes JUnit/TestNG, source sets e fixtures declarados. Reportar ligação sintática/inferida a classes separadamente de cobertura observada e de resolução semântica.
|
|
132
|
+
|
|
133
|
+
### 4.4 Docker/Compose
|
|
134
|
+
|
|
135
|
+
Analisar Dockerfile: FROM/estágios, contextos, COPY, referências a variáveis, entrypoint e command como informação. Analisar Compose: serviços, build contexts, imagens, portas, volumes, redes, profiles, depends_on e referências a secrets/configs/env.
|
|
136
|
+
|
|
137
|
+
Cobrir arquivos adicionais e overrides por uma seleção explícita de cenário. Preservar interpolação não resolvida sem ler valores sensíveis automaticamente. Diferenciar porta interna de publicada e rede interna de endereço acessível pelo navegador. `depends_on` não prova tráfego nem disponibilidade.
|
|
138
|
+
|
|
139
|
+
O cenário também identifica profiles Spring e modos Vite/Nuxt reconhecidos estaticamente, ordem de overlays e arquivos Compose selecionados. Esse conjunto e seus hashes fazem parte do snapshot; ambientes diferentes não compartilham silenciosamente a mesma resolução. Valores desconhecidos permanecem desconhecidos.
|
|
140
|
+
|
|
141
|
+
Análise estática não inicia Docker, não constrói imagens e não faz pull. Inspeção observada de containers ou ferramentas externas seria operação separada e identificada.
|
|
142
|
+
|
|
143
|
+
## 5. Resolução entre tecnologias
|
|
144
|
+
|
|
145
|
+
Exemplo esperado:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
Pedidos.vue -> usePedidos -> cliente GET /api/pedidos
|
|
149
|
+
-> PedidoController -> PedidoService -> PedidoRepository
|
|
150
|
+
|
|
151
|
+
Compose api -> build backend/Dockerfile -> componente backend
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Relacionar por método HTTP, padrão de caminho, base URL, proxy, componente e cenário de configuração. Consumir OpenAPI local opcionalmente. Não usar apenas prefixos de URL: o detector atual pode gerar associação incorreta e deve ser substituído na fase integrada.
|
|
155
|
+
|
|
156
|
+
Ligações sugeridas pelo modelo podem enriquecer a análise como declarações rastreáveis; não substituem resolução. Quando dois serviços oferecem o mesmo caminho, manter ambiguidade até haver contexto suficiente.
|
|
157
|
+
|
|
158
|
+
## 6. Artefatos e consultas
|
|
159
|
+
|
|
160
|
+
Armazenar artefatos locais em uma área dedicada, proposta `.forge/repository/`, sem escrever em `src/forge/_generated`. Manifesto pode ser versionado; cache e estado operacional são locais. Definir formato canônico, escritas atômicas e publicação de um snapshot completo somente após validação.
|
|
161
|
+
|
|
162
|
+
Oferecer cache host-local explicitamente configurado quando não houver autorização ou interesse em escrever no repositório. Discovery/validate possuem modo sem escrita, inclusive sem telemetria local/recorder Delta; analyze declara seu destino de artefatos. A CLI atual pode registrar operações no Delta mesmo em comandos de leitura, com bypass existente `--no-delta`/`FORGE_DELTA=0`; a nova superfície precisa preservar o contrato sem escrita de ponta a ponta. Não editar `.gitignore` automaticamente.
|
|
163
|
+
|
|
164
|
+
Separar provider de análise `forge-application` de `repository` na integração CAIR. Preservar queries atuais onde os conceitos correspondem; recursos dependentes do runtime e mutações CAIR não suportadas devem retornar capacidade indisponível em vez de fingir suporte.
|
|
165
|
+
|
|
166
|
+
O provider deve cobrir snapshot, queries, resolução de referências, leitura de fontes e capabilities/actions. Alterar apenas snapshot não basta. Consultas precisam carregar snapshotId e detectar divergência com a fonte atual antes de devolver resultados. Não rotular a busca textual atual de Q REFS como referência semanticamente resolvida. No primeiro release repository, ações CAIR mutantes ficam indisponíveis; ações de leitura continuam disponíveis conforme cobertura.
|
|
167
|
+
|
|
168
|
+
Consultas prioritárias: overview, locate, symbol, references, routes, dependencies, impact, tests, infrastructure e coverage. Respostas compactas, orçamento de contexto, paginação/cursor e referências ao código. Não despejar o grafo inteiro em todo prompt.
|
|
169
|
+
|
|
170
|
+
Critérios de consulta incluem duas funções homônimas sem mistura, ausência de comentários/strings como referências resolvidas e rejeição de handle/snapshot obsoleto. Fonte posterior à análise não pode ser recortada usando offsets antigos.
|
|
171
|
+
|
|
172
|
+
Comandos ilustrativos, não existentes nesta proposta:
|
|
173
|
+
|
|
174
|
+
```text
|
|
175
|
+
forge manifest discover --json
|
|
176
|
+
forge manifest validate forge.manifest.json --json
|
|
177
|
+
forge repository analyze --json
|
|
178
|
+
forge repository context --query "autenticação" --json
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
A sintaxe final deve respeitar a CLI atual e evitar superfícies duplicadas com `import analyze` e CAIR. Definir depreciação ou aliases somente depois de verificar consumidores.
|
|
182
|
+
|
|
183
|
+
## 7. Integração Agent Fabric e skill
|
|
184
|
+
|
|
185
|
+
Skill conduz descoberta, geração e consultas; não exige que o usuário escreva JSON. Runtime e skill continuam compartilhados. Registro por projeto e seleção explícita de projectId mantêm isolamento CLI/MCP.
|
|
186
|
+
|
|
187
|
+
Ao planejar um workflow, Fabric obtém contexto limitado à tarefa: snapshot, arquivos, relações, checks sugeridos e lacunas. Cada worker recebe contexto do seu próprio clone/snapshot; após composição de alterações upstream, renovar análise relevante. Não reutilizar o grafo do checkout original como se descrevesse um clone modificado.
|
|
188
|
+
|
|
189
|
+
Maps ajudam a sugerir writeScope, dependências e revisão, mas não alteram silenciosamente obrigações de aceitação. Impacto estimado não autoriza pular verificações requeridas. Checks declarados não executam durante descoberta; execução é uma atividade do workflow com argv explícito e escopo autorizado.
|
|
190
|
+
|
|
191
|
+
Hooks são opcionais para atualização; não necessários à análise. Não instalar hooks/MCP como efeito colateral. MCP pode expor queries de análise roteadas pelo registro existente.
|
|
192
|
+
|
|
193
|
+
## 8. Incrementalidade, consistência e múltiplos repositórios
|
|
194
|
+
|
|
195
|
+
Snapshot considera conteúdo local, incluindo mudanças não commitadas, manifesto, configs e versões dos adaptadores. Commit Git é metadado, não chave suficiente de validade.
|
|
196
|
+
|
|
197
|
+
Reusar parsing por hash de arquivo. Invalidar resolução quando configuração, aliases, manifests de dependências ou contratos mudam. Detectar mudanças durante leitura; repetir o trecho necessário ou marcar snapshot inconsistente. Publicar artefatos atomicamente e serializar concorrência no cache, sem reutilizar locks de execução indiscriminadamente.
|
|
198
|
+
|
|
199
|
+
Cada repositório tem identidade e snapshot próprios. Multi-repo usa referências explícitas a projetos registrados e contratos locais. Resposta identifica origem/versão de cada mapa; não afirma snapshot global atômico entre repositórios. Mudança em outro checkout não é sincronizada automaticamente.
|
|
200
|
+
|
|
201
|
+
## 9. Limites de leitura e execução
|
|
202
|
+
|
|
203
|
+
Respeitar raízes canônicas, exclusões explícitas e tratamento de symlinks. Não seguir referências para fora do escopo sem configuração autorizada. Limites de quantidade/tamanho/tempo aparecem nos diagnósticos, nunca como truncamento invisível.
|
|
204
|
+
|
|
205
|
+
Não coletar valores de credenciais, `.env` reais, secrets ou payloads operacionais. Nomes/referências de variáveis podem ser mapeados. Sanitizar fragmentos de Docker/config quando contiverem valores sensíveis; não incluir fonte completa por padrão nos pacotes de contexto.
|
|
206
|
+
|
|
207
|
+
Análise estática não executa package scripts, Gradle, Maven, arquivos de configuração JS, comandos de Docker ou adaptadores arbitrários. Adaptadores iniciais são embutidos/versionados. Provedores semânticos que exigem preparação são operações separadas, explícitas e com proveniência. A coleta de fontes precisa incluir testes conforme configuração e separar exclusões de credenciais da simples classificação de arquivos; não pode herdar cegamente o scanner brownfield atual.
|
|
208
|
+
|
|
209
|
+
## 10. Entregas e critérios de aceite
|
|
210
|
+
|
|
211
|
+
| Etapa | Entrega | Critério |
|
|
212
|
+
| --- | --- | --- |
|
|
213
|
+
| E1 | Schema discriminado, compatibilidade, root resolver e scanner configurável | Manifestos 1.0 continuam válidos; repo sem serviço/package.json validável; testes incluídos; arquivos sensíveis não abertos; caminhos e IDs verificados |
|
|
214
|
+
| E2 | Grafo neutro, snapshot coerente e adaptadores iniciais | Vue + Spring + Compose presentes; hashes/cenário/IDs determinísticos; escrita atômica e mudança durante análise detectada; fixtures com fatos esperados e casos negativos |
|
|
215
|
+
| E3 | CAIR/provider completo e contexto | Consultas compactas funcionam sem runtime Forge; leituras ligadas a snapshot; referências textuais diferenciadas; ações não suportadas indisponíveis |
|
|
216
|
+
| E4 | Skill/Fabric | Contexto correto para checkout e clones; roteamento por projeto; zero execução implícita |
|
|
217
|
+
| E5 | Otimização incremental e evolução semântica | Melhorar reutilização e resolução sobre a consistência mínima já entregue; cobertura, orçamento e custo observáveis |
|
|
218
|
+
|
|
219
|
+
O primeiro piloto integrado deve usar Vue + Java/Spring + Compose, incluindo frontend/backend em diretórios independentes. Fixture hermética evita depender de produção; piloto em repositório real só com escopo escolhido e autorizado.
|
|
220
|
+
|
|
221
|
+
Validação necessária:
|
|
222
|
+
|
|
223
|
+
- Manifests antigos e novos; schema/tipos/validador concordantes.
|
|
224
|
+
- Vue script setup, aliases, autoimports e componentes dinâmicos.
|
|
225
|
+
- CLI em subdiretório, Java sem package.json, diretório sem Git analisável e execução Fabric corretamente indisponível sem Git+HEAD.
|
|
226
|
+
- Scanner inclui testes declarados sem abrir `.env` reais; manifesto existente não é sobrescrito durante discovery.
|
|
227
|
+
- Maven multimódulo, Gradle com lacunas explícitas e Java semântico indisponível.
|
|
228
|
+
- Mesmo endpoint com métodos distintos, parâmetros, proxies e serviços ambíguos.
|
|
229
|
+
- Docker multistage, Compose overrides/profiles, ports, networks e interpolação.
|
|
230
|
+
- Relações frontend/backend/infra confrontadas com ground truth revisado.
|
|
231
|
+
- Arquivos excluídos, symlinks, configurações sensíveis e limites.
|
|
232
|
+
- Mudança não commitada, delete/rename, concurrent update e cache invalidation.
|
|
233
|
+
- Q DEF/Q REFS após mudança de fonte: não devolver evidência de snapshot antigo como se atual; resultados textuais não recebem assurance semântica.
|
|
234
|
+
- Homônimos, comentários/strings, handles CAIR de snapshots distintos, Unicode/CRLF e source mapping Vue.
|
|
235
|
+
- Testes Vue e Java encontrados sem afirmar cobertura executada.
|
|
236
|
+
- Cenários diferentes não reutilizam relações incompatíveis; discovery/validate sem escrita não criam Delta/cache nem alteram `.gitignore`.
|
|
237
|
+
- Root RepositoryManifest não quebra registry/runtime de serviços; root ServiceManifest existente é preservado.
|
|
238
|
+
- Independência do framework: nenhum arquivo/dependência runtime Forge exigido no projeto.
|
|
239
|
+
- Fabric clones: contexto pré/pós upstream e publicação não usam evidência obsoleta.
|
|
240
|
+
- Multi-repo: isolamento, IDs, raízes e snapshots distintos.
|
|
241
|
+
|
|
242
|
+
Medir precisão das relações resolvidas, cobertura das relações conhecidas, proporção de ambiguidades, custo da primeira análise, custo incremental e tamanho dos pacotes de contexto. Não fixar metas numéricas antes de estabelecer baseline reproduzível; definir metas antes do aceite do piloto.
|
|
243
|
+
|
|
244
|
+
## 11. Riscos e decisões pendentes
|
|
245
|
+
|
|
246
|
+
- Extensão de manifestos deve evitar regressão na descoberta automática do root manifesto e nos consumers que assumem serviço.
|
|
247
|
+
- Escolha de parsers/semantic providers exige spike de qualidade, Windows/Node, distribuição npm e licenças; não adicionar toolchain pesada ao caminho básico sem justificativa.
|
|
248
|
+
- Vue/Nuxt e Java/Spring possuem recursos dinâmicos que impedirão completude estática.
|
|
249
|
+
- Monorepos e configurações alternativas exigem descoberta por componente e seleção explícita de cenário.
|
|
250
|
+
- Artefatos podem expor informação sensível se emitirem snippets sem sanitização.
|
|
251
|
+
- Relação com `.forge/fabric.json`: esse arquivo continua configuração de execução; manifesto declara análise e sugestões. Definir precedência para checks sugeridos e evitar duplicar environment/maxConcurrency.
|
|
252
|
+
- API de grafo e versão de manifestos devem ser escolhidas antes de ampliar consumidores.
|
|
253
|
+
- Mapas de conhecimento não habilitam operações executáveis; adaptadores externos atuais preservam seu contrato separado.
|
|
254
|
+
|
|
255
|
+
## 12. Resultado esperado
|
|
256
|
+
|
|
257
|
+
Codex gera e mantém a configuração; Forge calcula mapas verificáveis e informa lacunas; CAIR fornece navegação compacta; Agent Fabric usa contexto atualizado para trabalhar. Vue, Java e Docker fazem parte da cobertura inicial, sem migração do projeto para o framework.
|
|
258
|
+
|
|
259
|
+
## 13. Revisão independente
|
|
260
|
+
|
|
261
|
+
Concluída pelo subagent `review_repository_manifest_plan` em 2026-10-06, por leitura do código atual, sem testes/builds/containers/CI. Parecer: arquitetura adequada com oito ajustes recomendados, incorporados neste documento:
|
|
262
|
+
|
|
263
|
+
1. Provider CAIR completo, fonte vinculada a hash e referências com assurance correta.
|
|
264
|
+
2. Resolvedor de raiz e distinção análise sem Git versus execução Fabric Git+HEAD.
|
|
265
|
+
3. Scanner configurável incluindo testes, sem abertura de `.env` reais.
|
|
266
|
+
4. Loader discriminado e coexistência de manifestos sem regressão de serviços.
|
|
267
|
+
5. Consistência mínima em E2/E3 antes do Fabric; otimização incremental em E5.
|
|
268
|
+
6. Descoberta de testes Vue/Java e convenção de coordenadas/handles.
|
|
269
|
+
7. Modo sem escrita incluindo recorder Delta e opção de cache host-local.
|
|
270
|
+
8. Cenário de configuração como parte da identidade do snapshot.
|
|
271
|
+
|
|
272
|
+
Evidências detalhadas e relatório em `FORGE_REPOSITORY_MANIFEST_REVIEW.md`, no mesmo diretório. A revisão é documental e não constitui validação da implementação futura. Versionamento definitivo, escolha de parsers e metas de desempenho permanecem decisões explicitamente pendentes.
|
package/docs/changelog.md
CHANGED
|
@@ -4,6 +4,38 @@ Release history for the `forgeos` npm package.
|
|
|
4
4
|
|
|
5
5
|
The canonical source file in the repository is `CHANGELOG.md`.
|
|
6
6
|
|
|
7
|
+
## Unreleased
|
|
8
|
+
|
|
9
|
+
- Explicit repository runtime plans, isolated-copy command execution and bounded Nuxt,
|
|
10
|
+
Spring, Docker and HTTP artifact context, with current-source/manifest/scenario binding
|
|
11
|
+
and expiration. CLI and MCP share execution opt-in; prepared Fabric workers consume
|
|
12
|
+
matching saved observations without starting exporters.
|
|
13
|
+
|
|
14
|
+
- Lazy large-map hydration, compatible streaming fingerprints, automatic retained
|
|
15
|
+
cache cleanup and source-bound paired agent benchmark planning/reporting. The
|
|
16
|
+
benchmark evaluates supplied evidence without implicit model/check execution.
|
|
17
|
+
|
|
18
|
+
- Deterministic scoped repository retrieval, precise case-level test associations,
|
|
19
|
+
static Nuxt/HTTP resolution, declared client mappings and informative check requirements.
|
|
20
|
+
- Validated partitions for large maps and root-neutral facts, prepared-clone parse
|
|
21
|
+
reuse and the read-only `repository quality --cases` benchmark. Static quality remains
|
|
22
|
+
partial; suggested checks and models are not executed by analysis.
|
|
23
|
+
|
|
24
|
+
## 0.1.0-alpha.69
|
|
25
|
+
|
|
26
|
+
- Repository manifests and static maps for existing TypeScript/JavaScript, Vue/Nuxt,
|
|
27
|
+
Java/Spring/Maven/Gradle and Docker/Compose projects without adopting the Forge runtime.
|
|
28
|
+
- Snapshot-bound CAIR queries, incremental parsing, bounded project-routed MCP context
|
|
29
|
+
and validated cache identity/source provenance.
|
|
30
|
+
- Agent Fabric workers receive the map of their own prepared clone; the shared personal
|
|
31
|
+
skill also supports analysis in projects without Git.
|
|
32
|
+
- Static local TypeScript configuration inheritance, Vue conditional branches and
|
|
33
|
+
multiline Dockerfile instructions; ambiguous and dynamic behavior remains explicit.
|
|
34
|
+
- Local release staging preserves npm exclusions; the installed-package smoke checks
|
|
35
|
+
external Vue + Spring + Compose maps in addition to the application quickstart.
|
|
36
|
+
- Patched transitive dependency resolutions for provider utilities, PostCSS, Nano ID
|
|
37
|
+
and URI parsing remove the advisories reported by the checked-in lockfile audit.
|
|
38
|
+
|
|
7
39
|
## 0.1.0-alpha.63
|
|
8
40
|
|
|
9
41
|
- `forge status` now verifies generated output deterministically instead of
|