forgeos 0.1.0-alpha.67 → 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 +157 -0
- package/.agents/skills/forge-agent-fabric/references/managed-workflows.md +95 -0
- package/.agents/skills/forge-agent-fabric/references/repository-analysis.md +102 -0
- package/.agents/skills/forge-agent-fabric/scripts/fabric.mjs +46 -0
- package/.agents/skills/forge-agent-fabric/scripts/repository.mjs +44 -0
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +22 -0
- package/README.md +12 -3
- package/docs/agent-fabric.md +22 -1
- package/docs/architecture/agent-fabric/PORTABLE_PROJECTS_PLAN.md +136 -0
- package/docs/architecture/agent-fabric/README.md +153 -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 +18 -2
- package/schemas/forge-manifest.schema.json +385 -53
- package/scripts/install-agent-fabric-skill.mjs +105 -0
- package/src/forge/_generated/releaseManifest.json +1 -1
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/agent-fabric/local-task-server.ts +39 -11
- 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 +33 -3
- package/src/forge/agent-fabric/managed-workspace.ts +56 -18
- package/src/forge/agent-fabric/project-profile.ts +50 -0
- package/src/forge/agent-fabric/project-registry.ts +120 -0
- package/src/forge/agent-fabric/project-runtime.ts +85 -0
- package/src/forge/agent-fabric/repository-context.ts +83 -0
- package/src/forge/agent-memory/mcp.ts +95 -12
- 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/fabric.ts +42 -8
- package/src/forge/cli/main.ts +279 -259
- package/src/forge/cli/parse.ts +3636 -3574
- 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
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Agent Fabric across repositories
|
|
2
|
+
|
|
3
|
+
## Outcome and boundaries
|
|
4
|
+
|
|
5
|
+
The existing Codex App conversation remains the interface. One personal skill teaches
|
|
6
|
+
Codex to prepare, execute, observe and resume Fabric workflows in the current project.
|
|
7
|
+
The Forge runtime is shared; each Git repository has its own owner, state and isolated
|
|
8
|
+
worker clones. Projects do not need a Forge application manifest or a Forge dependency.
|
|
9
|
+
Windows and WSL copies are separate projects; this integration never migrates or syncs them.
|
|
10
|
+
Owner startup does not start a model. Managed Codex workers use the host's configured
|
|
11
|
+
Codex authentication and can consume its allowance. Local publication applies validated
|
|
12
|
+
files; commit, push, npm release and deployments remain separately scoped actions.
|
|
13
|
+
|
|
14
|
+
## 1. Portable skill and distribution
|
|
15
|
+
|
|
16
|
+
Maintain the skill at `.agents/skills/forge-agent-fabric`, include it and its installer
|
|
17
|
+
in the npm package, and make its protocol reference self-contained. Install once with
|
|
18
|
+
`forge fabric install-skill --json` from any directory; add `--dry-run` to preview.
|
|
19
|
+
The underlying `node scripts/install-agent-fabric-skill.mjs` also supports custom
|
|
20
|
+
destination/runtime and explicit replacement; default destination is
|
|
21
|
+
`~/.agents/skills/forge-agent-fabric`. Installed `runtime.json` stores the absolute
|
|
22
|
+
Node executable and Forge CLI path. The helper resolves the target Git root and invokes
|
|
23
|
+
the runtime with that root as cwd, without shell interpolation. An environment override
|
|
24
|
+
and installed CLI fallback support different hosts. Runtime updates require reinstalling
|
|
25
|
+
the skill to update the selected path/version; no implicit remote downloads occur.
|
|
26
|
+
|
|
27
|
+
The installer stages changes, preserves unknown existing skills unless explicitly replaced,
|
|
28
|
+
backs up replacements outside skill discovery, and reports unchanged installations.
|
|
29
|
+
Installing a skill neither registers all local repositories nor installs hooks.
|
|
30
|
+
|
|
31
|
+
## 2. Project identity and registration
|
|
32
|
+
|
|
33
|
+
`fabric project-register [--project-id <id>] --json` resolves the current directory to
|
|
34
|
+
the canonical Git toplevel and verifies HEAD. Default ids combine a readable directory
|
|
35
|
+
name with a root digest, so equal names in different directories do not collide.
|
|
36
|
+
`fabric project-list --json` reads the personal registry at
|
|
37
|
+
`~/.forge/agent-fabric/projects.json`. Registration uses a bounded exclusive lock and
|
|
38
|
+
atomic file replacement. Conflicting ids/roots and malformed or symlinked registry
|
|
39
|
+
files are rejected. A registered path is resolved again before dispatch; moved/replaced
|
|
40
|
+
roots cannot silently redirect an existing project id. Non-Git/empty repositories need
|
|
41
|
+
initialization and an initial commit before managed cloning can run.
|
|
42
|
+
|
|
43
|
+
The registry is host-local. No project credentials, owner bearer tokens or source contents
|
|
44
|
+
are stored there. Registration is explicit and does not discover every directory on disk.
|
|
45
|
+
|
|
46
|
+
## 3. Owner lifecycle and diagnostics
|
|
47
|
+
|
|
48
|
+
`fabric doctor --json` resolves the Git root, reads optional settings, checks SDK availability,
|
|
49
|
+
attempts a bounded `codex login status`, and authenticates any existing owner. It neither
|
|
50
|
+
starts workers nor creates an owner. An unverified login is reported rather than inferred.
|
|
51
|
+
`fabric ensure-owner --json` reuses an authenticated owner or starts `fabric serve` hidden
|
|
52
|
+
and detached with cwd set to this root. Logs and endpoint metadata stay under
|
|
53
|
+
`.forge/local/agent-fabric/`. Startup uses a per-project exclusive lock and bounded wait.
|
|
54
|
+
Only its own newly spawned process may be stopped if startup times out; unknown live
|
|
55
|
+
processes are not killed. An unreachable live endpoint requires diagnosis instead of
|
|
56
|
+
starting another database owner. Startup locks surviving a crash are recovered only
|
|
57
|
+
after their recorded process demonstrably exits, with serialized recovery and a byte
|
|
58
|
+
readback. Live, malformed or unverified locks require inspection; they are never erased
|
|
59
|
+
solely because a timer elapsed.
|
|
60
|
+
If a process dies during recovery itself, its `.recovery` guard can require manual
|
|
61
|
+
inspection after confirming that guard's process exited; diagnostics name both files.
|
|
62
|
+
|
|
63
|
+
Authenticated health checks expose root and pid, never the endpoint token. Existing owners
|
|
64
|
+
from the previous release are recognized through a read-only managed status probe.
|
|
65
|
+
The owner remains an ordinary local process: restarting the machine requires starting it
|
|
66
|
+
again; no OS service or periodic wakeup is installed.
|
|
67
|
+
|
|
68
|
+
## 4. Optional project profile
|
|
69
|
+
|
|
70
|
+
`.forge/fabric.json` is a small declarative file, not a Forge app configuration:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"schemaVersion": 1,
|
|
75
|
+
"maxConcurrency": 2,
|
|
76
|
+
"environment": { "mode": "auto", "ignoreScripts": true, "timeoutMs": 120000 },
|
|
77
|
+
"verificationCommands": [["node", "--test"]]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The shared managed request transport merges environment/concurrency defaults into
|
|
82
|
+
`run-start`; explicit request values win. The profile does not change existing runs or
|
|
83
|
+
silently append verification nodes. The skill reads suggested argv arrays and selects
|
|
84
|
+
checks appropriate to the actual task. This avoids disguising executable project scripts
|
|
85
|
+
as configuration reads. Unknown fields, excessive files, symlinks and invalid values
|
|
86
|
+
are rejected. Node dependency preparation continues to use lockfiles and isolated copies;
|
|
87
|
+
other stacks need explicit workflow commands and available host tooling. No universal
|
|
88
|
+
Python/Go/Java provisioning is implied. Credentials and .env files are not copied merely
|
|
89
|
+
because a profile exists.
|
|
90
|
+
|
|
91
|
+
## 5. One MCP, multiple projects
|
|
92
|
+
|
|
93
|
+
Keep the shared runtime's `mcp serve` entrypoint. Add `fabric_project_register`,
|
|
94
|
+
`fabric_project_list`, `fabric_project_doctor`, and `fabric_owner_start`. Fabric tools
|
|
95
|
+
accept an optional top-level `projectId`. The router resolves registered ids, removes
|
|
96
|
+
the routing field before backend validation, then forwards to that root's owner.
|
|
97
|
+
Explicitly routed responses include `projectContext: { id, root }` for readback.
|
|
98
|
+
Calls without projectId retain the existing default workspace for compatibility.
|
|
99
|
+
Hooks and non-Fabric agent-memory tools remain bound to the configured default workspace.
|
|
100
|
+
Run calls cannot supply an arbitrary root. The skill must use explicit projectId outside
|
|
101
|
+
the default workspace, or use CLI with the current Git root as cwd.
|
|
102
|
+
|
|
103
|
+
MCP configuration remains one shared runtime entry. Restart/reconnect the Codex tool
|
|
104
|
+
session to discover a changed tool catalog; use the skill's CLI helper immediately while
|
|
105
|
+
the current conversation still has its old catalog. Do not claim tools are loaded until
|
|
106
|
+
they appear. Do not change unrelated MCP entries or weaken authentication to add routing.
|
|
107
|
+
|
|
108
|
+
## 6. Native chat flow
|
|
109
|
+
|
|
110
|
+
1. User requests Agent Fabric work in a project; Codex reads its AGENTS.md and task scope.
|
|
111
|
+
2. Skill helper resolves the root and runs capabilities/doctor.
|
|
112
|
+
3. Register only this project when MCP routing is needed, then ensure its owner.
|
|
113
|
+
4. Build a managed DAG with explicit scopes, implementers, independent reviewer and checks.
|
|
114
|
+
5. Dispatch through the CLI or loaded MCP tools, using bounded waits and durable cursors.
|
|
115
|
+
6. Replan from observed results while preserving required review/verification obligations.
|
|
116
|
+
7. Reconcile uncertain attempts after interruption; do not repeat effects blindly.
|
|
117
|
+
8. Read final project/run identity and evidence, then report actual results in the same chat.
|
|
118
|
+
|
|
119
|
+
SDK worker threads are separate executions; they are not newly created Codex App sidebar
|
|
120
|
+
conversations. This workflow does not require the user to operate a separate dashboard.
|
|
121
|
+
|
|
122
|
+
## 7. Validation and delivery
|
|
123
|
+
|
|
124
|
+
Validate registry contention, duplicate names/ids, nested cwd resolution, unknown/moved
|
|
125
|
+
roots, profile defaults and explicit overrides, owner authentication/start/reuse, MCP
|
|
126
|
+
routing into a second real Git repository, and hook isolation. Exercise the skill installer
|
|
127
|
+
against a temporary personal directory and its helper against the real runtime. Run an
|
|
128
|
+
observed command workflow in an external fixture without dispatching paid Codex models.
|
|
129
|
+
Run generation/check, targeted Fabric tests, typecheck/lint and the framework verifier.
|
|
130
|
+
Install the personal skill only after these checks; register Forge explicitly for current
|
|
131
|
+
MCP routing. Preserve existing auth, other skills, MCP configuration and unrelated files.
|
|
132
|
+
|
|
133
|
+
An external command pilot proves routing, cloning, execution and state readback. It does
|
|
134
|
+
not itself prove a new paid SDK implementation/review round, production deployment or
|
|
135
|
+
human acceptance. Package inclusion is checked separately from npm publication; this
|
|
136
|
+
implementation task does not require publishing a new release.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Forge Agent Fabric — Architecture Governance
|
|
2
|
+
|
|
3
|
+
This directory is the governance record for the Forge Agent Fabric architecture baseline.
|
|
4
|
+
It is deliberately separate from `docs/agent-fabric.md`, which describes the executable
|
|
5
|
+
P0a implementation surface.
|
|
6
|
+
|
|
7
|
+
## Governance package
|
|
8
|
+
|
|
9
|
+
| Record | Purpose |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| [`S1.0B1_DECISION_FREEZE.md`](./S1.0B1_DECISION_FREEZE.md) | Freezes the architecture decisions, vocabulary, invariants, boundaries, and deferred scope that later slices must preserve or explicitly supersede. |
|
|
12
|
+
| [`S1.0B2_EVIDENCE_FREEZE.md`](./S1.0B2_EVIDENCE_FREEZE.md) | Freezes the evidence proving the accepted P0a baseline and maps evidence to the frozen decisions/invariants. |
|
|
13
|
+
| [`P0A_ACCEPTANCE_RECORD.md`](./P0A_ACCEPTANCE_RECORD.md) | Records exactly what was accepted when P0a was merged, what was not accepted, and the applicability/supersession rules. |
|
|
14
|
+
| [`S1.1_SCOPE_AND_GATE.md`](./S1.1_SCOPE_AND_GATE.md), [`S1.1_CONFORMANCE_PLAN.md`](./S1.1_CONFORMANCE_PLAN.md) | Adopted planning inputs for the normative kernel; historical planning assessments remain intact. |
|
|
15
|
+
| [`S1.1_NORMATIVE_KERNEL.md`](./S1.1_NORMATIVE_KERNEL.md), [`S1.1_CONFORMANCE_MATRIX.md`](./S1.1_CONFORMANCE_MATRIX.md) | Adopted operation rules, invariant traceability, conformance obligations and clarification register. |
|
|
16
|
+
| [`S1.1_ADOPTION_RECORD.md`](./S1.1_ADOPTION_RECORD.md) | Records the exact reviewed head, evidence and merge that adopted S1.1; explains retained candidate wording in historical artifacts. |
|
|
17
|
+
| [`S1.2_SCOPE_AND_GATE.md`](./S1.2_SCOPE_AND_GATE.md), [`S1.2_DESIGN_PLAN.md`](./S1.2_DESIGN_PLAN.md) | Adopted scope and delivery plan for the reference implementation design. |
|
|
18
|
+
| [`S1.2_REFERENCE_IMPLEMENTATION_DESIGN.md`](./S1.2_REFERENCE_IMPLEMENTATION_DESIGN.md), [`S1.2_IMPLEMENTATION_TRACEABILITY.md`](./S1.2_IMPLEMENTATION_TRACEABILITY.md), [`S1.2_DESIGN_DECISIONS.md`](./S1.2_DESIGN_DECISIONS.md) | Adopted reference implementation design; 24 operation mappings, 35 invariant mappings, 16 event-family mappings and preserved S12-F01/F02 history. |
|
|
19
|
+
| [`S1.2_ADOPTION_RECORD.md`](./S1.2_ADOPTION_RECORD.md) | Records the exact reviewed head, checks, repair-aware evidence and merge that completed S12-D12 and adopted S1.2. |
|
|
20
|
+
| [`S1.3_SCOPE_AND_GATE.md`](./S1.3_SCOPE_AND_GATE.md), [`S1.3_CONFORMANCE_PLAN.md`](./S1.3_CONFORMANCE_PLAN.md) | Adopted S1.3 Proof & Conformance planning package; S13-P08 complete. It authorized only the limited S1.3-A evidence/reproduction stage, not new tooling or P0b. |
|
|
21
|
+
| [`S1.3_EVIDENCE_CATALOG.md`](./S1.3_EVIDENCE_CATALOG.md), [`S1.3_CONFORMANCE_MATRIX.md`](./S1.3_CONFORMANCE_MATRIX.md), [`S1.3_REPRODUCTION_PROTOCOL.md`](./S1.3_REPRODUCTION_PROTOCOL.md), [`S1.3_GAP_AND_TOOLING_REGISTER.md`](./S1.3_GAP_AND_TOOLING_REGISTER.md) | Adopted S1.3-A Evidence Registry & Reproduction Baseline: stable evidence/gap IDs, 24 OP / 35 I / 16 event cross-index, reproduction rules and tooling-need decisions; historical candidate wording is preserved inside the reviewed artifacts. |
|
|
22
|
+
| [`S1.3_A_ADOPTION_RECORD.md`](./S1.3_A_ADOPTION_RECORD.md) | Records the exact reviewed head, exact-SHA gates, preserved FAIL/INCONCLUSIVE observations and merge that completed S13-A12 and adopted S1.3-A. |
|
|
23
|
+
| [`S1.3_FINAL_CLOSURE_RECORD.md`](./S1.3_FINAL_CLOSURE_RECORD.md) | Adopted final S1.3 closure supplement. It binds post-S1.3-A evidence/repairs while preserving historical GAP-002/GAP-008 limitations and establishes the boundary to P0b. |
|
|
24
|
+
| [`P0B_SCOPE_AND_GATE.md`](./P0B_SCOPE_AND_GATE.md) | Adopted planning scope for the first bounded nondeterministic P0b vertical. Historical proposal wording in that record remains as authored. |
|
|
25
|
+
| [`P0B_A_MODEL_ADAPTER.md`](./P0B_A_MODEL_ADAPTER.md), [`P0B_A_ADOPTION_RECORD.md`](./P0B_A_ADOPTION_RECORD.md) | P0b-A implementation description and exact reviewed-head adoption evidence, including the authorized keyless local Ollama smoke. |
|
|
26
|
+
| [`CODING_AGENT_DELIVERY_PLAN.md`](./CODING_AGENT_DELIVERY_PLAN.md) | Proposed ordered local-first delivery plan for MCP clients and a keyless coding worker; it does not adopt a new runtime capability. |
|
|
27
|
+
| [`P0B_B_LOCAL_CODING_SCOPE.md`](./P0B_B_LOCAL_CODING_SCOPE.md) | Candidate scope and gates for a trusted-repository, single-owner MCP and local Ollama coding pilot; no runtime adoption claim. |
|
|
28
|
+
|
|
29
|
+
## Baseline coordinates
|
|
30
|
+
|
|
31
|
+
- Repository: `Stahldavid/forge`
|
|
32
|
+
- Accepted implementation head: `bfd2639579e650d4ad38ec1a81dbd55a5d68865e`
|
|
33
|
+
- Merge commit on `main`: `8972496f09727456b8b9f3ceafc386beab5f39d0`
|
|
34
|
+
- PR: `#9 — feat: add Forge Agent Fabric P0a protocol kernel`
|
|
35
|
+
- PR merged: `2026-09-08T09:26:36Z`
|
|
36
|
+
- Pre-P0a base: `6f54ee728761bf91ff65465d798286d6f47fbe67`
|
|
37
|
+
|
|
38
|
+
The merge commit has the reviewed P0a head as its second parent. This means the accepted
|
|
39
|
+
implementation tree is traceable directly from `main` without relying on an external
|
|
40
|
+
branch remaining available.
|
|
41
|
+
|
|
42
|
+
## Status model
|
|
43
|
+
|
|
44
|
+
| Record / stage | Adoption event | State |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| P0a executable acceptance | [PR #9](https://github.com/Stahldavid/forge/pull/9), `8972496f09727456b8b9f3ceafc386beab5f39d0` | Accepted |
|
|
47
|
+
| S1.0B1/B2 and P0a acceptance record | [PR #11](https://github.com/Stahldavid/forge/pull/11), `7a99ec5ceb2bdd51c83790fd84b23e534be52806` | Adopted |
|
|
48
|
+
| S1.1 scope and conformance plan | [PR #12](https://github.com/Stahldavid/forge/pull/12), `3a0ce40ffe31555709d213bf06d674c62f28ad32` | Adopted planning input |
|
|
49
|
+
| S1.1 kernel and conformance matrix | [PR #13](https://github.com/Stahldavid/forge/pull/13), `4b796f49c480d782ec7e069f8eb5f7eae841876a` | Adopted; G-14 complete |
|
|
50
|
+
| S1.2 scope and gate | [PR #14](https://github.com/Stahldavid/forge/pull/14), `d1e6a1bb605527f242b7a6fb6fa05d6ff3561f92` | Adopted planning input; S12-P06 complete |
|
|
51
|
+
| S12-F01 compatible resource-rejection repair | [PR #15](https://github.com/Stahldavid/forge/pull/15), `d9275f4773c1082a993ffaf7b6a58d15eb139246` | Adopted separately; reviewed head `16157c8bd59feecef6aa31692ba90a0d94f84307` |
|
|
52
|
+
| S12-F02 compatible identifier-dictionary repair | [PR #17](https://github.com/Stahldavid/forge/pull/17), `2ca5ba7d261cf4001aa755581caa4b29de109b35` | FIXED_AND_ADOPTED separately; reviewed head `a832e29a3e8c757249eb8a59b7774d6521b4853e` |
|
|
53
|
+
| S1.2 complete reference design | [PR #16](https://github.com/Stahldavid/forge/pull/16), `d2f426b1577d457bc6609c4d8e88ef7a055a1a23` | `ADOPTED`; S12-D12 complete; reviewed head `a2ac1769ac74fe9f7a87558a27332aa7c2a95114` |
|
|
54
|
+
| S1.3 scope and conformance plan | [PR #18](https://github.com/Stahldavid/forge/pull/18), `801c2192e64652ade19a642b2f09f8660963c74f` | `ADOPTED`; S13-P08 complete; reviewed head `c694e9091bc1211b27d7e5e934ff4b9905e6ae89` |
|
|
55
|
+
| Delta semantic timeline test timeout/cleanup | [PR #20](https://github.com/Stahldavid/forge/pull/20), `92c470ae2319aed9bde734d4506767677abe5a3c` | Adopted separately; reviewed head `0c8fe25d65ff5619395f3cf1f24635ba99a8e34c`; test-only, no Agent Fabric semantic change |
|
|
56
|
+
| S1.3-A evidence/reproduction baseline | [PR #19](https://github.com/Stahldavid/forge/pull/19), `de9449648d821086db3d6f214c1a39cd4c659c7e` | `ADOPTED`; S13-A12 complete; reviewed head `b48a8fb4d77a1d8f5df7d9d523623a2037966da0` |
|
|
57
|
+
| S1.3 final closure | [PR #43](https://github.com/Stahldavid/forge/pull/43), `f29b717f496b7edcd74e3f230c962e568fd0e5d2` | `ADOPTED`; reviewed head `36a6c75dfcc2c59e33fb04a8dfb9ce95da10f2ed`; adopted tree `49677d9979c2652c96f1cc4e0f2f82a17cb10f8e` |
|
|
58
|
+
| P0b bounded model-adapter scope | [PR #46](https://github.com/Stahldavid/forge/pull/46), `490c2b54a2a354cb38b0f527c6a3f9372f703ff5` | Adopted planning input for P0b-A only |
|
|
59
|
+
| P0b-A bounded model adapter | [PR #52](https://github.com/Stahldavid/forge/pull/52), `de3e1d5c97448823792bac1fcb71ab16e877ebab` | Adopted experimental runtime slice; reviewed head `ec37aeaa1c293d63e98de0b523fc2815761bc3dd` |
|
|
60
|
+
|
|
61
|
+
The adopted S1.3 planning coordinate remains
|
|
62
|
+
`main@801c2192e64652ade19a642b2f09f8660963c74f`. The separately adopted PR #20 moved the
|
|
63
|
+
repository/reproduction baseline to `main@92c470ae2319aed9bde734d4506767677abe5a3c`; that
|
|
64
|
+
movement was assessed under S13-A01. S1.3-A was subsequently adopted by PR #19 at
|
|
65
|
+
`main@de9449648d821086db3d6f214c1a39cd4c659c7e`.
|
|
66
|
+
|
|
67
|
+
S1.3 is formally closed by PR #43 at
|
|
68
|
+
`main@f29b717f496b7edcd74e3f230c962e568fd0e5d2`. The closure preserves GAP-002 and GAP-008 as
|
|
69
|
+
historical/nonblocking limitations, closes GAP-001 and GAP-009 through separately adopted
|
|
70
|
+
evidence, and keeps GAP-003…007 within their previously adopted applicability boundaries.
|
|
71
|
+
Candidate/planning labels in exact historical source artifacts remain preserved as authored;
|
|
72
|
+
adoption merges and later supplements establish subsequent state.
|
|
73
|
+
|
|
74
|
+
The P0b Scope & Gate was adopted through PR #46 over the closed S1.3 baseline. It authorized
|
|
75
|
+
implementation work only for P0b-A. PR #52 separately adopted the bounded model-invocation
|
|
76
|
+
adapter after exact-head CI/security checks, a keyless live Ollama smoke, independent review
|
|
77
|
+
and an explicitly authorized merge. The adoption record retains those coordinates and limits.
|
|
78
|
+
|
|
79
|
+
After adoption, changes must not silently rewrite history. A material change to a frozen
|
|
80
|
+
architecture decision requires a new superseding decision record that identifies:
|
|
81
|
+
|
|
82
|
+
1. the decision/invariant being superseded;
|
|
83
|
+
2. the reason for the change;
|
|
84
|
+
3. compatibility and migration impact;
|
|
85
|
+
4. new evidence and conformance obligations;
|
|
86
|
+
5. the exact commit at which the new decision becomes applicable.
|
|
87
|
+
|
|
88
|
+
Corrections that do not alter semantics (typos, links, formatting, evidence-location
|
|
89
|
+
updates) may amend these files directly, but must not change the meaning of frozen
|
|
90
|
+
invariants.
|
|
91
|
+
|
|
92
|
+
## Precedence
|
|
93
|
+
|
|
94
|
+
For the accepted P0a baseline, use this order when sources appear to disagree:
|
|
95
|
+
|
|
96
|
+
1. accepted executable behavior at `main@8972496f09727456b8b9f3ceafc386beab5f39d0`;
|
|
97
|
+
2. machine-readable schema and hardened replay/validation behavior in that baseline;
|
|
98
|
+
3. `P0A_ACCEPTANCE_RECORD.md`;
|
|
99
|
+
4. `S1.0B1_DECISION_FREEZE.md`;
|
|
100
|
+
5. `S1.0B2_EVIDENCE_FREEZE.md`;
|
|
101
|
+
6. `docs/agent-fabric.md`;
|
|
102
|
+
7. older design notes, handoffs, experiments, or conversation history.
|
|
103
|
+
|
|
104
|
+
This precedence rule prevents an older architecture note from overriding behavior that
|
|
105
|
+
was explicitly implemented, adversarially reviewed, and accepted.
|
|
106
|
+
|
|
107
|
+
S1.1 supplies the adopted operation-level specification of that same accepted behavior.
|
|
108
|
+
Its adoption does not reverse this precedence or authorize a discrepancy with the frozen
|
|
109
|
+
invariants. S1.2 supplies the adopted source/ownership/sequence mapping of that behavior;
|
|
110
|
+
it cannot override S1.1 or turn an implementation accident into a normative rule. A
|
|
111
|
+
conflict among source, freeze, kernel and adopted design requires explicit classification
|
|
112
|
+
under the existing change rule.
|
|
113
|
+
|
|
114
|
+
S1.3 evidence describes what was observed and how it can be reproduced. Evidence metadata,
|
|
115
|
+
a runner, a formal model or a signature cannot manufacture runtime authority or silently
|
|
116
|
+
change an `OP-*`/`I-*` obligation. The adopted S1.3-A baseline may classify gaps and
|
|
117
|
+
recommend a future decision, but it cannot itself implement a repair/tool or erase a
|
|
118
|
+
historical failed or inconclusive observation.
|
|
119
|
+
|
|
120
|
+
P0b planning inherits that precedence. A model/provider adapter may extend execution, but
|
|
121
|
+
cannot override the accepted deterministic authority/replay semantics merely because a live
|
|
122
|
+
provider behaves differently or exposes additional capabilities.
|
|
123
|
+
|
|
124
|
+
## Scope boundary
|
|
125
|
+
|
|
126
|
+
The freeze does **not** declare the entire future Agent Fabric implemented or
|
|
127
|
+
production-ready. It distinguishes three categories:
|
|
128
|
+
|
|
129
|
+
- **ACCEPTED_P0A** — implemented, tested, independently reviewed, and merged;
|
|
130
|
+
- **FROZEN_DIRECTION** — architecture direction that later slices must respect but that
|
|
131
|
+
is not fully implemented by P0a;
|
|
132
|
+
- **DEFERRED** — intentionally outside the accepted baseline and requiring a future slice
|
|
133
|
+
and separate acceptance evidence.
|
|
134
|
+
|
|
135
|
+
S1.2 — Reference Implementation Design is adopted. S1.3 planning and S1.3-A are adopted, and
|
|
136
|
+
S1.3 is now formally closed through the final closure record.
|
|
137
|
+
|
|
138
|
+
The closed S1.3 evidence package organizes evidence with stable IDs, separates historical
|
|
139
|
+
acceptance from current reproduction/source mapping, preserves `PASS`/`FAIL`/`SKIPPED`/
|
|
140
|
+
`NOT_APPLICABLE`/`BLOCKED`/`INCONCLUSIVE`, cross-indexes all 24 OP rules, 35 invariants and
|
|
141
|
+
16 persisted event families, defines exact-SHA reproduction discipline and retains historical
|
|
142
|
+
limitations without converting them into false green claims.
|
|
143
|
+
|
|
144
|
+
A generic conformance runner, formal model checking, proof/evidence signing, cross-language
|
|
145
|
+
or JCS conformance, machine-readable evidence automation, production retention, production
|
|
146
|
+
persistence/recovery, consequential effects and the broader future Agent Fabric remain
|
|
147
|
+
outside the accepted P0a/S1.3 baseline.
|
|
148
|
+
|
|
149
|
+
The adopted P0b-A slice is limited to one real provider-backed bounded external inference
|
|
150
|
+
behind the existing P0a permit/result boundary. It excludes tools/plugins/delegation,
|
|
151
|
+
consequential target mutation, production persistence/outbox, recovery epochs, adaptive
|
|
152
|
+
routing, persistent governed memory and plugin/evolution promotion. P0b-B and those broader
|
|
153
|
+
capabilities have no adoption claim in this record.
|
|
@@ -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
|