Skip to content

chore: consolidate completed Epic 172 stack into main - #319

Merged
Joncallim merged 601 commits into
mainfrom
codex/consolidate-epic172-main
Aug 2, 2026
Merged

chore: consolidate completed Epic 172 stack into main#319
Joncallim merged 601 commits into
mainfrom
codex/consolidate-epic172-main

Conversation

@Joncallim

Copy link
Copy Markdown
Owner

This is a history-consolidation merge for completed Epic 172 PRs #197 through #200. It does not add or rewrite product behavior.

Why this is needed: PR #197 reached main as a squash commit. The completed #198#200 stack therefore cannot fast-forward to main even though the original #197 tree and the current main tree are identical.

Merge evidence:

  • First parent: d435d2348e1686bf914865b8f8151d77bdbf5157 (current main)
  • Second parent: a0f4861a022b52a2705104e01b4119314aa4fd7d (completed final stack)
  • Integration commit: d2fb8caa9625f2b0352badcb62d05d560c4ab06a
  • Integration tree: eb0f0a4e8fbf496849eb10c87e852cdd1983c62d
  • The integration tree is byte-for-byte identical to the final-stack tree.

The merge resolved only duplicate-history conflicts caused by the PR #197 squash. All conflict results were taken from the already-reviewed final stack; the resulting tree equality check prevents incidental integration edits.

Local validation:

  • npx tsc --noEmit
  • npm run lint -- --max-warnings=0
  • npm run test:mcp:contract
  • npm run test:unit:zero-skip — 1,953 passed, 16 expected fixture skips
  • npm run build
  • git diff --check

The exact final-stack head a0f4861 previously passed Web CI and PR Contract. This draft requires fresh CI and review before main is advanced.

Joncallim added 30 commits July 28, 2026 03:49
test: run root privilege mutations in upgrade proof
test: use root owner for grant option mutation
test: bind root grantor to mutation session
test: close root reconciler grant options
test: close root reconciler column privileges
fix: align root write context schema metadata
test: fix ordinary app trigger proof inputs
test: prove root reconciler actor boundaries
fix: close root reconciler routine allowlist
…ability

test: isolate root reconciliation binding rejections
fix: support PostgreSQL 16 root privilege proof
test: prove root reconciler allowlist mutations
test: close root reconciler privilege allowlist
test: make root authority additions admissible
test: align root authority recovery fixture
test: bind root authority assertion inputs
test: distinguish root proof psql statuses
test: diagnose root proof psql failures
test: keep negative reconciliation inputs transactional
test: prove root reconciliation contention
fix: bind root negative assertion inputs
Joncallim added 26 commits July 31, 2026 04:39
fix: fence recovery actions and project approval CAS
fix(mcp): harden canonical task client presentation
fix(mcp): harden canonical runtime presentation
feat(mcp): render canonical task recovery state
# Conflicts:
#	.github/workflows/web-ci.yml
#	web/package.json
…ission-regression

[architecture] Define end-to-end MCP admission regression for #181
@Joncallim
Joncallim marked this pull request as ready for review August 2, 2026 18:19
@Joncallim
Joncallim merged commit 408fe51 into main Aug 2, 2026
4 checks passed
@Joncallim
Joncallim deleted the codex/consolidate-epic172-main branch August 2, 2026 18:22

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d2fb8caa96

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

|| question.sourcePlanVersion !== currentSource.sourcePlanVersion))) {
return NextResponse.json({ error: 'Clarification source is unavailable.' }, { status: 409 })
}
const appended = await appendArchitectClarificationAnswers(answers.map((answer) => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve a replan wake-up after persisting answers

When the final protected answers are committed here and the later redis.lpush('forge:answers', ...) fails, the request returns 500 but every question is already marked answered. A retry is then rejected by the status !== 'open' check, and neither worker startup nor the retry route scans answered awaiting_answers tasks, so the task remains stuck until manual intervention. Persist a durable outbox/queue occurrence with the answers, or let an idempotent retry enqueue the missing replan.

AGENTS.md reference: AGENTS.md:L30-L31

Useful? React with 👍 / 👎.

expect(result).toEqual({ code: 124, stderr: 'DEADLINE_EXCEEDED\n' })
descendantPid = Number(await readFile(descendantPidFile, 'utf8'))
expect(Number.isSafeInteger(descendantPid) && descendantPid > 0).toBe(true)
expect(() => process.kill(descendantPid!, 0)).toThrow()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Test descendant termination without requiring PID disappearance

In containers whose PID 1 does not reap orphaned processes, the deadline wrapper successfully sends SIGKILL to the process group but the descendant remains as a zombie, for which process.kill(pid, 0) still succeeds. I reproduced this as a defunct process and npm run test:unit:zero-skip consequently failed at this assertion (1952 tests passed, one failed). Check that the process is no longer running rather than requiring the PID to disappear, or structure the fixture so the descendant is reaped.

AGENTS.md reference: AGENTS.md:L139-L139

Useful? React with 👍 / 👎.

Comment on lines +673 to 675
detail: 'Ready packages execute in sandbox-only mode. Forge keeps generated files under .forge/task-runs for review and manual application; direct host repository writes are unavailable.',
label: 'Executable packages',
mode: 'opt_in_sandbox',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Describe ready packages as handoff-only

For every newly ready package without an existing handoff artifact, the dashboard now claims that Forge will execute it and generate files in .forge/task-runs. This commit makes execution unavailable—the worker's normal path creates a no-op handoff artifact, while an explicit execution request fails at the confined-materialization boundary—so operators are promised output that cannot be produced. Present this state as handoff-only or unavailable instead of executable sandbox mode.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant