carthagent 0.0.0-stage → 1.0.7
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/LICENSE +21 -0
- package/README.md +219 -2
- package/bin/ctg.mjs +736 -0
- package/docs/budgets.md +72 -0
- package/docs/compaction.md +34 -0
- package/docs/context-efficiency-plan.md +24 -0
- package/docs/context-efficiency-review.md +27 -0
- package/docs/context-efficiency.md +49 -0
- package/docs/deepseek-jev-benchmark-plan.md +70 -0
- package/docs/deepseek-jev-benchmark-repair-plan.md +20 -0
- package/docs/deepseek-jev-benchmark-restart.md +9 -0
- package/docs/deepseek-jev-benchmark-results.md +77 -0
- package/docs/deepseek-jev-benchmark-running.md +60 -0
- package/docs/deepseek-jev-benchmark-v3-results.md +41 -0
- package/docs/deepseek-jev-benchmark-v4-protocol.md +15 -0
- package/docs/deepseek-jev-benchmark-v4-results.md +119 -0
- package/docs/deepseek-jev-http400-diagnosis.md +45 -0
- package/docs/delivery-review-evidence.md +53 -0
- package/docs/delivery-timeout-repair-plan.md +51 -0
- package/docs/evaluation-readiness.md +31 -0
- package/docs/evaluation.md +70 -0
- package/docs/extending.md +354 -0
- package/docs/glm-pilot-execution.md +9 -0
- package/docs/glm-pilot-plan.md +15 -0
- package/docs/glm-pilot-results.md +71 -0
- package/docs/graph-context-optimization.md +15 -0
- package/docs/jev-repository-pilot-plan.md +25 -0
- package/docs/jev-repository-pilot-protocol.md +39 -0
- package/docs/jev-repository-pilot-restart.md +7 -0
- package/docs/jev-repository-pilot-results.md +79 -0
- package/docs/jev.md +32 -0
- package/docs/model-registry.md +25 -0
- package/docs/native-compatibility.md +117 -0
- package/docs/opencode-archive.md +9 -0
- package/docs/opencode-migration.md +115 -0
- package/docs/opencode-runtime.md +94 -0
- package/docs/opencode-workspace.md +31 -0
- package/docs/owned-runtime-workflow-registration.md +17 -0
- package/docs/plan-advisor-evaluation.md +38 -0
- package/docs/planning-startup-fix-plan.md +23 -0
- package/docs/planning-startup-fix-review.md +24 -0
- package/docs/planning.md +118 -0
- package/docs/production-merge-review.md +23 -0
- package/docs/quality.md +35 -0
- package/docs/repository-benchmark-design.md +111 -0
- package/docs/review-assurance.md +9 -0
- package/docs/review-experiment-results.md +59 -0
- package/docs/tested-planning-roadmap.md +58 -0
- package/docs/tested-planning.md +58 -0
- package/docs/tui-pickers.md +9 -0
- package/docs/webdriver.md +83 -0
- package/docs/workflow-modes.md +26 -0
- package/docs/workflow.d2 +17 -0
- package/docs/workflow.svg +149 -0
- package/docs/workspace-coordination.md +9 -0
- package/evaluate.mjs +249 -0
- package/extensions/codegraph.ts +36 -0
- package/extensions/delivery.ts +819 -0
- package/extensions/experiential.ts +21 -0
- package/extensions/subscriptions.ts +21 -0
- package/guidance/profiles/authenticated-web.json +24 -0
- package/guidance/profiles/data-visualization.json +25 -0
- package/guidance/profiles/database-change.json +24 -0
- package/guidance/profiles/external-api.json +24 -0
- package/guidance/profiles/transactional-data.json +25 -0
- package/guidance/profiles/web-application.json +26 -0
- package/lib/acceptance-review.mjs +4 -0
- package/lib/browser-bin.mjs +160 -0
- package/lib/browser-errors.mjs +54 -0
- package/lib/browser.mjs +219 -0
- package/lib/budget.mjs +37 -0
- package/lib/cdp.mjs +221 -0
- package/lib/cloud/client.mjs +275 -0
- package/lib/cloud/control-plane.mjs +350 -0
- package/lib/cloud/gateway.mjs +380 -0
- package/lib/cloud/http.mjs +135 -0
- package/lib/cloud/ledger.mjs +215 -0
- package/lib/codegraph-query.mjs +60 -0
- package/lib/codegraph.mjs +378 -0
- package/lib/context-archive.mjs +18 -0
- package/lib/delivery-context.mjs +132 -0
- package/lib/delivery-guidance.mjs +9 -0
- package/lib/delivery-review.mjs +94 -0
- package/lib/delivery.mjs +610 -0
- package/lib/engine.mjs +137 -0
- package/lib/guidance.mjs +71 -0
- package/lib/jev-advisor.mjs +47 -0
- package/lib/opencode/archive.mjs +122 -0
- package/lib/opencode/compatibility.mjs +19 -0
- package/lib/opencode/credentials.mjs +205 -0
- package/lib/opencode/evaluation-budget-plugin/index.ts +147 -0
- package/lib/opencode/evaluation.mjs +242 -0
- package/lib/opencode/file-lock.mjs +86 -0
- package/lib/opencode/headless.mjs +200 -0
- package/lib/opencode/review.mjs +213 -0
- package/lib/opencode/runtime.mjs +246 -0
- package/lib/opencode/service.mjs +249 -0
- package/lib/opencode/session-options.mjs +60 -0
- package/lib/opencode/workspace.mjs +133 -0
- package/lib/openrouter-jev.mjs +37 -0
- package/lib/outcome-contract.mjs +21 -0
- package/lib/plan-advisor.mjs +38 -0
- package/lib/planning-access.mjs +7 -0
- package/lib/planning-advice.mjs +28 -0
- package/lib/planning-discovery.mjs +14 -0
- package/lib/planning-guide.mjs +34 -0
- package/lib/planning-view.mjs +57 -0
- package/lib/planning.mjs +155 -0
- package/lib/probe-diagnostics.mjs +13 -0
- package/lib/providers/experiential.mjs +292 -0
- package/lib/providers/model-catalog.json +700 -0
- package/lib/providers/model-catalog.mjs +7 -0
- package/lib/providers/names.mjs +13 -0
- package/lib/providers/subscription-models.mjs +483 -0
- package/lib/reports.mjs +80 -0
- package/lib/review-state.mjs +49 -0
- package/lib/review.mjs +114 -0
- package/lib/scenarios.mjs +99 -0
- package/lib/ship-auth.mjs +44 -0
- package/lib/ship-jev.mjs +59 -0
- package/lib/ship-telemetry.mjs +183 -0
- package/lib/tui/ansi.mjs +255 -0
- package/lib/tui/app.mjs +2445 -0
- package/lib/tui/auth.mjs +249 -0
- package/lib/tui/carthage.mjs +109 -0
- package/lib/tui/clipboard.mjs +122 -0
- package/lib/tui/d2.mjs +431 -0
- package/lib/tui/feed.mjs +467 -0
- package/lib/tui/framing.mjs +80 -0
- package/lib/tui/glyphs.mjs +172 -0
- package/lib/tui/hash-worker.mjs +11 -0
- package/lib/tui/mock-engine.mjs +222 -0
- package/lib/tui/models.mjs +73 -0
- package/lib/tui/picker.mjs +18 -0
- package/lib/tui/theme.mjs +663 -0
- package/lib/tui/title.mjs +7 -0
- package/lib/update-channel.mjs +62 -0
- package/lib/update.mjs +230 -0
- package/lib/webdriver.mjs +82 -0
- package/lib/workflow.mjs +88 -0
- package/lib/workspace.mjs +39 -0
- package/metadata.json +8 -0
- package/package.json +94 -4
- package/plugins/carthagent/index.ts +3 -0
- package/plugins/carthagent/package.json +28 -0
- package/plugins/carthagent/src/archive-rpc.ts +46 -0
- package/plugins/carthagent/src/bootstrap.ts +38 -0
- package/plugins/carthagent/src/index.ts +62 -0
- package/plugins/carthagent/src/pull-request-rpc.ts +54 -0
- package/plugins/carthagent/src/rpc.ts +76 -0
- package/plugins/carthagent/src/server/archive-rpc.ts +327 -0
- package/plugins/carthagent/src/server/budgets.ts +21 -0
- package/plugins/carthagent/src/server/codegraph.ts +46 -0
- package/plugins/carthagent/src/server/delivery.ts +488 -0
- package/plugins/carthagent/src/server/device-auth.ts +91 -0
- package/plugins/carthagent/src/server/native-delivery.ts +26 -0
- package/plugins/carthagent/src/server/orchestration.ts +56 -0
- package/plugins/carthagent/src/server/policy.ts +24 -0
- package/plugins/carthagent/src/server/providers.ts +424 -0
- package/plugins/carthagent/src/server/pull-request-rpc.ts +387 -0
- package/plugins/carthagent/src/server/session-controls.ts +82 -0
- package/plugins/carthagent/src/server/telemetry.ts +92 -0
- package/plugins/carthagent/src/server/workspace-rpc.ts +349 -0
- package/plugins/carthagent/src/session-rpc.ts +31 -0
- package/plugins/carthagent/src/testing.ts +85 -0
- package/plugins/carthagent/src/workspace-rpc.ts +133 -0
- package/plugins/carthagent/test-plugin/index.ts +4 -0
- package/plugins/carthagent/test-plugin/package.json +1 -0
- package/plugins/carthagent/tsconfig.json +19 -0
- package/plugins/carthagent/tui.ts +1 -0
- package/prompts/delivery.md +7 -0
- package/public/index.html +983 -0
- package/scenarios/cli/grade_cli.py +69 -0
- package/scenarios/cli/scenario.json +21 -0
- package/scenarios/game/baseline/minecraft.py +193 -0
- package/scenarios/game/context.md +1 -0
- package/scenarios/game/grade_minecraft_clone.py +603 -0
- package/scenarios/game/requirements.txt +2 -0
- package/scenarios/game/scenario.json +33 -0
- package/server.mjs +341 -0
- package/skills/game-development/SKILL.md +36 -0
- package/skills/game-development/assets/ursina_starter.py +98 -0
- package/skills/game-development/scripts/verify_ursina.py +80 -0
- package/skills/software-delivery/SKILL.md +50 -0
- package/skills/typescript-delivery/SKILL.md +69 -0
- package/tests/acceptance-review.test.mjs +13 -0
- package/tests/auth.test.mjs +234 -0
- package/tests/bounded-summary.test.mjs +68 -0
- package/tests/browser-bin.test.mjs +91 -0
- package/tests/browser.test.mjs +96 -0
- package/tests/budget-engine.test.mjs +110 -0
- package/tests/budget.test.mjs +23 -0
- package/tests/cli.test.mjs +245 -0
- package/tests/clipboard.test.mjs +79 -0
- package/tests/cloud-client.test.mjs +129 -0
- package/tests/cloud-control-plane.test.mjs +144 -0
- package/tests/cloud-gateway.test.mjs +147 -0
- package/tests/cloud-http.test.mjs +102 -0
- package/tests/cloud-ledger.test.mjs +75 -0
- package/tests/codegraph-query.test.mjs +66 -0
- package/tests/codegraph.test.mjs +142 -0
- package/tests/delivery-context.test.mjs +66 -0
- package/tests/delivery-review.test.mjs +139 -0
- package/tests/delivery.test.mjs +343 -0
- package/tests/engine-api.mjs +24 -0
- package/tests/experiential-extension.test.mjs +37 -0
- package/tests/experiential.test.mjs +300 -0
- package/tests/extension.test.mjs +921 -0
- package/tests/fixtures/archive-plugin/index.ts +10 -0
- package/tests/guidance.test.mjs +78 -0
- package/tests/model-registry.test.mjs +68 -0
- package/tests/models.test.mjs +70 -0
- package/tests/openai-idempotency.test.mjs +99 -0
- package/tests/opencode-archive-rpc.test.mjs +82 -0
- package/tests/opencode-delivery.test.mjs +231 -0
- package/tests/opencode-providers.test.mjs +414 -0
- package/tests/opencode-runtime.test.mjs +455 -0
- package/tests/opencode-session-controls.test.mjs +115 -0
- package/tests/opencode-session-options.test.mjs +26 -0
- package/tests/opencode-workspace.test.mjs +339 -0
- package/tests/outcome-contract.test.mjs +17 -0
- package/tests/picker.test.mjs +34 -0
- package/tests/plan-advisor.test.mjs +88 -0
- package/tests/plan-review-loop.test.mjs +53 -0
- package/tests/planning-advice.test.mjs +27 -0
- package/tests/planning-contract.test.mjs +65 -0
- package/tests/planning-startup.test.mjs +38 -0
- package/tests/planning-view.test.mjs +33 -0
- package/tests/planning.test.mjs +223 -0
- package/tests/probe-diagnostics.test.mjs +21 -0
- package/tests/pull-request-rpc.test.mjs +366 -0
- package/tests/review-state.test.mjs +32 -0
- package/tests/review.test.mjs +127 -0
- package/tests/server.test.mjs +252 -0
- package/tests/ship-jev.test.mjs +77 -0
- package/tests/ship-telemetry.test.mjs +333 -0
- package/tests/standard-workflow.test.mjs +28 -0
- package/tests/subscription-models.test.mjs +416 -0
- package/tests/subscriptions-extension.test.mjs +27 -0
- package/tests/terminal-title.test.mjs +13 -0
- package/tests/test_grade_minecraft_clone.py +199 -0
- package/tests/test_starter.py +78 -0
- package/tests/theme.test.mjs +175 -0
- package/tests/tui-copy-paste.test.mjs +54 -0
- package/tests/tui.test.mjs +808 -0
- package/tests/update-channels.test.mjs +129 -0
- package/tests/update.test.mjs +175 -0
- package/tests/webdriver.test.mjs +31 -0
- package/tests/workflow.test.mjs +47 -0
- package/tests/workspace-rpc.test.mjs +236 -0
- package/tests/workspace.test.mjs +24 -0
- package/tools/benchmark/advisor.test.mjs +7 -0
- package/tools/benchmark/advisor.ts +27 -0
- package/tools/benchmark/campaign.mjs +45 -0
- package/tools/benchmark/diagnose-request.mjs +40 -0
- package/tools/benchmark/eval-common.mjs +32 -0
- package/tools/benchmark/eval-ledger.mjs +22 -0
- package/tools/benchmark/eval-shop.mjs +26 -0
- package/tools/benchmark/eval-voxel.mjs +20 -0
- package/tools/benchmark/evaluate.mjs +24 -0
- package/tools/benchmark/evaluators.test.mjs +13 -0
- package/tools/benchmark/fixtures/shop/server.mjs +18 -0
- package/tools/benchmark/fixtures/shop/ui.html +8 -0
- package/tools/benchmark/freeze.mjs +30 -0
- package/tools/benchmark/gateway.mjs +91 -0
- package/tools/benchmark/gateway.test.mjs +38 -0
- package/tools/benchmark/generator.mjs +11 -0
- package/tools/benchmark/generator.test.mjs +26 -0
- package/tools/benchmark/guard.test.mjs +133 -0
- package/tools/benchmark/guard.ts +136 -0
- package/tools/benchmark/native-plugin/index.ts +24 -0
- package/tools/benchmark/planning-startup.test.mjs +47 -0
- package/tools/benchmark/preflight-live.mjs +31 -0
- package/tools/benchmark/preflight.mjs +22 -0
- package/tools/benchmark/replay-diagnostic.mjs +23 -0
- package/tools/benchmark/runner.mjs +141 -0
- package/tools/benchmark/runner.test.mjs +93 -0
- package/tools/benchmark/runtime.mjs +23 -0
- package/tools/benchmark/selftest.mjs +47 -0
- package/tools/benchmark/smoke-jev.mjs +5 -0
- package/tools/benchmark/tasks.mjs +20 -0
- package/tools/benchmark/transport.mjs +65 -0
- package/tools/benchmark/transport.test.mjs +44 -0
- package/tools/benchmark/upstream-error.mjs +18 -0
- package/tools/benchmark/upstream-error.test.mjs +10 -0
- package/tools/browser-check.mjs +109 -0
- package/tools/check-syntax.mjs +27 -0
- package/tools/evaluate-plan-advisor.mjs +20 -0
- package/tools/native-fixture.mjs +194 -0
- package/tools/native-pty-smoke.py +108 -0
- package/tools/native-report-plugin/index.ts +50 -0
- package/tools/native-report-plugin/package.json +7 -0
- package/tools/patch-compaction.mjs +24 -0
- package/tools/patch-model-catalog.mjs +12 -0
- package/tools/patch-print-shutdown.mjs +39 -0
- package/tools/repo-pilot/evaluator.cjs +32 -0
- package/tools/repo-pilot/reference.mjs +43 -0
- package/tools/repo-pilot/runner.mjs +85 -0
- package/tools/repo-pilot/sandbox-entry.mjs +12 -0
- package/tools/repo-pilot/tasks.mjs +20 -0
- package/tools/repo-pilot/type-evaluator.cjs +6 -0
- package/tools/test-native-controls.mjs +84 -0
- package/tools/test-native-delivery-host.mjs +307 -0
- package/tools/test-native-evaluation.mjs +46 -0
- package/tools/test-native-host.mjs +385 -0
- package/tools/test-native-outcomes.mjs +73 -0
- package/tools/test-native-package.mjs +70 -0
- package/tools/test-native-pty.mjs +20 -0
- package/tools/test-native-report.mjs +88 -0
- package/tools/test-native-swe-host.mjs +132 -0
- package/tools/test-native-swe.mjs +122 -0
- package/tools/test-picker-pty.py +45 -0
- package/tools/test-python.mjs +29 -0
- package/tools/test-webdriver.mjs +54 -0
- package/tools/verify-release-version.mjs +37 -0
- package/tools/webdriver-check.mjs +52 -0
- package/vendor/agent/bounded-summary.mjs +88 -0
- package/vendor/agent/chunks/anthropic-messages-VWZZOSJQ.js +6 -0
- package/vendor/agent/chunks/anthropic.js +75 -0
- package/vendor/agent/chunks/azure-openai-responses-BJLAM6CD.js +2 -0
- package/vendor/agent/chunks/bedrock-converse-stream.js +74 -0
- package/vendor/agent/chunks/chord-context.js +96 -0
- package/vendor/agent/chunks/chunk-4L3WN2XY.js +2 -0
- package/vendor/agent/chunks/chunk-6CYCI3EJ.js +12 -0
- package/vendor/agent/chunks/chunk-6R7UI4IY.js +2 -0
- package/vendor/agent/chunks/chunk-7ZC4UXSL.js +2 -0
- package/vendor/agent/chunks/chunk-AXIIZGTV.js +2 -0
- package/vendor/agent/chunks/chunk-CLNPYIDP.js +42 -0
- package/vendor/agent/chunks/chunk-DRQDKNXA.js +2 -0
- package/vendor/agent/chunks/chunk-GMWCTUPB.js +2 -0
- package/vendor/agent/chunks/chunk-IDDQWTHI.js +2 -0
- package/vendor/agent/chunks/chunk-JVUZSMYM.js +1548 -0
- package/vendor/agent/chunks/chunk-L2ZPNLYD.js +2 -0
- package/vendor/agent/chunks/chunk-NUHFSC37.js +25 -0
- package/vendor/agent/chunks/chunk-OUXLLA64.js +11 -0
- package/vendor/agent/chunks/chunk-PGXDEOVV.js +2 -0
- package/vendor/agent/chunks/chunk-PJACZCIR.js +2 -0
- package/vendor/agent/chunks/chunk-PRRNXB7S.js +2 -0
- package/vendor/agent/chunks/chunk-TEPMHNKQ.js +2 -0
- package/vendor/agent/chunks/chunk-TRDNDS6A.js +4 -0
- package/vendor/agent/chunks/chunk-U6ZMQKGD.js +50 -0
- package/vendor/agent/chunks/chunk-UAQELI3K.js +2 -0
- package/vendor/agent/chunks/chunk-USJZMAIR.js +2 -0
- package/vendor/agent/chunks/chunk-XDUWOHPL.js +6 -0
- package/vendor/agent/chunks/chunk-XNGRGP62.js +2 -0
- package/vendor/agent/chunks/github-copilot.js +2 -0
- package/vendor/agent/chunks/google-generative-ai-Q2K7FBDI.js +2 -0
- package/vendor/agent/chunks/google-vertex-7UJBF4S7.js +2 -0
- package/vendor/agent/chunks/https-proxy-agent-2VXB7436.js +13 -0
- package/vendor/agent/chunks/image-resize-worker.js +2 -0
- package/vendor/agent/chunks/kimi-coding.js +2 -0
- package/vendor/agent/chunks/lib-HGQMNYVT.js +9 -0
- package/vendor/agent/chunks/mistral-conversations-4M6BZBX6.js +5 -0
- package/vendor/agent/chunks/multipart-parser-SQ6GDJL7.js +3 -0
- package/vendor/agent/chunks/node-KG362ECQ.js +16 -0
- package/vendor/agent/chunks/node-TWVVAGPO.js +2 -0
- package/vendor/agent/chunks/openai-codex-responses-R6VYZTVY.js +10 -0
- package/vendor/agent/chunks/openai-codex.js +75 -0
- package/vendor/agent/chunks/openai-completions-EKZT2IH2.js +7 -0
- package/vendor/agent/chunks/openai-responses-TFDINO6W.js +2 -0
- package/vendor/agent/chunks/openrouter-images-N4XVVFSD.js +2 -0
- package/vendor/agent/chunks/openrouter.js +75 -0
- package/vendor/agent/chunks/pi-messages-PML4SPVJ.js +8 -0
- package/vendor/agent/chunks/radius.js +75 -0
- package/vendor/agent/chunks/src-UK77SYZE.js +4 -0
- package/vendor/agent/chunks/xai.js +2 -0
- package/vendor/agent/cli.js +3 -0
- package/vendor/agent/dist/modes/interactive/theme/dark.json +91 -0
- package/vendor/agent/dist/modes/interactive/theme/light.json +90 -0
- package/vendor/agent/dist/modes/interactive/theme/theme-schema.json +356 -0
- package/vendor/agent/index.js +2 -0
- package/vendor/agent/modes/interactive/theme/dark.json +91 -0
- package/vendor/agent/modes/interactive/theme/light.json +90 -0
- package/vendor/agent/modes/interactive/theme/theme-schema.json +356 -0
- package/vendor/agent/package.json +14 -0
- package/vendor/agent/rpc-entry.js +3 -0
- package/vendor/agent/theme/dark.json +91 -0
- package/vendor/agent/theme/light.json +90 -0
- package/vendor/agent/theme/theme-schema.json +356 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# Extending Carthagent
|
|
2
|
+
|
|
3
|
+
Carthagent has five extension points, listed from simplest to most powerful. Each is a directory of files with a known shape — no build step, no registration call. The first three are pure config; the last two are code.
|
|
4
|
+
|
|
5
|
+
| Extension point | What it does | Where it lives | Requires code? |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| **Guidance profile** | Injects domain-specific planning/check/review requirements when a request matches keywords or dependencies | `guidance/profiles/*.json` | No |
|
|
8
|
+
| **Prompt template** | Pre-packaged prompt with frontmatter; expanded via `/guide <name> <args>` or the default delivery flow | `prompts/*.md` | No |
|
|
9
|
+
| **Skill** | Domain knowledge the agent reads before implementing matching tasks | `skills/<name>/SKILL.md` | No (markdown only) |
|
|
10
|
+
| **Provider** | Registers a new AI provider (model gateway, auth, model discovery) | `lib/providers/<name>.mjs` + an extension that calls `registerProvider` | Yes |
|
|
11
|
+
| **Extension** | Registers tools, commands, flags, event handlers, and providers into the engine | `extensions/*.ts` | Yes |
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Guidance profiles
|
|
16
|
+
|
|
17
|
+
A guidance profile adds planning, check, and review requirements to the delivery system prompt when a user request matches its keywords or project dependencies. Matching is automatic and happens on every `before_agent_start` event.
|
|
18
|
+
|
|
19
|
+
**Location:** `guidance/profiles/<id>.json`
|
|
20
|
+
|
|
21
|
+
**Shape:**
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"id": "my-domain",
|
|
26
|
+
"title": "My domain",
|
|
27
|
+
"priority": 50,
|
|
28
|
+
"match": {
|
|
29
|
+
"keywords": ["widget", "gadget"],
|
|
30
|
+
"allKeywords": [],
|
|
31
|
+
"excludeKeywords": ["read-only"],
|
|
32
|
+
"dependencies": ["my-lib", "@scope/my-lib"]
|
|
33
|
+
},
|
|
34
|
+
"activateOnDependency": false,
|
|
35
|
+
"planning": [
|
|
36
|
+
"Plan requirement: separate widget logic from rendering.",
|
|
37
|
+
"Plan requirement: validate gadget input before persistence."
|
|
38
|
+
],
|
|
39
|
+
"checks": [
|
|
40
|
+
"Check: test widget rendering at narrow and wide widths.",
|
|
41
|
+
"Check: test gadget input with malformed and empty values."
|
|
42
|
+
],
|
|
43
|
+
"review": [
|
|
44
|
+
"Review: confirm widgets clean up listeners on unmount.",
|
|
45
|
+
"Review: confirm gadget errors do not leak internal state."
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Rules** (enforced by `lib/guidance.mjs`):
|
|
51
|
+
|
|
52
|
+
- `id` — must match `^[a-z][a-z0-9-]{1,39}$` (lowercase, hyphens, 2–40 chars).
|
|
53
|
+
- `title` — required string.
|
|
54
|
+
- `match.keywords` — required non-empty array; any keyword match activates the profile.
|
|
55
|
+
- `match.allKeywords` — optional; if present, *all* must match (AND).
|
|
56
|
+
- `match.excludeKeywords` — optional; any match deactivates the profile.
|
|
57
|
+
- `match.dependencies` — optional; matched against `package.json` dependency names (case-insensitive).
|
|
58
|
+
- `activateOnDependency` — when `true`, a dependency match alone activates the profile even without a keyword match. Default `false`.
|
|
59
|
+
- `priority` — higher wins when multiple profiles match; ties break by `id` alphabetical order. Default `0`.
|
|
60
|
+
- `planning`, `checks`, `review` — each a required array of non-empty strings.
|
|
61
|
+
|
|
62
|
+
Profiles are loaded at startup from every `*.json` file in the directory. No restart is needed for content changes — they are read fresh on each session start.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Prompt templates
|
|
67
|
+
|
|
68
|
+
A prompt template is a markdown file with YAML frontmatter. The body is the prompt; `$@` is replaced with the user's argument when expanded.
|
|
69
|
+
|
|
70
|
+
**Location:** `prompts/<name>.md`
|
|
71
|
+
|
|
72
|
+
**Shape:**
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
---
|
|
76
|
+
description: Short description shown in the template picker
|
|
77
|
+
argument-hint: "<args>"
|
|
78
|
+
---
|
|
79
|
+
Do this task with evidence: $@
|
|
80
|
+
|
|
81
|
+
**Phase 1 — Inspect.** Read the repo and relevant APIs.
|
|
82
|
+
|
|
83
|
+
**Phase 2 — Plan.** Call delivery_plan first.
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Conventions:**
|
|
87
|
+
|
|
88
|
+
- The filename (minus `.md`) is the template name, used as `/guide <name> <args>` or selected in the prompt template picker.
|
|
89
|
+
- `$@` is the placeholder for the user's argument. If the template contains `$@`, the argument is substituted in place; otherwise it is appended after a blank line (see `lib/tui/framing.mjs` `framePrompt`).
|
|
90
|
+
- Frontmatter is stripped before the prompt is sent to the model (see `lib/tui/framing.mjs` `readTemplate`).
|
|
91
|
+
- The default delivery flow uses `prompts/delivery.md` automatically — `framing.mjs` resolves and expands it for every non-slash, non-question prompt unless `--no-guide` is passed.
|
|
92
|
+
|
|
93
|
+
**The default template** (`prompts/delivery.md`) is the phased delivery pipeline. To change the default flow, edit that file. To add an alternative flow, add a new template and invoke it with `/guide <name>`.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Skills
|
|
98
|
+
|
|
99
|
+
A skill is a markdown knowledge base the agent reads before implementing matching tasks. The engine discovers skills from the `skills/` directory (passed via `--skill <dir>` in `lib/engine.mjs`).
|
|
100
|
+
|
|
101
|
+
**Location:** `skills/<name>/SKILL.md`
|
|
102
|
+
|
|
103
|
+
**Shape:**
|
|
104
|
+
|
|
105
|
+
```markdown
|
|
106
|
+
---
|
|
107
|
+
name: my-skill
|
|
108
|
+
description: One-line description of when to use this skill. The agent reads this
|
|
109
|
+
to decide whether the skill applies to the current task.
|
|
110
|
+
---
|
|
111
|
+
# My skill
|
|
112
|
+
|
|
113
|
+
## When to use
|
|
114
|
+
Tasks involving X, Y, or Z.
|
|
115
|
+
|
|
116
|
+
## How to implement
|
|
117
|
+
1. Step one.
|
|
118
|
+
2. Step two.
|
|
119
|
+
|
|
120
|
+
## Pitfalls
|
|
121
|
+
- Common mistake and how to avoid it.
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Conventions:**
|
|
125
|
+
|
|
126
|
+
- `name` in frontmatter should match the directory name.
|
|
127
|
+
- `description` is what the agent sees in the skills list — make it specific enough that the agent picks it for the right tasks and skips it for the wrong ones.
|
|
128
|
+
- The body is plain markdown. Include concrete API names, code patterns, and pitfalls — the agent reads the full file when it decides the skill applies.
|
|
129
|
+
- A skill directory can contain additional files (scripts, assets, starter code). Reference them by relative path from the SKILL.md, e.g. `scripts/verify.py` or `assets/starter.py`. The game-development skill uses this pattern — see `skills/game-development/`.
|
|
130
|
+
|
|
131
|
+
**How the agent discovers skills:** The delivery system prompt (in `extensions/delivery.ts`) tells the agent to "check the available skills list and read the matching skill before implementing." The engine makes the skill list and contents available; no manual invocation is needed.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Providers
|
|
136
|
+
|
|
137
|
+
A provider connects the engine to an AI model gateway. It defines the base URL, API protocol, authentication (API key or OAuth), model discovery, and the streaming function.
|
|
138
|
+
|
|
139
|
+
**Location:** `lib/providers/<name>.mjs` (the provider config factory) + an extension in `extensions/<name>.ts` that calls `registerProvider`.
|
|
140
|
+
|
|
141
|
+
**Provider config shape** (returned by the factory function, see `lib/providers/experiential.mjs`):
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
export function myProviderConfig({ env = process.env } = {}) {
|
|
145
|
+
return {
|
|
146
|
+
name: 'My Provider', // display name
|
|
147
|
+
baseUrl: 'https://api.example.com/v1',
|
|
148
|
+
api: 'openai-completions', // API protocol: 'openai-completions' | 'openai-responses' | ...
|
|
149
|
+
apiKey: '$MY_API_KEY', // env var name prefixed with $; the engine reads it
|
|
150
|
+
authHeader: true, // send Authorization: Bearer <key>
|
|
151
|
+
oauth: { // optional OAuth flow (omit for API-key-only providers)
|
|
152
|
+
name: 'My Provider account',
|
|
153
|
+
async login(interaction) { /* returns { access, refresh, expiresAt } */ },
|
|
154
|
+
async refreshToken(credentials, signal) { /* returns refreshed credentials */ },
|
|
155
|
+
getApiKey(credentials) { return credentials.access; },
|
|
156
|
+
},
|
|
157
|
+
streamSimple(model, context, options) {
|
|
158
|
+
// Calls the engine's bundled streaming function for this API protocol.
|
|
159
|
+
// For openai-completions: import { streamSimple } from '../../vendor/agent/chunks/openai-completions-*.js'
|
|
160
|
+
return streamOpenAiCompletions(model, context, options);
|
|
161
|
+
},
|
|
162
|
+
models: [], // initial model list (empty = discover at runtime)
|
|
163
|
+
async refreshModels(context) {
|
|
164
|
+
// Fetch GET /v1/models with context.credential, return [{ id, name }]
|
|
165
|
+
// context: { stored, credential, allowNetwork, signal }
|
|
166
|
+
// Throw on failure; return stored models if !allowNetwork
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Extension that registers it** (`extensions/<name>.ts`):
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
|
|
176
|
+
import { myProviderConfig, MY_PROVIDER_ID } from '../lib/providers/my-provider.mjs';
|
|
177
|
+
|
|
178
|
+
export default function myProvider(pi: ExtensionAPI) {
|
|
179
|
+
pi.registerProvider(MY_PROVIDER_ID, myProviderConfig());
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Wiring it in:** The provider extension must be loaded by the engine. Carthagent loads `extensions/experiential.ts` automatically in `lib/engine.mjs` (`buildEngineArgs`). To load an additional provider extension, either:
|
|
184
|
+
|
|
185
|
+
1. Add it to `buildEngineArgs` in `lib/engine.mjs` (for always-on providers), or
|
|
186
|
+
2. Pass `-e extensions/my-provider.ts` to the engine (for optional providers).
|
|
187
|
+
|
|
188
|
+
**Key fields:**
|
|
189
|
+
|
|
190
|
+
- `api` — the streaming protocol. Must match a bundled chunk in `vendor/agent/chunks/`. Common values: `openai-completions`, `openai-responses`.
|
|
191
|
+
- `apiKey` — `'$ENV_VAR_NAME'` tells the engine to read the key from that env var. The `$` prefix is required.
|
|
192
|
+
- `oauth` — omit for API-key-only providers. When present, the login picker offers the OAuth flow alongside the API-key field.
|
|
193
|
+
- `refreshModels(context)` — called on login and model refresh. `context.credential.type` is `'api_key'` or `'oauth'`; `context.credential.key` or `context.credential.access` holds the token. Return `[{ id, name }]`.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Extensions
|
|
198
|
+
|
|
199
|
+
An extension is a TypeScript module with a default export function that receives the `ExtensionAPI` and registers tools, commands, flags, event handlers, and/or providers.
|
|
200
|
+
|
|
201
|
+
**Location:** `extensions/<name>.ts`
|
|
202
|
+
|
|
203
|
+
**Minimal extension** (registers a provider + event handler — see `extensions/experiential.ts`):
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
|
|
207
|
+
|
|
208
|
+
export default function myExtension(pi: ExtensionAPI) {
|
|
209
|
+
pi.on('message_end', (event, ctx) => {
|
|
210
|
+
if (event?.message?.stopReason === 'error') {
|
|
211
|
+
ctx.ui?.notify?.('An error occurred.', 'warning');
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### ExtensionAPI surface
|
|
218
|
+
|
|
219
|
+
Defined in `types/pi-coding-agent.d.ts`:
|
|
220
|
+
|
|
221
|
+
| Method | Purpose |
|
|
222
|
+
|---|---|
|
|
223
|
+
| `pi.registerTool(tool)` | Register a tool the model can call |
|
|
224
|
+
| `pi.registerCommand(name, command)` | Register a slash command (`/name`) |
|
|
225
|
+
| `pi.registerFlag(name, flag)` | Register a CLI flag (string or boolean) |
|
|
226
|
+
| `pi.getFlag(name)` | Read a flag value at runtime |
|
|
227
|
+
| `pi.on(event, handler)` | Subscribe to engine events |
|
|
228
|
+
| `pi.registerProvider(id, config)` | Register an AI provider |
|
|
229
|
+
| `pi.appendEntry(customType, data)` | Persist a custom entry in the session file |
|
|
230
|
+
| `pi.sendMessage(message, options?)` | Send a message to the conversation (with optional `triggerTurn`) |
|
|
231
|
+
|
|
232
|
+
### Registering a tool
|
|
233
|
+
|
|
234
|
+
Tools use TypeBox for parameter schemas (imported from `typebox`). The `execute` function is async and returns `{ content: [{ type: 'text', text }], isError? }`.
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
import { Type } from 'typebox';
|
|
238
|
+
import type { ExtensionAPI, ExtensionToolResult } from '@earendil-works/pi-coding-agent';
|
|
239
|
+
|
|
240
|
+
export default function myExtension(pi: ExtensionAPI) {
|
|
241
|
+
pi.registerTool({
|
|
242
|
+
name: 'my_tool',
|
|
243
|
+
label: 'My tool',
|
|
244
|
+
description: 'Does something useful. The model reads this to decide when to call it.',
|
|
245
|
+
parameters: Type.Object({
|
|
246
|
+
path: Type.String({ minLength: 1, maxLength: 500 }),
|
|
247
|
+
verbose: Type.Optional(Type.Boolean()),
|
|
248
|
+
}),
|
|
249
|
+
async execute(id, params, signal, onUpdate, ctx): Promise<ExtensionToolResult> {
|
|
250
|
+
// params is typed by the TypeBox schema above
|
|
251
|
+
// signal is an AbortSignal; check it for long operations
|
|
252
|
+
// onUpdate(result?) streams partial results to the UI (optional)
|
|
253
|
+
// ctx: { cwd, hasUI, sessionManager, ui, ... }
|
|
254
|
+
|
|
255
|
+
const result = `Processed ${params.path}`;
|
|
256
|
+
return { content: [{ type: 'text', text: result }] };
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Tool conventions:**
|
|
263
|
+
|
|
264
|
+
- `name` — snake_case, used as the tool call name.
|
|
265
|
+
- `description` — the model's only guidance for when and how to call the tool. Be specific about preconditions and what it returns.
|
|
266
|
+
- `parameters` — a TypeBox `Type.Object(...)`. The engine validates calls against this schema before `execute` runs.
|
|
267
|
+
- `execute(id, params, signal, onUpdate, ctx)` — `id` is the call ID; `signal` is an `AbortSignal` (check `signal.aborted` for long operations); `onUpdate` streams partial results; `ctx.cwd` is the workspace, `ctx.sessionManager` gives session access.
|
|
268
|
+
- Return `{ content: [{ type: 'text', text }], isError?: true }`. Use `truncateTail` from the engine API for large outputs.
|
|
269
|
+
|
|
270
|
+
### Registering a slash command
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
pi.registerCommand('my-command', {
|
|
274
|
+
description: 'Do something',
|
|
275
|
+
handler(args, ctx) {
|
|
276
|
+
// args is the raw string after the command name
|
|
277
|
+
// ctx has the same shape as tool ctx
|
|
278
|
+
pi.sendMessage({ customType: 'my-command', display: true, content: `Ran with: ${args}` });
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Registering a flag
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
pi.registerFlag('my-flag', {
|
|
287
|
+
description: 'A string flag that controls behavior',
|
|
288
|
+
type: 'string', // or 'boolean'
|
|
289
|
+
default: 'default-value', // omit for boolean flags
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Read it at runtime with `pi.getFlag('my-flag')`.
|
|
294
|
+
|
|
295
|
+
### Event handlers
|
|
296
|
+
|
|
297
|
+
Common events (see `extensions/delivery.ts` for full usage):
|
|
298
|
+
|
|
299
|
+
| Event | When | Handler return |
|
|
300
|
+
|---|---|---|
|
|
301
|
+
| `session_start` | Session begins or resumes | — |
|
|
302
|
+
| `session_tree` | Session tree rebuilt (e.g. after compaction) | — |
|
|
303
|
+
| `session_shutdown` | Session ends | — |
|
|
304
|
+
| `agent_start` | A model turn begins | — |
|
|
305
|
+
| `before_agent_start` | Before a turn; can inject system prompt | `{ systemPrompt: '...' }` |
|
|
306
|
+
| `input` | User input received | `{ action: 'continue' }` to proceed |
|
|
307
|
+
| `context` | Context assembled (e.g. after compaction) | `{ messages: [...] }` to inject |
|
|
308
|
+
| `tool_call` | Before a tool executes | `{ block: true, reason: '...' }` to block |
|
|
309
|
+
| `message_end` | A message completes | — |
|
|
310
|
+
|
|
311
|
+
The `tool_call` event can mutate or block tool calls — `delivery.ts` uses this to enforce plan-before-write and cap shell timeouts. Return `{ block: true, reason: '...' }` to prevent execution.
|
|
312
|
+
|
|
313
|
+
### Loading an extension
|
|
314
|
+
|
|
315
|
+
Extensions are loaded via the engine's `-e` flag. Carthagent's `lib/engine.mjs` (`buildEngineArgs`) automatically loads `extensions/experiential.ts` and, when delivery is enabled, `extensions/delivery.ts`. To load a custom extension:
|
|
316
|
+
|
|
317
|
+
- **Always-on:** add `args.push('-e', join(ROOT, 'extensions', 'my-extension.ts'))` to `buildEngineArgs` in `lib/engine.mjs`.
|
|
318
|
+
- **Per-run:** pass `-e extensions/my-extension.ts` to the engine, or `--no-extensions` to skip all extensions.
|
|
319
|
+
|
|
320
|
+
### Type checking
|
|
321
|
+
|
|
322
|
+
Extensions are type-checked by `npm run typecheck` (tsc with `types/pi-coding-agent.d.ts`). Run `npm run lint` before committing — it runs both eslint and typecheck. The type definitions in `types/pi-coding-agent.d.ts` are ambient; at runtime the bundled engine aliases `@earendil-works/pi-coding-agent` to its own exports, so extensions never resolve an external package.
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Testing extensions
|
|
327
|
+
|
|
328
|
+
Extension tests live in `tests/extension.test.mjs`. The pattern uses `jiti` to load the TypeScript extension without a build step, and a fake `ExtensionAPI` object to capture registrations:
|
|
329
|
+
|
|
330
|
+
```javascript
|
|
331
|
+
const jiti = createJiti(import.meta.url, {
|
|
332
|
+
alias: {
|
|
333
|
+
typebox: requireEngine.resolve('typebox'),
|
|
334
|
+
'@earendil-works/pi-coding-agent': fileURLToPath(new URL('../vendor/agent/index.js', import.meta.url)),
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
const factory = await jiti.import(fileURLToPath(new URL('../extensions/my-extension.ts', import.meta.url)), { default: true });
|
|
338
|
+
|
|
339
|
+
const hooks = {}, commands = {}, tools = {};
|
|
340
|
+
const engine = {
|
|
341
|
+
registerCommand(name, command) { commands[name] = command; },
|
|
342
|
+
registerFlag() {}, getFlag: () => undefined,
|
|
343
|
+
on(name, fn) { hooks[name] = fn; },
|
|
344
|
+
registerTool(tool) { tools[tool.name] = tool; },
|
|
345
|
+
appendEntry() {}, sendMessage() {},
|
|
346
|
+
};
|
|
347
|
+
factory(engine);
|
|
348
|
+
|
|
349
|
+
// Now assert tools/commands were registered
|
|
350
|
+
assert.ok(tools.my_tool);
|
|
351
|
+
assert.ok(commands['my-command']);
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
Run the full suite with `npm test` (or `node --test tests/*.test.mjs`).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# GLM full six-cell pilot execution authorization
|
|
2
|
+
|
|
3
|
+
User explicitly requested the full benchmark with GLM5.3 Flash. Execute appendHeader/vary × plain pi/Carthagent/Carthagent+Jev using current startup repairs, same pinned Fastify base, exact task contracts and protected evaluators from prior pilot. One replicate, not a statistical or blind held-out efficacy study. Docs frozen online sources, not live web-search/browser tasks.
|
|
4
|
+
|
|
5
|
+
Readiness: actual exact-model basic tool/guide smoke passed; additional real native compaction smoke produced one compaction then SMOKE_OK (18.444s,$0.00465165,3 tools). Original94 regression subset passes inside corrected namespace. Historical reference/mutant evaluator validation retained. No source/evaluator changes in this execution stage.
|
|
6
|
+
|
|
7
|
+
Freeze before all candidates, source/runtime/dependencies/reference/host-config manifest. GLM exact ID/price ceilings from generator profile.30k compaction threshold/6k recent/100k configured context intentionally retained rather than using advertised >1M context.900s/120 tools/100 paid requests/16,384 output tokens/400KB input/$2.30 per cell, <=3 optional Jev attempts. Reuse existing durable $14 candidate+$1 smoke aggregate limits including prior spent/holds; no reset. Full six theoretical maxima may exceed residual allowance; durable shared account is authoritative and any cell must stop rather than overspend. Actual prior costs are small; no promise every cell gets maximum remaining dollars.
|
|
8
|
+
|
|
9
|
+
No candidate retries or repair after evaluation. Infrastructure error stops matrix for inspection; only previously unstarted cells may continue after disclosed receipt inspection without changed settings or erased failed artifacts. No unknown hold release. Outcomes distinguish final handoff, protected runtime/type/regression categories, candidate-owned tests, resource and infrastructure stops. Post-run report saved and final findings returned in chat. Jev advice cannot authorize; wrong-model responses rejected. Historical DeepSeek comparison confounded by model AND startup fixes; no isolated model superiority claim.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# GLM 5.3 Flash generator switch
|
|
2
|
+
|
|
3
|
+
User requested GLM5.3 Flash instead of DeepSeek. Verified exact public OpenRouter catalog ID `z-ai/glm-5.3-flash`, not FlashX/latest/batch, at https://openrouter.ai/api/v1/models; receipt `/home/baissi/benchmarks/glm-model-discovery/openrouter-glm.json`. Advertised tool and reasoning support; prices $0.15/M prompt, $0.50/M completion, $0.03/M cache read. Catalog metadata is not live compatibility evidence.
|
|
4
|
+
|
|
5
|
+
Design: fixed host-owned allowlisted generator profiles in existing billing gateway. Historical DeepSeek default remains for original benchmark/tests; repository pilot explicitly selects GLM. Model returned must match configured exact ID. Freeze model-profile source; never accept client routing/pricing overrides. Same existing cost reservations bound GLM pricing. Jev model/endpoint stays separate.
|
|
6
|
+
|
|
7
|
+
New repository-pilot root `glm-repo-pilot-v1`, reuse preserved setup but fresh candidate workspaces/freeze. Keep prior campaign ledger/$15 aggregate cap and unresolved holds; no reset. Same tasks/limits/30k compaction threshold for comparability, deliberately not use GLM advertised >1M context to hide workflow issues. Updated startup guidance used in both treatment arms. New model AND new harness means historical differences cannot isolate a model effect.
|
|
8
|
+
|
|
9
|
+
Author challenge: silently changing generic gateway default would invalidate historical test assumptions; rejected. Loosely accepting latest model aliases undermines identity; reject. Raising caps on switching models masks costs; reject. Catalog tools/reasoning claims need live preflight before candidates. Tests assert correct profile prices, rejected cross-model request and wrong returned identity with known-bill reconciliation. No paid call or matrix until readiness/freeze complete. This change configures the requested generator; does not switch the model serving this chat or claim completed GLM task runs.
|
|
10
|
+
|
|
11
|
+
## Validation and compatibility smoke
|
|
12
|
+
|
|
13
|
+
360 repository tests/lint/typecheck/build pass;6 focused gateway/profile tests pass. Live isolated read-only smoke used actual `z-ai/glm-5.3-flash`, returned by SiliconFlow;2 tool starts (read package.json, delivery_design guide), expected SMOKE_OK/fastify/authority none,13.951s,2 paid requests,$0.00234681 known,zero unresolved holds. Billed to existing smoke allowance; no ledger reset. Artifacts under `/home/baissi/benchmarks/glm-repo-pilot-v1/smoke-compatibility-harness`, summary `compatibility-smoke.log`.
|
|
14
|
+
|
|
15
|
+
This verifies basic tools/serialization, not full delivery or compaction. No task matrix has started or been frozen yet. Historical failures/holds preserved. Author validation, not independent review/remote CI.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# GLM 5.3 Flash — complete six-cell repository pilot results
|
|
2
|
+
|
|
3
|
+
## Outcome
|
|
4
|
+
|
|
5
|
+
All six planned cells attempted/evaluated. **Plain pi/vary is the only completed end-to-end delivery.** Four saved implementations (both plain, both Carthagent without Jev) pass all seven protected behavior categories, external TypeScript contract and94 original regressions. Passing these finite categories does not satisfy missing docs, broken candidate tests or unfinished final review. Both Jev-enabled cells never reached inspection: **zero Jev calls**, no efficacy comparison possible.
|
|
6
|
+
|
|
7
|
+
## Frozen conditions
|
|
8
|
+
|
|
9
|
+
Exact `z-ai/glm-5.3-flash`, high reasoning request; same pi0.85.1/Node26.7.0, pinned Fastify f15d4eaba03d86786bec2de7aed1236718c813f9, exact appendHeader/vary task contracts and evaluators. Updated planning-startup guide/checkpoints in treatments. One replicate/task/arm, order append plain/harness/Jev then vary Jev/harness/plain.900s/120 tool attempts/$2.30/100 paid requests, <=3 Jev,16,384 output tokens,400KB raw input. Native compaction30k threshold/6k recent. Protected evaluator unavailable during generation. Namespace isolation, no host credentials in child, local accounted broker. Official Node/RFC documentation frozen read-only, **not live web research or browser UI/full-stack tasks**.
|
|
10
|
+
|
|
11
|
+
Author-created feature tickets in a real384-file repository; prior task exposure means this is not new held-out validation. Changed generator AND startup guidance confound comparisons to DeepSeek. Provider routing varied substantially. No superiority or causal Jev claim.
|
|
12
|
+
|
|
13
|
+
Before execution: exact-model guide/read smoke succeeded; real native GLM compaction smoke succeeded;94 original tests passed inside sandbox. Frozen source/runtime/dependency/reference/system manifest verified unchanged after all six cells and before report additions. Freeze schema includes generator/prices. Source commits2cb89cd (GLM),8aa9546 (startup fixes),4480597 (execution protocol).
|
|
14
|
+
|
|
15
|
+
## Results
|
|
16
|
+
|
|
17
|
+
| Task | Arm | Actual stop | Seconds | Tools | Behavior | External types | Original regressions | Known cost | Unknown hold |
|
|
18
|
+
|---|---|---|---:|---:|---:|---|---|---:|---:|
|
|
19
|
+
| appendHeader | Plain pi |900s wall-time|900.290|24|7/7|Pass|94 pass|$0.0251503150|$0|
|
|
20
|
+
| appendHeader | Carthagent |900s wall-time, in-flight cancellation|900.277|66|7/7|Pass|94 pass|$0.1402945740|$0.15|
|
|
21
|
+
| appendHeader | Carthagent+Jev |180s provider deadline during compaction|548.458|20|1/7*|Missing API|94 unchanged-base pass|$0.0412539500|$0.15|
|
|
22
|
+
| vary | Plain pi |Completed|289.537|41|7/7|Pass|94 pass|$0.0219138100|$0|
|
|
23
|
+
| vary | Carthagent |900s wall-time, in-flight cancellation|900.257|50|7/7|Pass|94 pass|$0.0595476160|$0.15|
|
|
24
|
+
| vary | Carthagent+Jev |900s wall-time, in-flight cancellation|900.261|37|1/7*|Missing API|94 unchanged-base pass|$0.0779632455|$0.15|
|
|
25
|
+
|
|
26
|
+
* Unmodified base passes invalid-input category because missing-method invocation throws TypeError. This known base-selftest limitation is not implemented functionality; remaining positive categories fail. Do not score1/7 as useful product progress. Protected tests are finite, not exhaustive semantics/security/performance validation.
|
|
27
|
+
|
|
28
|
+
Raw runner calls in-flight wall-time cancellation `infrastructure-error` because its legacy classification prioritizes unknown billing. Preserve raw result; `resource:wall-time` and supervisor900s timer are the meaningful stop classification. No candidate hit input-byte/output-token/tool/request limits. Sum4439.080s sequential candidate runtime (~74min),238 tool starts.
|
|
29
|
+
|
|
30
|
+
## Candidate tests, docs and handoff
|
|
31
|
+
|
|
32
|
+
- **append/plain:** product runtime/types pass external checks. No requested docs update. Candidate `test/internals/reply-append-header.test.js` reports failures and hangs; supervisor20s process-group-bounded rerun timed out. Test directly constructs Reply with incomplete request context, uses t.plan with standalone node:assert, and contains HTTP tests with cleanup risks. Candidate originally ran unbounded shell pipelines around this suite, consuming much of wall time. No final answer.
|
|
33
|
+
- **append/harness:** implementation, docs and type tests present. Supervisor reran12 new unit tests, standalone HTTP probe and full tsd: all pass. Declared check evidence eventually all passing after initial typecheck failure. Planning revision4, approval obtained, final delivery_review inspect performed but no record/finish. Later boundary probes included incorrect assumptions (e.g. tab values treated as invalid though Node allows them) and consumed remaining time; cannot count as verified delivery.
|
|
34
|
+
- **vary/harness:** runtime and public type declaration pass external checks, but docs missing. New unit suite and4 HTTP tests fail assertion-plan accounting: t.plan counts test-context assertions, while candidate uses standalone node:assert, yielding zero counted assertions. Its declared type command fails TS1259 due to missing compatible compiler flag for an existing dependency. These are candidate test/configuration failures, not externally demonstrated feature failures. Revision2 approved; only baseline recorded in delivery_check evidence. Repeated progress calls used unrecognized string step identifiers against string-array steps, returning invalid index. No final review/finish.
|
|
35
|
+
- **vary/plain:** implementation, docs, type declarations/type tests,15 new runtime tests and final handoff. Supervisor reran15/15 and full tsd successfully. Actual full upstream borp rerun: **2,157 tests,2,152 passed,5 skipped,0 failed**, exit0. Candidate also ran this suite and lint; supervisor independently confirmed runtime suite, not every lint/markdown claim. An initial supervisor invocation guessed wrong borp path (`cli.js`) and failed MODULE_NOT_FOUND; retained separately, corrected to package's `borp.js` without modifying candidate. Not a candidate failure.
|
|
36
|
+
- **Both Jev arms:** no product implementation; schema/workflow repairs only. No inspect/approval or final delivery. No Jev call/charge/advice disposition.
|
|
37
|
+
|
|
38
|
+
No supervisor repaired candidates or fed evaluator output back. Supervisor test reruns happened after termination, under original sandbox, saved separately. Untracked test files retained and included in candidate checks; git diff --stat alone omits them.
|
|
39
|
+
|
|
40
|
+
## Planning/startup observations
|
|
41
|
+
|
|
42
|
+
First delivery_plan attempt at tool7 append/harness,10 append/Jev,5 vary/harness,10 vary/Jev. Unlike prior DeepSeek treatments, all attempted a plan. However two Jev-arm first plans needed retries; 'attempted' is not 'valid'. Cannot assign improvement solely to guide since model also changed.
|
|
43
|
+
|
|
44
|
+
- append/harness:13 design calls (2 guide/3 validate/2 inspect/4 review/2 approve),4 revision attempts; reached implementation.
|
|
45
|
+
- vary/harness:7 design calls (1 guide/2 validate/1 inspect/2 review/1 approve); reached implementation.
|
|
46
|
+
- append/Jev:missing acceptance, unknown patch field, missing revision reason and repeated schema repairs;3 validations,0 inspections. Provider timeout during later compaction.
|
|
47
|
+
- vary/Jev:authored optional workflow with invalid node types/references/effects, repeated rejected revisions,2 validations,0 inspections; wall-time exhausted.
|
|
48
|
+
- Successful native compactions: append plain0/harness3/Jev1; vary plain0/harness3/Jev3. No byte-overflow proves only these runs stayed below the local cap, not that context growth is solved.
|
|
49
|
+
|
|
50
|
+
Schema usability remains a bottleneck even with guide. Optional workflow authoring, per-scenario review shape and progress-step identifiers are concrete next simplification targets without weakening acceptance/evidence policy. Do not add probabilistic Jev syntax repair; neither Jev-enabled trajectory reached the existing semantic trigger. Their poorer outcome cannot have been caused by advice that never ran.
|
|
51
|
+
|
|
52
|
+
## Provider errors and continuation
|
|
53
|
+
|
|
54
|
+
After append/Jev request timed out at180s (`ABORTED`), matrix stopped. Supervisor inspected receipts and launched **only unstarted vary cells** via preserved `continue-vary.mjs`; no retry of interrupted candidate, no source/settings/task changes. This is a disclosed exploratory continuation. Native engine attempted locally refused calls after budget closure in some failures, not new upstream paid dispatches.
|
|
55
|
+
|
|
56
|
+
Returned GLM identity exact, endpoints included SiliconFlow,Z.AI,Fireworks,Relace,AtlasCloud,GMICloud,Phala,Together,InferenceNet,Novita,Modal,StreamLake. Vary/plain used Z.AI only; latency/cost comparisons confounded by routing. High reasoning requested; provider-reported reasoning token counts vary. No conclusion that all timeouts originate in model rather than provider path.
|
|
57
|
+
|
|
58
|
+
## Accounting
|
|
59
|
+
|
|
60
|
+
- Six GLM candidates known **$0.3661235105**, unknown reservations **$0.60**.
|
|
61
|
+
- GLM readiness known **$0.00699846** (basic smoke$0.00234681 + compaction$0.00465165).
|
|
62
|
+
- This GLM round conservative **$0.9731219705** including holds/readiness.
|
|
63
|
+
- Entire shared repository-pilot campaign (prior DeepSeek attempts+smokes+GLM): candidate known$0.6230796385, smoke known$0.0183102796, unknown candidate holds$1.35. **Known$0.6413899181 + held$1.35 = $1.9913899181**, within original announced$15.
|
|
64
|
+
|
|
65
|
+
Holds are not confirmed charges or free requests. No arbitrary release/account reset; not a vendor-wide spending cap. Earlier unrelated$27 campaign untouched.
|
|
66
|
+
|
|
67
|
+
## Findings and next step
|
|
68
|
+
|
|
69
|
+
GLM plus startup repairs gets Carthagent into implementation in two cells, but **zero Carthagent final deliveries**, only one final delivery overall. Plain pi remains strongest complete-delivery baseline in this sample. Jev efficacy remains entirely unmeasured. Do not run more paid matrices until schema/workflow friction and candidate testing/time management are addressed with reliable end-to-end fixtures; then rerun fresh tasks with repetitions and fixed/equally documented routing where feasible.
|
|
70
|
+
|
|
71
|
+
Artifacts: `/home/baissi/benchmarks/glm-repo-pilot-v1/{freeze.json,summary.json,matrix.log,continuation.log,continue-vary.mjs}`, each cell's events/sessions/workspace/invocation/gateway/result/evaluation/type/regression logs and post-run candidate-check receipts. Historical runs unchanged. Report is author analysis, not independent review; no PR/remote CI/merge claimed.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Graph-first discovery and compact delivery context
|
|
2
|
+
|
|
3
|
+
`code_nav` is a trusted read-only discovery tool; unknown custom tools remain locked. Discovery checkpoints count graph queries alongside reads/searches. The CLI forwards `--codegraph-max-files` (positive safe integer, default 8000) through the shared engine adapter.
|
|
4
|
+
|
|
5
|
+
Graph responses include results, returned/total counts, offset/nextOffset and current index coverage. `path` filters definition/symbol/caller call-site files; `container` filters declared containers or enclosing callers. Call edges remain name-based candidates, not resolved runtime bindings. Use pagination/filtering for incomplete results and source reads for authority. Parse/skip counts describe the current refresh; totalParseErrors/parsed/parseMs are cumulative. Unsupported and intentionally excluded files are outside coverage.
|
|
6
|
+
|
|
7
|
+
Permanent delivery guidance now contains concise invariants; discovery/design/implementation instructions are supplied by phase. The compact delivery prompt retains classification, approval, verification and truthful handoff obligations. Browser instructions are conditional on task/profile relevance. The software-delivery skill recommends graph lookup -> consumers -> targeted source reads, with grep for strings/config/SQL.
|
|
8
|
+
|
|
9
|
+
Context recovery separates a full exact-obligation checkpoint from current progress/findings/evidence. The outbound checkpoint retains its position while its source-history anchor remains. When compaction removes that anchor, restoration clears the cache, or contract identity changes, full obligations are restored. Stored session/report history and deterministic approval/freshness gates remain authoritative. This is not permission inferred from model memory.
|
|
10
|
+
|
|
11
|
+
## Pilot outcome
|
|
12
|
+
|
|
13
|
+
Follow-up adds advisory execution diagnostics after two/four consecutive failures and concise testing guidance against custom-loader overengineering, exit-masking pipelines, unrelated dependency changes and fake types. The repeat uses a natural user request with no benchmark/budget/test-technique hints; time/tool ceilings are external only. `/home/baissi/ctg_test/repeat-results.html` preserves the changed protocol. Neither repeat arm completed: updated timed out after core code (31/33 frozen checks, missing tests/docs), baseline ended before code on a malformed provider stream. No relative efficiency claim is justified; source review also found an auth-exception preservation gap missed by the evaluator.
|
|
14
|
+
|
|
15
|
+
A one-task old/new pilot lives at `/home/baissi/ctg_test/results.html`, with task, frozen source manifests, provider receipts, events and independent quality checks alongside it. Both runs hit the 900-second allowance before delivery_finish. New used more aggregate input and cost despite lower mean input per request; its custom test-loader debugging consumed additional turns. This does not demonstrate a completion-rate or total-cost improvement. Follow-up should focus on test infrastructure guidance and limiting unproductive probe/revision loops, then use repeated randomized trials. No paid rerun was silently substituted for the failed outcome.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Integrated Jev + repository pilot: plan and author challenge
|
|
2
|
+
|
|
3
|
+
User authorized implementation and execution. New campaign: at most $15 conservative total ($14 candidates, $1 diagnostics), no automatic retries or release of unknown holds. Preserve V1–V4. This is an exploratory pilot, not the held-out repeated suite.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
1. Advisor transport: extend built-in Jev adapter with explicit OpenRouter support; fixed public endpoint or explicit trusted loopback broker for credential isolation. Bounded response/time/input, no retries. Existing direct TypeSafe remains supported.
|
|
8
|
+
2. Planning orchestration: pure/advisory service records identity-bound attempts before network dispatch, max three/run; repeat inspect of identical run/revision/digest/source reuses receipt. Store advice in report and expose in recovery/status. Never changes gates, capture IDs, findings or requirements. Missing/bad configuration means unavailable, not clean advice. Explicit extension flags enable and choose provider; env key only used after opt-in. Benchmark uses this production path, not separate advisor extension.
|
|
9
|
+
3. Reviewer: compact instruction asks model to address >=0.5 topics in normal review, without making probability a defect or approval. No new compulsory review field that could fake comprehension.
|
|
10
|
+
4. Pilot runner: pinned real Node repository feasible without heavy DB services. Two additive feature tickets across public API/implementation/types/docs/regression tests. Three arms, one run/task/arm, balanced order, same engine/model/settings/limits, native compaction on. Plain/harness/Jev differences explicit. Online official reference retrieval equal in all arms; this is documentation access, not open-ended web research.
|
|
11
|
+
5. Evaluator: supervisor reference patch and wrong-implementation mutants; behavioral tests on unmodified base must fail, reference pass, mutants fail. Protected evaluation after frozen candidate. Relevant upstream baseline tests and candidate tests reported separately. Final delivery not inferred from external pass.
|
|
12
|
+
6. Execution: establish filesystem isolation for candidates and supervisor secrets/evaluators where possible using unprivileged user/mount namespaces; never claim sandbox without testing. Check source fingerprints/large repo compatibility, real installed engine, Jev, >100KB transport and native compaction before candidates. Freeze source/base/task/evaluator hashes before measured attempts.
|
|
13
|
+
|
|
14
|
+
## Challenges before coding (author review, not independent)
|
|
15
|
+
|
|
16
|
+
- No budget silently inherited: fresh exclusive campaign, explicit $15 ceiling including unresolved reservations.
|
|
17
|
+
- Jev availability does not prove plan quality; scores may miss defects and dispositions remain model-authored.
|
|
18
|
+
- Reading key only after explicit enable; no arbitrary configurable remote URLs/exfiltration or persisted credentials.
|
|
19
|
+
- Durable reservation before request avoids re-dispatch on resume; errors preserve attempt and no automatic retry.
|
|
20
|
+
- Full recovery must contain relevant advice identity/mode, but never duplicate full plan/provider responses.
|
|
21
|
+
- Tests must cover same-identity reuse, revisions/source identity, cap, disabled/missing keys, timeout, malformed values and no gate mutation.
|
|
22
|
+
- Real repository selection must be based on local feasibility, not treatment outcomes. Small library feature pilots are less representative than full commerce apps; report scope honestly.
|
|
23
|
+
- Native compaction enabled identically and billed; request byte ceiling remains separate, not 'fixed' by raising it.
|
|
24
|
+
- One replicate cannot establish Jev benefit. All failures/partial results retained, no repair after evaluator feedback.
|
|
25
|
+
- Environment failure stops pilot; no synthetic success or 'pi cannot handle it' assumption.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Fastify repository pilot protocol
|
|
2
|
+
|
|
3
|
+
Exploratory six-cell pilot, not a held-out repeated benchmark. Authorized by user to plan/implement/run. Total ceiling $15 ($14 candidates + $1 diagnostics), fresh campaign, unresolved reservations retained. Each cell $2.30 / 900s /120 admitted tools /100 paid requests including <=3 Jev, 16,384 output tokens, 400KB raw/402KB rebuilt input. No retry or post-evaluation repair.
|
|
4
|
+
|
|
5
|
+
## Selection and scope
|
|
6
|
+
|
|
7
|
+
Fastify v5.6.2, SHA `f15d4eaba03d86786bec2de7aed1236718c813f9`, MIT repository, 384 tracked files, 72,231 lines across tracked JS/TS (includes tests). Node26.7.0, pi0.85.1. Local dependency installation with scripts disabled, generated lock preserved and frozen. Full-stack commerce fixtures deferred due to machine capacity. Both tasks are additive library API maintenance: reply.appendHeader and reply.vary, requiring implementation, types, docs and regression tests. Exact acceptance in `tools/repo-pilot/tasks.mjs`.
|
|
8
|
+
|
|
9
|
+
Source: https://github.com/fastify/fastify/tree/f15d4eaba03d86786bec2de7aed1236718c813f9 . Author-created task contracts, not upstream tickets or claims these are desired upstream additions.
|
|
10
|
+
|
|
11
|
+
## Arms and order
|
|
12
|
+
|
|
13
|
+
append: plain -> harness -> Jev; vary: Jev -> harness -> plain. One replicate each; order partially balanced, no statistical efficacy claim. Same DeepSeek v4.1 flash/high through existing accounted gateway. Provider endpoint may vary; record it. Both Carthagent arms use new compact context; Jev arm uses **production built-in delivery flags**, not benchmark advisor.ts. No old-harness ablation, no causal attribution of context improvements versus changed tasks.
|
|
14
|
+
|
|
15
|
+
Same native compaction configuration in every candidate: enabled, 100k configured context, reserve70k/keepRecent6k (threshold30k). No custom model summarizer. Smoke uses lower threshold solely to demonstrate native compaction. All summarization paid requests charged to corresponding account.
|
|
16
|
+
|
|
17
|
+
## Documentation track
|
|
18
|
+
|
|
19
|
+
Official Node22.19 HTTP markdown and RFC9110 fetched over HTTPS, frozen with URL/SHA receipts, mounted read-only at /reference identically. Model uses normal read/grep before approval, avoiding a custom read-only tool bypass. This tests **frozen online-documentation use**, not live unrestricted web search. No web research superiority claim.
|
|
20
|
+
|
|
21
|
+
## Isolation
|
|
22
|
+
|
|
23
|
+
Unprivileged extracted Ubuntu bubblewrap0.6.1, no system installation. New user/PID/network/IPC/UTS namespaces, all capabilities dropped, private proc/dev/tmp, read-only engine/harness/dependencies/reference mounts, only candidate workspace/config/session/logs writable. Host home/auth, supervisor tests/reference patch, other runs and original repository are not mounted. Tested inaccessible paths explicitly. Network namespace has only loopback; local Unix-socket relay exposes accounted generator/Jev broker endpoints. No Internet/production service credentials passed. This is stronger isolation than historical same-user cwd separation, but not a formal adversarial sandbox security audit; shared kernel and broker are trusted. No cgroup RAM/CPU limit; one sequential run and supervisor deadline/process-group cleanup.
|
|
24
|
+
|
|
25
|
+
## Evaluation and readiness
|
|
26
|
+
|
|
27
|
+
Protected external evaluator mounted only after candidate termination. Seven runtime categories per task: order/normalization, raw-state compatibility, special header semantics, arrays/no-op, atomic invalid calls, real HTTP onSend/plugin integration, request independence. Supervisor reference patches: 7/7 each; unmodified base1/7 each; overwrite/case-sensitive mutants3/7 and5/7. Initial evaluator rejected permitted array output; fixed BEFORE freeze; original failed selftest retained.
|
|
28
|
+
|
|
29
|
+
External categories are finite behavioral coverage, not complete feature acceptance. Types/docs/new tests and upstream regressions must be scored separately. Relevant original tests mounted read-only for evaluator regression execution, preventing candidate weakening. Original test files still writable while developing; diff reports modifications. Full upstream suite/type suite may be candidate-run; disclose what actually ran.
|
|
30
|
+
|
|
31
|
+
Baseline original `node --test test/internals/reply.test.js test/internals/request.test.js` passed. Two erroneous tap-path invocations during setup retained, replaced with repository's actual Node test runner, no product test failures claimed for those commands.
|
|
32
|
+
|
|
33
|
+
Live sandbox smoke: built-in Jev advice on captured plan succeeded, no authority, all probabilities below0.5, expected blocked infrastructure handoff. Native pi compaction smoke recorded a real compaction at16,738 tokens then continued successfully. These are preflight, not measured task results. Current smoke known cost approximately$0.01132. Fresh-curl transport already covers exact large request wire behavior; focused transport tests rerun before freeze.
|
|
34
|
+
|
|
35
|
+
Freeze all lib/extensions/docs/skill/benchmark/pilot sources, reference docs, lock, bubblewrap and engine package identity; baseline tree SHA. Not every transitive installed dependency hashed in first draft; final readiness must bind mounted runtime/dependencies before dispatch. Candidate verifies freeze before launch. No source edits during matrix; post-run report additions intentionally occur after all candidates.
|
|
36
|
+
|
|
37
|
+
## Results required
|
|
38
|
+
|
|
39
|
+
Report each arm/task: external categories, protected regression outcome, types/docs/test changes, candidate test outcome, terminal final answer, harness verified/blocked status, Jev topics/dispositions, native compactions, costs/unknown holds, runtime/tool/resource stops. Include infrastructure failures and protocol deviations. No blanket 'Carthagent wins' based on one replicate or passing a subset.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Uniform pilot restart after hostname infrastructure defect
|
|
2
|
+
|
|
3
|
+
Initial root `/home/baissi/benchmarks/jev-repo-pilot` retained. Plain append external7/7 and types passed, but original94-test regression subset had localhost DNS failures because isolated `/etc/hosts` was absent. The initial baseline check was on host, not in the namespace: preflight gap. Do not count those as model failures. Harness append already running when discovered; manually terminated to avoid more invalid-environment spend. Its canceled in-flight request hold remains. Other four cells unstarted. Original freeze renamed `freeze-infrastructure-attempt.json` to prevent further dispatch before code changes.
|
|
4
|
+
|
|
5
|
+
Repair: mount minimal frozen `/etc/hosts` (127.0.0.1 and ::1 localhost) and `nsswitch.conf` (`hosts: files`), keeping network isolated. Original94 tests now pass INSIDE corrected sandbox (`/tmp/repo-sandbox-baseline.log`). No general DNS or egress enabled.
|
|
6
|
+
|
|
7
|
+
Uniform restart in `/home/baissi/benchmarks/jev-repo-pilot-v2`, fresh workspaces for all six cells. Same tasks/evaluators/model/arms/compaction/limits. Shared old campaign account, **no reset or release of unknown holds**, aggregate $15 unchanged. Setup directory referenced from first root; candidate cannot see this supervisor path. Source/runtime/dependency/doc/host-config hashes refrozen. All historical attempts reported separately. Evaluator feedback never given to any new candidate. No claim of preregistered confirmatory experiment.
|