Replace NodeJS dict aliases with maps and named field reads #24

Merged
temeddix merged 20 commits from honest-dict-types into main 2026-10-20 05:01:51 +00:00
Owner

PR #23 swapped Record<string, ...> for NodeJS.Dict<unknown> and NodeJS.ProcessEnv. Both are index-signature aliases, so they slip past no-index-signatures and no-utility-types without following the rules' intent. This PR swaps them for honest types:

  • Environments (sanitizedEnvironment, agentEnvironment, the runner's process env, prompt template values, test helpers) are now Map<string, string> / ReadonlyMap<string, string>. They become Object.fromEntries(...) only at the spawn/spawnSync env boundary, which adds no index-signature type of our own.
  • VERDICTS lookup table is now a Map.
  • JSON parsing: JsonObject is gone. isObject/isMapping now narrow to object, and a new field(value, name): unknown reads each known field by name. The parsers fill their declared interfaces (BotProfile, RuntimeOutcome, Anchor, ClaudeResult) from those reads, so nothing gets indexed through a dict type.
  • tests/workflow.test.ts: parsed YAML mappings, whose keys are dynamic, become Map<string, unknown>. Its JSON.stringify checks now stringify Object.fromEntries(...), because a Map would otherwise stringify to {}.

A focused src/common/json.test.ts covers field.

Lint: blacklist policy

vite.config.ts turns on every Oxlint category except nursery (correctness, suspicious, pedantic, perf, style, restriction). It enables each plugin through its all config and sets overrides: projectOverrides. scripts/project-lint.ts holds the repo rules, option tweaks, and offs, each with a one-line reason. It also holds projectOverrides: the Node code entry first, then the per-file exceptions, each with a reason.

  • Options: one-var "never", no-use-before-define { functions: false }, func-style declarations with arrows allowed, id-length single capital type parameters. Size limits are set to the smallest passing values: complexity 26, max-depth 6, max-lines-per-function 124, max-params 4, max-statements 32, import/max-dependencies 13, unicorn/max-nested-calls 4, max-lines 2048.
  • Off, decided 2026-10-19:
    • no-await-in-loop, because sequential awaits are intentional.
    • consistent-return, typescript/switch-exhaustiveness-check, and default-case, because TypeScript covers them; a forced default: would hide missing cases.
  • On:
    • typescript/promise-function-async with require-await/return-await, using the const x = await g(); return x; pattern.
    • init-declarations, using let x: T | null = null.
    • unicorn/no-array-reduce. The runtime profile setup, runProfiles, and the Codex login poll are back to main's plain loops.
    • unicorn/custom-error-definition. GiteaRequestError and AgentAuthError set name.
    • explicit-types/upper-snake-string-unions.
  • UPPER_SNAKE values:
    • Profile types are now CLAUDE/CODEX/OPENCODE, including in profiles.json and footers.
    • Failure reasons are SIGN_IN_FAILED/USAGE_EXHAUSTED/FAILED. toMessage() keeps the posted words.
    • Anchor side is NEW/OLD, as prompt.md now tells the agent. It maps to Gitea's new_position/old_position.
    • Explicit switch functions convert at each boundary: skillsAgent() for the skills installer, tokenVariable() for credential env names, and defaultModel().
  • Project plugin:
    • Adds prefer-ascii, no-nan, and the hugoalh ports from import-structure: no-duplicate-typeofs, no-empty-yield, no-unsafe-number, no-useless-continue, no-duplicate-interfaces, no-duplicate-types, no-useless-type, no-modifier-private. no-enum comes from explicit-types/no-enum in its all config, and no-duplicate-awaits/no-duplicate-voids are left out because unicorn/no-unnecessary-await and typescript/no-meaningless-void-operator cover them.
    • Everything stays in the single scripts/project-lint.ts.
  • Per-file exceptions:
    • src/processes/child.ts turns off promise-function-async. exitCode must return the promise it marks handled, or an async wrapper would reject unhandled before callers await it.
    • src/post/ and src/profiles/ (code and tests) turn off prefer-ascii, because posted text uses emoji verdict marks and a middle dot.
  • eslint-plugin-explicit-types is updated to 0.7.0.
  • The .agents/memory notes record these decisions. The new enum-values-upper-snake.md covers UPPER_SNAKE values.

Batch 4 decisions (2026-10-20)

  • vite.config.ts gets the apps' fmt block (printWidth: 80, quoteProps: "preserve", embeddedLanguageFormatting: "off"), and vp fmt rewraps the code. max-lines-per-function rises to 124, since postRuntime is longer at the narrower width.
  • unicorn/import-style is back to its default: import nodePath from "node:path" plus nodePath.join(...).
  • no-template-curly-in-string is on repo-wide. Only tests/workflow.test.ts, which checks literal Gitea ${{ }} expressions, is exempt in projectOverrides.
  • Off: unicorn/number-literal-case (Oxfmt lowercases hex digits back) and typescript/consistent-return (misfires on complete switches, like consistent-return).
  • These stay on with their defaults and need no code changes: prefer-object-spread, unicorn/prefer-spread, unicorn/no-useless-spread, typescript/no-misused-spread, no-plusplus, unicorn/no-array-method-this-argument, typescript/method-signature-style, typescript/unified-signatures.

vp check and vp test pass. No Rust here, so the serde UPPER_SNAKE item does not apply.

🤖 Generated with Claude Code

PR #23 swapped `Record<string, ...>` for `NodeJS.Dict<unknown>` and `NodeJS.ProcessEnv`. Both are index-signature aliases, so they slip past `no-index-signatures` and `no-utility-types` without following the rules' intent. This PR swaps them for honest types: - **Environments** (`sanitizedEnvironment`, `agentEnvironment`, the runner's process env, prompt template values, test helpers) are now `Map<string, string>` / `ReadonlyMap<string, string>`. They become `Object.fromEntries(...)` only at the `spawn`/`spawnSync` `env` boundary, which adds no index-signature type of our own. - **`VERDICTS`** lookup table is now a `Map`. - **JSON parsing**: `JsonObject` is gone. `isObject`/`isMapping` now narrow to `object`, and a new `field(value, name): unknown` reads each known field by name. The parsers fill their declared interfaces (`BotProfile`, `RuntimeOutcome`, `Anchor`, `ClaudeResult`) from those reads, so nothing gets indexed through a dict type. - **`tests/workflow.test.ts`**: parsed YAML mappings, whose keys are dynamic, become `Map<string, unknown>`. Its `JSON.stringify` checks now stringify `Object.fromEntries(...)`, because a `Map` would otherwise stringify to `{}`. A focused `src/common/json.test.ts` covers `field`. ## Lint: blacklist policy `vite.config.ts` turns on every Oxlint category except nursery (correctness, suspicious, pedantic, perf, style, restriction). It enables each plugin through its `all` config and sets `overrides: projectOverrides`. `scripts/project-lint.ts` holds the repo rules, option tweaks, and offs, each with a one-line reason. It also holds `projectOverrides`: the Node code entry first, then the per-file exceptions, each with a reason. - **Options:** `one-var` "never", `no-use-before-define` `{ functions: false }`, `func-style` declarations with arrows allowed, `id-length` single capital type parameters. Size limits are set to the smallest passing values: `complexity` 26, `max-depth` 6, `max-lines-per-function` 124, `max-params` 4, `max-statements` 32, `import/max-dependencies` 13, `unicorn/max-nested-calls` 4, `max-lines` 2048. - **Off, decided 2026-10-19:** - `no-await-in-loop`, because sequential awaits are intentional. - `consistent-return`, `typescript/switch-exhaustiveness-check`, and `default-case`, because TypeScript covers them; a forced `default:` would hide missing cases. - **On:** - `typescript/promise-function-async` with `require-await`/`return-await`, using the `const x = await g(); return x;` pattern. - `init-declarations`, using `let x: T | null = null`. - `unicorn/no-array-reduce`. The runtime profile setup, `runProfiles`, and the Codex login poll are back to main's plain loops. - `unicorn/custom-error-definition`. `GiteaRequestError` and `AgentAuthError` set `name`. - `explicit-types/upper-snake-string-unions`. - **UPPER_SNAKE values:** - Profile types are now `CLAUDE`/`CODEX`/`OPENCODE`, including in `profiles.json` and footers. - Failure reasons are `SIGN_IN_FAILED`/`USAGE_EXHAUSTED`/`FAILED`. `toMessage()` keeps the posted words. - Anchor `side` is `NEW`/`OLD`, as `prompt.md` now tells the agent. It maps to Gitea's `new_position`/`old_position`. - Explicit `switch` functions convert at each boundary: `skillsAgent()` for the skills installer, `tokenVariable()` for credential env names, and `defaultModel()`. - **Project plugin:** - Adds `prefer-ascii`, `no-nan`, and the hugoalh ports from import-structure: `no-duplicate-typeofs`, `no-empty-yield`, `no-unsafe-number`, `no-useless-continue`, `no-duplicate-interfaces`, `no-duplicate-types`, `no-useless-type`, `no-modifier-private`. `no-enum` comes from `explicit-types/no-enum` in its `all` config, and `no-duplicate-awaits`/`no-duplicate-voids` are left out because `unicorn/no-unnecessary-await` and `typescript/no-meaningless-void-operator` cover them. - Everything stays in the single `scripts/project-lint.ts`. - **Per-file exceptions:** - `src/processes/child.ts` turns off `promise-function-async`. `exitCode` must return the promise it marks handled, or an async wrapper would reject unhandled before callers await it. - `src/post/` and `src/profiles/` (code and tests) turn off `prefer-ascii`, because posted text uses emoji verdict marks and a middle dot. - `eslint-plugin-explicit-types` is updated to 0.7.0. - The `.agents/memory` notes record these decisions. The new `enum-values-upper-snake.md` covers UPPER_SNAKE values. ## Batch 4 decisions (2026-10-20) - `vite.config.ts` gets the apps' `fmt` block (`printWidth: 80`, `quoteProps: "preserve"`, `embeddedLanguageFormatting: "off"`), and `vp fmt` rewraps the code. `max-lines-per-function` rises to 124, since `postRuntime` is longer at the narrower width. - `unicorn/import-style` is back to its default: `import nodePath from "node:path"` plus `nodePath.join(...)`. - `no-template-curly-in-string` is on repo-wide. Only `tests/workflow.test.ts`, which checks literal Gitea `${{ }}` expressions, is exempt in `projectOverrides`. - Off: `unicorn/number-literal-case` (Oxfmt lowercases hex digits back) and `typescript/consistent-return` (misfires on complete switches, like `consistent-return`). - These stay on with their defaults and need no code changes: `prefer-object-spread`, `unicorn/prefer-spread`, `unicorn/no-useless-spread`, `typescript/no-misused-spread`, `no-plusplus`, `unicorn/no-array-method-this-argument`, `typescript/method-signature-style`, `typescript/unified-signatures`. `vp check` and `vp test` pass. No Rust here, so the serde UPPER_SNAKE item does not apply. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
temeddix added 1 commit 2026-10-18 17:31:11 +00:00
Replace NodeJS dict aliases with maps and named field reads
Agents / agent (pull_request) Has been skipped
Check / check (pull_request) Successful in 49s
c8ffb9cc6f
Author
Owner
@bot
bot approved these changes 2026-10-18 17:34:18 +00:00
Dismissed
bot left a comment
Owner

✅ Approved
Map-based environment and JSON field access preserve the action behavior while removing the prohibited dictionary aliases.

Strengths

Typed boundaries
  • Converts maps to objects only at child-process environment boundaries.
  • Retains explicit validation for parsed external data.

Issues

None

No Critical, Important, or Minor findings.

Recommendations

None

No follow-up recommendations.

Declined to judge

None

No behavior was set aside.

Checks

Passed
  • Gitea Check / check (pull_request)
  • npm exec -- vp check
  • npm exec -- vp test — 64 passed, 5 skipped

Profile: codex · gpt-5.6-terra

✅ Approved Map-based environment and JSON field access preserve the action behavior while removing the prohibited dictionary aliases. ## Strengths <details> <summary>Typed boundaries</summary> - Converts maps to objects only at child-process environment boundaries. - Retains explicit validation for parsed external data. </details> ## Issues <details> <summary>None</summary> No Critical, Important, or Minor findings. </details> ## Recommendations <details> <summary>None</summary> No follow-up recommendations. </details> ## Declined to judge <details> <summary>None</summary> No behavior was set aside. </details> ## Checks <details> <summary>Passed</summary> - Gitea `Check / check (pull_request)` - `npm exec -- vp check` - `npm exec -- vp test` — 64 passed, 5 skipped </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 1 commit 2026-10-19 02:26:56 +00:00
Author
Owner
@bot
bot approved these changes 2026-10-19 02:29:53 +00:00
Dismissed
bot left a comment
Owner

✅ Approved

  • Maps and named JSON-field reads preserve the stated behavior and remove the prohibited dictionary aliases.

Strengths

Typed boundaries
  • Converts environment maps only at child-process boundaries.
  • Retains validation before parsed data enters declared interfaces.

Issues

None

No Critical, Important, or Minor findings.

Recommendations

None

No follow-up recommendations.

Declined to judge

None

No behavior was set aside.

Checks

Passed
  • npm exec -- vp check
  • npm exec -- vp test — 64 passed, 5 skipped
  • Required Gitea check on d09806d

Profile: codex · gpt-5.6-terra

✅ Approved - Maps and named JSON-field reads preserve the stated behavior and remove the prohibited dictionary aliases. ## Strengths <details> <summary>Typed boundaries</summary> - Converts environment maps only at child-process boundaries. - Retains validation before parsed data enters declared interfaces. </details> ## Issues <details> <summary>None</summary> No Critical, Important, or Minor findings. </details> ## Recommendations <details> <summary>None</summary> No follow-up recommendations. </details> ## Declined to judge <details> <summary>None</summary> No behavior was set aside. </details> ## Checks <details> <summary>Passed</summary> - `npm exec -- vp check` - `npm exec -- vp test` — 64 passed, 5 skipped - Required Gitea check on `d09806d` </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 1 commit 2026-10-19 05:20:33 +00:00
Author
Owner
@bot
bot approved these changes 2026-10-19 05:25:09 +00:00
Dismissed
bot left a comment
Owner

✅ Approved

  • Maps and named JSON-field reads preserve behavior while removing prohibited dictionary aliases.

Strengths

Typed boundaries
  • Converts environments back to objects only at child-process boundaries.
  • Retains validation before external values enter declared interfaces.

Issues

None

No Critical, Important, or Minor findings.

Checks

Passed
  • npm exec -- vp check
  • npm exec -- vp test — 64 passed, 5 skipped
  • Required Gitea check on df66bea

Declined to judge

None

No behavior was set aside.

Profile: codex · gpt-5.6-terra

✅ Approved - Maps and named JSON-field reads preserve behavior while removing prohibited dictionary aliases. ## Strengths <details> <summary>Typed boundaries</summary> - Converts environments back to objects only at child-process boundaries. - Retains validation before external values enter declared interfaces. </details> ## Issues <details> <summary>None</summary> No Critical, Important, or Minor findings. </details> ## Checks <details> <summary>Passed</summary> - `npm exec -- vp check` - `npm exec -- vp test` — 64 passed, 5 skipped - Required Gitea check on `df66bea` </details> ## Declined to judge <details> <summary>None</summary> No behavior was set aside. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 1 commit 2026-10-19 07:50:07 +00:00
Author
Owner
@bot
bot approved these changes 2026-10-19 07:57:47 +00:00
Dismissed
bot left a comment
Owner

✅ Approved

  • Map boundaries, named field reads, and lint configuration match the PR requirements.

Strengths

Safe boundaries
  • Environment maps convert to objects only at process-spawn boundaries.
  • Parsed external data remains validated before use.

Issues

None

No Critical, Important, or Minor findings.

Checks

Passed
  • Gitea Check / check (pull_request) on f2de920
  • npx vp check
  • npx vp test — 64 passed, 5 skipped

Declined to judge

None

No behavior was set aside.

Profile: codex · gpt-5.6-terra

✅ Approved - Map boundaries, named field reads, and lint configuration match the PR requirements. ## Strengths <details> <summary>Safe boundaries</summary> - Environment maps convert to objects only at process-spawn boundaries. - Parsed external data remains validated before use. </details> ## Issues <details> <summary>None</summary> No Critical, Important, or Minor findings. </details> ## Checks <details> <summary>Passed</summary> - Gitea `Check / check (pull_request)` on `f2de920` - `npx vp check` - `npx vp test` — 64 passed, 5 skipped </details> ## Declined to judge <details> <summary>None</summary> No behavior was set aside. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 7 commits 2026-10-19 10:49:44 +00:00
Author
Owner
@bot
bot approved these changes 2026-10-19 10:52:52 +00:00
Dismissed
bot left a comment
Owner

✅ Approved

  • Map-based boundaries and named JSON reads meet the PR requirements.

Strengths

Safe typed boundaries
  • Converts environment maps to objects only at child-process boundaries.
  • Retains validation before external values enter declared interfaces.

Issues

None

No Critical, Important, or Minor findings.

Checks

Passed
  • Gitea Check / check (pull_request) on 8b9aedf
  • npx vp check
  • npx vp test — 64 passed, 5 skipped

Declined to judge

None

No behavior was set aside.

Profile: codex · gpt-5.6-terra

✅ Approved - Map-based boundaries and named JSON reads meet the PR requirements. ## Strengths <details> <summary>Safe typed boundaries</summary> - Converts environment maps to objects only at child-process boundaries. - Retains validation before external values enter declared interfaces. </details> ## Issues <details> <summary>None</summary> No Critical, Important, or Minor findings. </details> ## Checks <details> <summary>Passed</summary> - Gitea `Check / check (pull_request)` on `8b9aedf` - `npx vp check` - `npx vp test` — 64 passed, 5 skipped </details> ## Declined to judge <details> <summary>None</summary> No behavior was set aside. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 1 commit 2026-10-19 14:37:01 +00:00
State the agreed reason for turning default-case off
Check / check (pull_request) Successful in 58s
d0cf8b93cb
Author
Owner

@bot review

@bot review
bot approved these changes 2026-10-19 14:42:37 +00:00
Dismissed
bot left a comment
Owner

✅ Approved
Summary: Map-based dynamic data and named JSON-field reads are applied consistently; required checks pass.

Strengths

Issues

Recommendations

Assessment

Strengths
  • Replaces index-signature aliases at dynamic-key boundaries while keeping process environment conversion confined to spawn boundaries.
  • Updates serialized profile, failure, and anchor labels consistently with their explicit runtime boundary conversions.
Issues
  • Critical: none.
  • Important: none.
  • Minor: none.
Recommendations
  • None.
Declined to judge
  • None.
Assessment
  • Ready to merge: Yes.
  • npm exec -- vp check and npm exec -- vp test pass on d0cf8b93cba38c96241a8d26cf80435eef3abd6b.

Profile: codex · gpt-5.6-terra

✅ Approved Summary: Map-based dynamic data and named JSON-field reads are applied consistently; required checks pass. ### Strengths ### Issues ### Recommendations ### Assessment <details> <summary>Strengths</summary> - Replaces index-signature aliases at dynamic-key boundaries while keeping process environment conversion confined to spawn boundaries. - Updates serialized profile, failure, and anchor labels consistently with their explicit runtime boundary conversions. </details> <details> <summary>Issues</summary> - Critical: none. - Important: none. - Minor: none. </details> <details> <summary>Recommendations</summary> - None. </details> <details> <summary>Declined to judge</summary> - None. </details> <details> <summary>Assessment</summary> - Ready to merge: Yes. - `npm exec -- vp check` and `npm exec -- vp test` pass on `d0cf8b93cba38c96241a8d26cf80435eef3abd6b`. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 1 commit 2026-10-19 16:27:55 +00:00
Author
Owner

@bot review

@bot review
bot approved these changes 2026-10-19 16:36:02 +00:00
Dismissed
bot left a comment
Owner

✅ Approved
Map-based dynamic data and named JSON reads meet the PR requirements; checks pass.

Strengths

Safe boundaries
  • Environment maps become plain objects only at process-spawn boundaries.
  • Parsed external data is validated before entering declared interfaces.

Issues

None
  • Critical: none.
  • Important: none.
  • Minor: none.

Recommendations

None
  • None.

Assessment

Ready to merge
  • Yes.
  • npx vp check passed.
  • npx vp test passed: 64 tests, 5 skipped.
  • Required Gitea check passed on 41a9c62.

Declined to judge

None
  • None.

Profile: codex · gpt-5.6-terra

✅ Approved Map-based dynamic data and named JSON reads meet the PR requirements; checks pass. ## Strengths <details> <summary>Safe boundaries</summary> - Environment maps become plain objects only at process-spawn boundaries. - Parsed external data is validated before entering declared interfaces. </details> ## Issues <details> <summary>None</summary> - Critical: none. - Important: none. - Minor: none. </details> ## Recommendations <details> <summary>None</summary> - None. </details> ## Assessment <details> <summary>Ready to merge</summary> - Yes. - `npx vp check` passed. - `npx vp test` passed: 64 tests, 5 skipped. - Required Gitea check passed on `41a9c62`. </details> ## Declined to judge <details> <summary>None</summary> - None. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 5 commits 2026-10-19 16:53:41 +00:00
Author
Owner
@bot
bot approved these changes 2026-10-19 17:00:38 +00:00
Dismissed
bot left a comment
Owner

✅ Approved
Map-based dynamic values and named JSON reads meet the PR requirements; current-head checks pass.

Strengths

Safe boundaries
  • Environment maps become objects only at process-spawn boundaries.
  • External JSON remains validated before it reaches declared interfaces.

Issues

None
  • Critical: none.
  • Important: none.
  • Minor: none.

Recommendations

None
  • None.

Assessment

Ready to merge
  • Yes.
  • npm exec -- vp check passed.
  • npm exec -- vp test passed: 65 passed, 5 skipped.
  • Required Gitea Check / check (pull_request) passed on ca619888b2af14a0ee8593bfe9f23c0ed86b5c30.

Declined to judge

None
  • None.

Profile: codex · gpt-5.6-terra

✅ Approved Map-based dynamic values and named JSON reads meet the PR requirements; current-head checks pass. ## Strengths <details> <summary>Safe boundaries</summary> - Environment maps become objects only at process-spawn boundaries. - External JSON remains validated before it reaches declared interfaces. </details> ## Issues <details> <summary>None</summary> - Critical: none. - Important: none. - Minor: none. </details> ## Recommendations <details> <summary>None</summary> - None. </details> ## Assessment <details> <summary>Ready to merge</summary> - Yes. - `npm exec -- vp check` passed. - `npm exec -- vp test` passed: 65 passed, 5 skipped. - Required Gitea `Check / check (pull_request)` passed on `ca619888b2af14a0ee8593bfe9f23c0ed86b5c30`. </details> ## Declined to judge <details> <summary>None</summary> - None. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 1 commit 2026-10-20 00:27:57 +00:00
Apply batch 4 lint decisions and deno fmt settings
Check / check (pull_request) Successful in 56s
a429e6ffd0
Author
Owner
@bot
bot approved these changes 2026-10-20 00:33:02 +00:00
Dismissed
bot left a comment
Owner

✅ Approved
Map-based dynamic data, named JSON reads, and documented lint policy updates meet the PR requirements.

Strengths

Issues

Recommendations

Assessment

Typed boundaries
  • The Map conversions and named JSON reads keep untrusted values checked at their boundaries.
Policy alignment
  • The per-file lint exceptions are documented in the current repository guidance and have explicit reasons.
Issues
  • Critical: none.
  • Important: none.
  • Minor: none.
Recommendations
  • None.
Checks
  • npm exec -- vp check passed.
  • npm exec -- vp test passed: 65 tests; 5 skipped.
  • Required Gitea check passed on a429e6f.
Declined to judge
  • None.
Assessment
  • Ready to merge: Yes.

Profile: codex · gpt-5.6-terra

✅ Approved Map-based dynamic data, named JSON reads, and documented lint policy updates meet the PR requirements. ## Strengths ## Issues ## Recommendations ## Assessment <details> <summary>Typed boundaries</summary> - The Map conversions and named JSON reads keep untrusted values checked at their boundaries. </details> <details> <summary>Policy alignment</summary> - The per-file lint exceptions are documented in the current repository guidance and have explicit reasons. </details> <details> <summary>Issues</summary> - Critical: none. - Important: none. - Minor: none. </details> <details> <summary>Recommendations</summary> - None. </details> <details> <summary>Checks</summary> - `npm exec -- vp check` passed. - `npm exec -- vp test` passed: 65 tests; 5 skipped. - Required Gitea check passed on `a429e6f`. </details> <details> <summary>Declined to judge</summary> - None. </details> <details> <summary>Assessment</summary> - Ready to merge: Yes. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix added 1 commit 2026-10-20 00:56:37 +00:00
Bump explicit-types and import-structure lint plugins
Check / check (pull_request) Successful in 1m48s
6503d3beda
Author
Owner
@bot
bot approved these changes 2026-10-20 01:04:09 +00:00
bot left a comment
Owner

✅ Approved
Map-based dynamic values, named JSON reads, and the lint-policy update meet the PR requirements; checks pass.

Strengths

Issues

Recommendations

Assessment

Typed boundaries
  • Environments become plain objects only at process-spawn boundaries.
  • Parsed external values are validated before entering declared interfaces.
Issues
  • Critical: none.
  • Important: none.
  • Minor: none.
Recommendations
  • None.
Checks
  • Gitea Check / check (pull_request) passed on 6503d3b.
  • npx vp check passed.
  • npx vp test passed: 65 tests; 5 skipped.
Declined to judge
  • None.
Assessment
  • Ready to merge: Yes.

Profile: codex · gpt-5.6-terra

✅ Approved Map-based dynamic values, named JSON reads, and the lint-policy update meet the PR requirements; checks pass. ## Strengths ## Issues ## Recommendations ## Assessment <details> <summary>Typed boundaries</summary> - Environments become plain objects only at process-spawn boundaries. - Parsed external values are validated before entering declared interfaces. </details> <details> <summary>Issues</summary> - Critical: none. - Important: none. - Minor: none. </details> <details> <summary>Recommendations</summary> - None. </details> <details> <summary>Checks</summary> - Gitea `Check / check (pull_request)` passed on `6503d3b`. - `npx vp check` passed. - `npx vp test` passed: 65 tests; 5 skipped. </details> <details> <summary>Declined to judge</summary> - None. </details> <details> <summary>Assessment</summary> - Ready to merge: Yes. </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix merged commit 063eb09750 into main 2026-10-20 05:01:51 +00:00
temeddix deleted branch honest-dict-types 2026-10-20 05:01:51 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: commons/bot-agents#24