diff --git a/TODO.md b/TODO.md index a999eb8c..33305bd1 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,10 @@ ## Active tickets +- [ ] [`ticket-090`](project/ticket-090/README.md) — make the default offline + test command independent of ambient SubLLM credentials. Current state: + `IN_PROGRESS / PUBLICATION`; workstream: `integration`. + - [ ] [`ticket-088`](project/ticket-088/README.md) — prevent overlapping projections of one source sentence from creating a false blocking polarity contradiction. Current state: `IN_PROGRESS / EDIT`; workstream: `core-dsl`. diff --git a/package.json b/package.json index ef295130..0cf2e218 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "scripts": { "build": "tsc -p tsconfig.json", "check": "tsc -p tsconfig.json --noEmit", - "test": "node --test --test-concurrency=4 dist/test/*.test.js", + "test": "T2C_USE_SUBLLM=false node --test --test-concurrency=4 dist/test/*.test.js", "verify:no-llm": "node scripts/verify-no-llm-imports.mjs", "verify:modules": "node scripts/verify-module-boundaries.mjs", "verify:env": "node scripts/verify-env-contract.mjs", diff --git a/project/TICKETS.md b/project/TICKETS.md index d4758fd9..27c66ed5 100644 --- a/project/TICKETS.md +++ b/project/TICKETS.md @@ -63,4 +63,6 @@ of `project/README.md`, which remains a generated technical-analysis artifact. | **ticket-085** | [`README.md`](./ticket-085/README.md) | [`preprompt.md`](./ticket-085/preprompt.md) | - | [`ai-codex.md`](./ticket-085/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-085/ai-codex-logs.txt) | [`changelog.md`](./ticket-085/changelog.md) | | **ticket-087** | [`README.md`](./ticket-087/README.md) | [`preprompt.md`](./ticket-087/preprompt.md) | - | [`ai-codex.md`](./ticket-087/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-087/ai-codex-logs.txt) | [`changelog.md`](./ticket-087/changelog.md) | | **ticket-088** | [`README.md`](./ticket-088/README.md) | [`preprompt.md`](./ticket-088/preprompt.md) | - | [`ai-codex.md`](./ticket-088/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-088/ai-codex-logs.txt) | [`changelog.md`](./ticket-088/changelog.md) | +| **ticket-090** | [`README.md`](./ticket-090/README.md) | [`preprompt.md`](./ticket-090/preprompt.md) | - | [`ai-codex.md`](./ticket-090/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-090/ai-codex-logs.txt) | [`changelog.md`](./ticket-090/changelog.md) | +| **ticket-091** | [`README.md`](./ticket-091/README.md) | [`preprompt.md`](./ticket-091/preprompt.md) | - | [`ai-codex.md`](./ticket-091/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-091/ai-codex-logs.txt) | [`changelog.md`](./ticket-091/changelog.md) | diff --git a/project/ticket-090/README.md b/project/ticket-090/README.md new file mode 100644 index 00000000..a1c03488 --- /dev/null +++ b/project/ticket-090/README.md @@ -0,0 +1,26 @@ +# Ticket 090: Hermetic test routing for SubLLM default + +- **ID**: ticket-090 +- **Owner**: agent:codex under SESSION_EXECUTION_AUTHORIZATION +- **Status**: IN_PROGRESS +- **Workflow state**: PUBLICATION +- **Created**: 2026-08-26 + +## Goal and scope + +Keep unit and gold-evaluation suites deterministic when production uses +SubLLM. The default test command explicitly selects the compatibility fixture +transport, while SubLLM bridge tests opt in independently and continue to +exercise direct Z.AI GLM 5.3. + +## Acceptance criteria + +- [x] AC-01: Scope is approved by the Founder in the originating request. +- [x] AC-02: `npm test` has a hermetic `T2C_USE_SUBLLM=false` environment. +- [x] AC-03: SubLLM bridge tests explicitly opt in and still verify direct Z.AI GLM 5.3. +- [x] AC-04: Full Node and governance verification passes before publication. + +## Participants + +- Human participant: Founder approval captured in the originating request; no user-* file was created. +- Agent participant: [ai-codex.md](ai-codex.md) diff --git a/project/ticket-090/ai-codex-logs.txt b/project/ticket-090/ai-codex-logs.txt new file mode 100644 index 00000000..3286c054 --- /dev/null +++ b/project/ticket-090/ai-codex-logs.txt @@ -0,0 +1,4 @@ +2026-08-26T09:35:00+02:00 +SESSION_EXECUTION_AUTHORIZATION recorded. +planned validation: npm run build; npm test; ./project/governance-check.sh; git diff --check. +prior equivalent worktree validation: 429 tests, 428 passed, 1 skipped, 0 failed. diff --git a/project/ticket-090/ai-codex.md b/project/ticket-090/ai-codex.md new file mode 100644 index 00000000..a62032e3 --- /dev/null +++ b/project/ticket-090/ai-codex.md @@ -0,0 +1,28 @@ +--- +participant-id: agent:codex +participant: codex +role: agent +ticket: ticket-090 +--- +# Participant: codex (AI agent) + +## Understanding + +Production may default to SubLLM, while the offline test suite must remain +deterministic regardless of credentials inherited from the developer or CI +environment. + +## Execution plan + +1. Pin only the default test process to the explicit compatibility route. +2. Preserve independent SubLLM bridge coverage. +3. Run the complete repository verification and governance checks. + +## Actual changes + +- Made the test command explicitly hermetic with `T2C_USE_SUBLLM=false`. +- Kept production and explicit SubLLM bridge tests unchanged. + +## Blockers + +- None. diff --git a/project/ticket-090/changelog.md b/project/ticket-090/changelog.md new file mode 100644 index 00000000..965be3ed --- /dev/null +++ b/project/ticket-090/changelog.md @@ -0,0 +1,6 @@ +# Ticket Changelog (ticket-090) + +## [0.1.0] - 2026-08-26 + +- Isolated offline tests from ambient SubLLM credentials. +- Preserved explicit direct Z.AI GLM 5.3 bridge coverage. diff --git a/project/ticket-090/intent.json b/project/ticket-090/intent.json new file mode 100644 index 00000000..1d408ec0 --- /dev/null +++ b/project/ticket-090/intent.json @@ -0,0 +1,80 @@ +{ + "schema": "new-project.intent/v3", + "ticket": "ticket-090", + "summary": "Hermetic test routing for SubLLM default", + "workstream": "integration", + "classification": { + "kind": "SERVICE", + "priority": "P1", + "origin": "health" + }, + "allowedPaths": [ + "package.json", + "project/ticket-090/**", + "TODO.md", + "project/TICKETS.md" + ], + "forbiddenPaths": [ + "project/ticket-*/user-*.md" + ], + "stacks": [ + "node", + "typescript", + "subllm", + "ci" + ], + "dependsOn": [], + "conflictsWith": [], + "integrationTicket": null, + "delivery": { + "acceptedBaseSha": "a85f57365eb352be6fd39cf649e31dba6729e633", + "targetBranch": "main", + "outcome": "Make the offline test command independent of ambient SubLLM credentials", + "nonGoals": [ + "Change production LLM routing", + "Change SubLLM policy" + ], + "complexity": "XS", + "estimatedMinutes": 5, + "budgets": { + "maxImplementationFiles": 3, + "maxAffectedComponents": 1, + "maxPublicInterfaceChanges": 0, + "maxRuntimeDependencies": 0 + }, + "architecture": { + "status": "accepted", + "decision": "Set the explicit legacy compatibility opt-out only on the offline npm test process", + "components": [ + { + "name": "test-runtime", + "paths": [ + "package.json" + ] + } + ], + "responsibilityChanges": false, + "interfaceChanges": [], + "dataChanges": [], + "ui": { + "impact": "none", + "states": [], + "evidence": [] + }, + "rollback": "Revert the package test command change" + }, + "runtimeDependencies": [], + "validation": [ + { + "criterion": "AC-04", + "commands": [ + "npm run build", + "npm test", + "./project/governance-check.sh", + "git diff --check" + ], + "evidence": "project/ticket-090/ai-codex-logs.txt" + } + ] + } +} diff --git a/project/ticket-090/preprompt.md b/project/ticket-090/preprompt.md new file mode 100644 index 00000000..5c25d9f9 --- /dev/null +++ b/project/ticket-090/preprompt.md @@ -0,0 +1,8 @@ +# Ticket preprompt + +- **Task ID**: ticket-090 +- **Task title**: Hermetic test routing for SubLLM default +- **Created**: 2026-08-26T06:20:04Z + +Keep executable implementation outside this governance/evidence directory. +Read a human-owned user-*.md file only when one exists.