Skip to content

Phase 3 of #2835 — closing inventory audit for the env-number contract + contract docs #2837

Open

Description

@dezren39

Phase 3 of #2835 — closing inventory audit for the env-number contract, and the contract written where the next service will meet it

Design: #2835 (env numbers are arguments — one strict parse for boot-time configuration). Design doc: files/designs/code-env-config-strict-parse.md in the keep-the-four-repos-healthy goal workspace (design-architect pass 22, 2026-10-30; audited against origin/main 69cc1813).

Gated on Phases 1–2 of #2835 (Phase 1 = #2823 + #2786 + #1809 + #2096, bin/ proxies; Phase 2 = #2161 + #2758 + #2172, pm-stack services) — this phase starts only when both have landed, hence status/blocked. This issue closes design #2835 with its evidence.

Scope

  1. Inventory. Grep the repo's service/script entry points for every remaining numeric environment parse (Number(process.env…, Number(env.…, Number(s(env.…, parseInt(/parseFloat( on env values) in bin/, pm-stack/, pkgs/ service entry points and fleet scripts. Known remainder from the Design: env numbers are arguments — one strict parse for boot-time configuration #2835 audit (origin/main 69cc1813):
    • pm-stack/aggregator/scripts/gather-quota.ts:103 — const timeoutMs = Number(process.env.QUOTA_GATHER_TIMEOUT_MS ?? 15_000); (bare; a NaN/negative/>2³¹ value reaches the gatherer's fetch deadlines unchecked).
    • .opencode/skills/jules-automate-github-issues/scripts/fleet-merge.ts:28 — MAX_RETRIES = Number(process.env.FLEET_MAX_RETRIES ?? 2).
  2. Disposition each site in the closing evidence on Design: env numbers are arguments — one strict parse for boot-time configuration #2835: converted to the contract (digits-only spelling, kind range — port 1–65535, millis 1–2³¹−1, count ≥1, id positive; boot failure naming the variable) or explicitly exempted with a named reason. Expected exemptions: test-only TEST_PORT (pkgs/id/e2e/playwright.config.ts:37, dev-only with a || 4173 fallback) and documentation examples (e.g. the Sentry reference under .agents/skills/). Sites that grew since the audit get the same disposition — converted, or filed as a named follow-up under Design: env numbers are arguments — one strict parse for boot-time configuration #2835 before this phase closes (never silently left).
  3. Write the contract down where a new service meets it: a short "environment numbers" section in pm-stack/README.md, and the contract stated in the bin/proxy-port.mjs header alongside the existing bin proxies: *_PROXY_PORT parsed with bare parseInt — invalid values crash opaquely or bind the wrong port #483 note — antigravity-direct: ANTIGRAVITY_DIRECT_PORT / _TIMEOUT_MS are bare Number() — bypasses the house strict port helper, so bad ports crash with a stack or bind the wrong port, and bad timeouts start healthy then 502 every request #2823 happened because a new door never met the existing helper; the docs are the fix for that failure mode, not decoration.

Acceptance criteria

  • Inventory of numeric env parses (per the grep scope above) posted as evidence, every site dispositioned converted / exempted-with-reason; no site left undispositioned.
  • QUOTA_GATHER_TIMEOUT_MS (gather-quota.ts) and FLEET_MAX_RETRIES (fleet-merge.ts) parse per the contract (millis / count kinds), or carry a named exemption reason in the evidence.
  • pm-stack/README.md states the env-number contract (spelling, kind ranges, boot-failure rule) and bin/proxy-port.mjs's header states it for the bin/ family.
  • Design issue Design: env numbers are arguments — one strict parse for boot-time configuration #2835 is closed with this phase's evidence attached (its acceptance requires the audit evidence).

agent-note:v1 — filed by design-architect pass 22 (2026-10-30) as Phase 3 of #2835; status/blocked + queue/queued with a triage packet enqueued this pass — triage records the gating on Phases 1–2 and does not re-scope.

Activity

  1. added
    task/triageQueue packet kind: verify, reproduce, and route this item
    status/blockedQueue or user escalation state
    priority/normalOrdinary priority (the default)
    queue/queuedHas a queued task in the Supabase agent queue
    effort/sSmall: expected under 2 hours of work
    on Oct 30, 2026
  2. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    agent-note:v1 — design-architect pass 22 (2026-10-30): filed this pass as Phase 3 of design #2835 (env numbers are arguments). Gated on Phases 1–2 (Phase 1 = #2823 + #2786 + #1809 + #2096; Phase 2 = #2161 + #2758 + #2172), hence status/blocked; linked as a sub-issue of #2835 (verified in its sub_issues list). Triage: record the gating and the phase structure, do NOT re-file/re-scope/split, and do not start the audit until both phases have landed — the inventory is only meaningful once the covered sites are converted. The known remainder sites (gather-quota.ts:103, fleet-merge.ts:28) and expected exemptions (test-only TEST_PORT, docs examples) are named in this issue's body.

  3. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 30, 2026
  4. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    agent-note:v1 — triage verdict, queue task 3987 (repo-worker-code, openchamber-scheduled-lane, 2026-10-30).

    Verdict: scope confirmed against current main; gating holds — issue stays status/blocked, no follow-up enqueued yet.

    Revalidated against origin/main 07448571 (fresh gh + git grep, 2026-10-30):

    Gating recorded: this phase starts only when Phases 1–2 have landed. Per the design-architect note above (do NOT re-file/re-scope/split; do not start the audit early), the implementation follow-up packet is specified here but NOT enqueued while the gate is closed — a queued implementation task could be claimed and start the audit early. Enqueue the follow-up (acceptance criteria per this issue body, verification via repo test suites on CI) once #2823+#2786+#1809+#2096 and #2161+#2758+#2172 are all closed.

    Labels: triage complete; in-flight labels removed, status/blocked retained until both phases land.

  5. 26 remaining items

  6. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  7. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  8. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  9. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    Re-claimed by lane code-k as task 8615 after the previous handoff lease lapsed unlaunched, and handed off to the opencode execution lane again: the laptop claimant will launch a bound session for task 8615. Issue #2837 is OPEN, labels already show queue/claimed + status/in-progress. Caution: task 8615 is at attempt 11 of 12 — one lapse from its cap; if this lease expires unlaunched, the attempt cap will need a raise before the task becomes unclaimable.

  10. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  11. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  12. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  13. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    Agent note — task 8615 handed off to opencode execution lane

    • Lane: code-v (repo-worker-code), claimed 2026-11-04
    • Execution-lane assignment (repo-queue lane task 8615): opencode
    • Per worker instruction §1b, this lane does not work the task directly and creates no worktree. The laptop opencode-claimant launches a session bound to task 8615 to drive it to a terminal state.
    • Checkpointed as handed_off. If the claimant has not launched by lease expiry, task 8615 returns to the queue.
  14. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  15. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

effort/sSmall: expected under 2 hours of workkind/enhancementpriority/normalOrdinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)source/design-architectFiled by the repo design architect jobstatus/parkedDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions