Skip to content

[codex] Polish beta context workspace flow#1136

Merged
TabishB merged 4 commits into
mainfrom
codex/beta-context-workspace-polish
May 28, 2026
Merged

[codex] Polish beta context workspace flow#1136
TabishB merged 4 commits into
mainfrom
codex/beta-context-workspace-polish

Conversation

@TabishB

@TabishB TabishB commented May 28, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Move context-store setup defaults into managed local storage and document the beta first-run path.
  • Make workspace open initiative-aware, including lazy workspace creation, linked repo prompts, clearer opener behavior, and Codex CLI sandbox handling.
  • Clean up generated workspace shape so workspaces are local views, not repo-like planning homes.
  • Add beta guide/playbook docs plus manual beta pass work items and reordered follow-up roadmap items.

Why

The manual beta pass exposed first-run friction around where context stores are created, how users discover initiatives from workspace open, how Codex receives writable roots, and whether workspaces appear to own durable planning artifacts. This keeps the beta flow oriented around context stores/initiatives as shared context and workspaces as local views.

Validation

  • pnpm run build
  • pnpm run lint
  • pnpm exec vitest run test/commands/context-store.test.ts test/commands/workspace.interactive.test.ts test/commands/workspace-initiative-open.test.ts test/commands/workspace-open.test.ts test/commands/workspace.test.ts test/core/context-store/foundation.test.ts test/core/workspace/foundation.test.ts test/core/workspace/legacy-state.test.ts test/core/planning-home.test.ts test/commands/artifact-workflow.test.ts

Summary by CodeRabbit

  • Documentation

    • CLI docs now use the codex-cli identifier; VS Code workspace ordering/behavior and context-store defaults clarified; many beta guides, playbooks, roadmap and work-item docs added/updated.
  • New Features

    • Initiative-backed workspace open flow and initiative selection in the open picker; created local initiative-backed workspace views.
    • Context-store setup defaults to an OpenSpec-managed global data location.
  • Chores / Tests

    • Workspace setup/open prompting and opener selection refactored; extensive test updates to match new behaviors.

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a0476043-1ab2-46e1-b5e6-6d0d8a0c2924

📥 Commits

Reviewing files that changed from the base of the PR and between 39d65da and 363359b.

📒 Files selected for processing (4)
  • openspec/initiatives/context-store-and-initiatives/roadmap.md
  • openspec/initiatives/context-store-and-initiatives/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/tasks.md
✅ Files skipped from review due to trivial changes (3)
  • openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/tasks.md
  • openspec/initiatives/context-store-and-initiatives/tasks.md
  • openspec/initiatives/context-store-and-initiatives/roadmap.md

📝 Walkthrough

Walkthrough

This PR standardizes opener ids to codex-cli, implements managed context-store default paths, extracts interactive workspace link prompts, centralizes workspace open target selection (workspace vs initiative), adjusts VS Code workspace generation and legacy ignore cleanup, and updates tests and beta documentation/roadmap.

Changes

Workspace and Initiative Beta Features

Layer / File(s) Summary
Beta docs and roadmap
docs/workspaces-beta/*, docs/cli.md, docs/concepts.md, openspec/initiatives/context-store-and-initiatives/*
Adds agent playbook and user guide, updates CLI docs and concepts for workspace/open/context-store semantics, and reorganizes roadmap/work-item docs for the workspaces beta.
Interactive prompt extraction & selection
src/commands/workspace/setup-prompts.ts, src/commands/workspace/open-target-selection.ts, src/commands/workspace/open-view.ts
Extracted interactive link prompts into promptSetupLinks, added selectWorkspaceOpenTarget to choose workspace vs initiative targets, and wired interactive link prompting into open flows.
Opener normalization: codex → codex-cli
src/core/workspace/foundation.ts, src/core/workspace/openers.ts, src/commands/workspace/opener-selection.ts, src/core/completions/command-registry.ts, src/commands/workspace/registration.ts, tests`
Replaced codex with canonical codex-cli in public options, normalized mapping to underlying codex executable, and updated parsing/validation/completions, CLI help, and tests.
Context-store managed default path
src/core/context-store/foundation.ts, src/core/context-store/operations.ts, src/commands/context-store.ts, tests`
Added getDefaultContextStoreRoot and use OpenSpec-managed context-stores/<id> when --path omitted; updated error/help text and tests to match.
Workspace open/create operations
src/commands/workspace/operations.ts, src/commands/workspace/open.ts
Allow passing links callback when creating initiative-backed managed workspaces; remove automatic planning/changes dir creation; add Codex-CLI sandbox launch args for writable workspace launch.
VS Code workspace open-surface and ignore cleanup
src/core/workspace/open-surface.ts, src/core/workspace/foundation.ts
Add folder-label constants, reorder multi-root folders (linked repos first, initiative context, then OpenSpec workspace), and remove legacy generated .gitignore only when it contains solely the legacy generated pattern.
Tests and PATH helpers
test/helpers/path-env.ts, many test files under test/commands/* and test/core/*
Added case-insensitive PATH helpers and updated many tests to reflect codex-cli opener, managed context-store roots, new workspace folder ordering, interactive flows, and launch args.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • Fission-AI/OpenSpec#1134: Directly related updates to workspace open flow's prepareWorkspaceOpen and opener/selection handling in open-view.ts.
  • Fission-AI/OpenSpec#1127: Direct dependency—this PR builds on context-store and initiative infrastructure introduced in #1127.
  • Fission-AI/OpenSpec#1038: Overlapping changes to global data dir / path resolution that affect default context-store root computation.

Suggested reviewers

  • alfred-openspec

Poem

🐰 I hopped through docs and code today,
Swapped names so openers lead the way,
Workspaces open with initiative light,
Context-stores now rest where OpenSpec keeps sight,
Codex-cli and guides make beta flows play.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/beta-context-workspace-polish

@TabishB TabishB marked this pull request as ready for review May 28, 2026 14:51

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/commands/workspace/open.ts (1)

57-60: ⚡ Quick win

Remove the unnecessary opener.id as string cast (and consider dropping unreachable 'codex' check)

In src/commands/workspace/open.ts, WorkspacePreferredOpener.id is already typed as WorkspaceAgentOpenerId | WorkspaceEditorOpenerId, so const openerId = opener.id as string doesn’t add type safety. Also, legacy opener value 'codex' is normalized to 'codex-cli' during workspace parsing, so (openerId === 'codex') is likely redundant.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/commands/workspace/open.ts` around lines 57 - 60, The isCodexCliOpener
function casts opener.id to string unnecessarily and checks a legacy 'codex'
value; remove the cast by using opener.id directly (typed as
WorkspaceAgentOpenerId | WorkspaceEditorOpenerId) and simplify the condition to
only check for the normalized value 'codex-cli' when opener.kind === 'agent'
(i.e., in isCodexCliOpener use opener.id === 'codex-cli' and drop the 'codex'
branch); reference: function isCodexCliOpener and type WorkspacePreferredOpener
/ WorkspaceAgentOpenerId.
docs/workspaces-beta/user-guide.md (1)

36-38: 💤 Low value

Optional: Consider varying the phrasing to improve readability.

The phrase "when you want to" appears twice in close proximity. While not incorrect, varying the language would improve flow.

Suggestion:

-Use `openspec workspace open --initiative team-context/billing-launch --editor`
-when you want to skip the picker. Use `--agent codex-cli`, `--agent claude`, or
-`--agent github-copilot` instead of `--editor` when you want to open an agent
-directly.
+Use `openspec workspace open --initiative team-context/billing-launch --editor`
+to skip the picker. Use `--agent codex-cli`, `--agent claude`, or
+`--agent github-copilot` instead of `--editor` to open an agent directly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/workspaces-beta/user-guide.md` around lines 36 - 38, The sentence
repeats "when you want to"; update the phrasing to improve flow by changing the
first occurrence to something like "If you prefer to skip the picker" and keep
the rest but simplify to "Use --agent codex-cli, --agent claude, or --agent
github-copilot instead of --editor to open an agent directly," referencing the
flags --agent and --editor and the agent names codex-cli, claude, github-copilot
so the meaning stays identical while avoiding repetition.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/commands/workspace/open-view.ts`:
- Around line 288-307: interactiveCreate currently allows prompting even in JSON
mode; update its definition to also require that output is not JSON by adding a
JSON-mode guard (e.g. && !isJsonOutput(options) or &&
!resolveJsonOutput(options) or, if no helper exists, && !options.json). Change
the interactiveCreate assignment (the const interactiveCreate = ... line) so it
checks options for JSON mode in addition to resolveNoInteractive(options) and
isInteractive(options) so linksForNewWorkspace prompting is suppressed when
--json is set.

In `@src/core/workspace/open-surface.ts`:
- Around line 304-331: The cleanup currently removes any line equal to
getWorkspaceCodeWorkspaceFileName(workspaceName), which can delete user-authored
.gitignore entries; change the logic to only remove lines that were written by
our tool by matching a stable marker (e.g. "#{workspace-generated}") appended
when we create the ignore entry, and skip removing plain user lines. Concretely:
when writing the generated pattern (the code path that calls
FileSystemUtils.writeFile and uses getWorkspaceCodeWorkspaceFileName), append a
recognizable comment marker to that line; then update this removal block to only
filter out lines that match the generated pattern plus the marker (not the bare
filename), and if no marker is found leave the .gitignore untouched to preserve
user intent.

---

Nitpick comments:
In `@docs/workspaces-beta/user-guide.md`:
- Around line 36-38: The sentence repeats "when you want to"; update the
phrasing to improve flow by changing the first occurrence to something like "If
you prefer to skip the picker" and keep the rest but simplify to "Use --agent
codex-cli, --agent claude, or --agent github-copilot instead of --editor to open
an agent directly," referencing the flags --agent and --editor and the agent
names codex-cli, claude, github-copilot so the meaning stays identical while
avoiding repetition.

In `@src/commands/workspace/open.ts`:
- Around line 57-60: The isCodexCliOpener function casts opener.id to string
unnecessarily and checks a legacy 'codex' value; remove the cast by using
opener.id directly (typed as WorkspaceAgentOpenerId | WorkspaceEditorOpenerId)
and simplify the condition to only check for the normalized value 'codex-cli'
when opener.kind === 'agent' (i.e., in isCodexCliOpener use opener.id ===
'codex-cli' and drop the 'codex' branch); reference: function isCodexCliOpener
and type WorkspacePreferredOpener / WorkspaceAgentOpenerId.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 1b1b5f8c-f9dc-4197-bce8-bade1ce935e3

📥 Commits

Reviewing files that changed from the base of the PR and between 11b2690 and 5e931a6.

📒 Files selected for processing (55)
  • docs/cli.md
  • docs/concepts.md
  • docs/workspaces-beta/agent-cli-playbook.md
  • docs/workspaces-beta/user-guide.md
  • openspec/initiatives/context-store-and-initiatives/roadmap.md
  • openspec/initiatives/context-store-and-initiatives/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/notes.md
  • openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/evidence.md
  • openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/evidence.md
  • openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/evidence.md
  • openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/evidence.md
  • openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/tasks.md
  • openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/evidence.md
  • openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/tasks.md
  • src/commands/context-store.ts
  • src/commands/workspace.ts
  • src/commands/workspace/open-target-selection.ts
  • src/commands/workspace/open-view.ts
  • src/commands/workspace/open.ts
  • src/commands/workspace/opener-selection.ts
  • src/commands/workspace/operations.ts
  • src/commands/workspace/registration.ts
  • src/commands/workspace/selection.ts
  • src/commands/workspace/setup-prompts.ts
  • src/core/completions/command-registry.ts
  • src/core/context-store/foundation.ts
  • src/core/context-store/operations.ts
  • src/core/workspace/foundation.ts
  • src/core/workspace/open-surface.ts
  • src/core/workspace/openers.ts
  • test/commands/context-store.test.ts
  • test/commands/workspace-initiative-open.test.ts
  • test/commands/workspace-open.test.ts
  • test/commands/workspace.interactive.test.ts
  • test/commands/workspace.test.ts
  • test/core/context-store/foundation.test.ts
  • test/core/workspace/foundation.test.ts
  • test/core/workspace/legacy-state.test.ts
  • test/helpers/path-env.ts

Comment thread src/commands/workspace/open-view.ts Outdated
Comment thread src/core/workspace/open-surface.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/core/workspace/open-surface.ts`:
- Around line 307-315: The current logic uses nonEmptyLines and
isPureLegacyGeneratedFile to only delete gitignore when it's the sole legacy
line; instead, detect if any line equals legacyGeneratedPattern and remove just
that line: use nonEmptyLines.includes(legacyGeneratedPattern) (or find) to
decide whether to act; if no match return; otherwise create a filteredLines =
nonEmptyLines.filter(l => l.trim() !== legacyGeneratedPattern), then if
filteredLines is empty call await fs.rm(gitignorePath, { force: true }) else
write the trimmed filteredLines back to gitignorePath (preserving other rules).
Ensure you update references to isPureLegacyGeneratedFile and only use fs.rm
when the resulting file would be empty.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b5af92af-6047-4dc1-a9bb-9fa3216d0ec3

📥 Commits

Reviewing files that changed from the base of the PR and between 5e931a6 and 39d65da.

📒 Files selected for processing (11)
  • docs/cli.md
  • docs/concepts.md
  • openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md
  • openspec/specs/workspace-foundation/spec.md
  • src/commands/workspace/open-view.ts
  • src/commands/workspace/setup-prompts.ts
  • src/core/workspace/foundation.ts
  • src/core/workspace/open-surface.ts
  • test/commands/workspace.interactive.test.ts
  • test/core/workspace/foundation.test.ts
💤 Files with no reviewable changes (2)
  • openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md
  • openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md
✅ Files skipped from review due to trivial changes (1)
  • docs/concepts.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/commands/workspace/setup-prompts.ts
  • src/commands/workspace/open-view.ts
  • src/core/workspace/foundation.ts
  • docs/cli.md
  • test/core/workspace/foundation.test.ts

Comment on lines +307 to +315
const nonEmptyLines = existingLines.filter((line) => line.trim().length > 0);
const isPureLegacyGeneratedFile =
nonEmptyLines.length === 1 && nonEmptyLines[0]?.trim() === legacyGeneratedPattern;

if (!isPureLegacyGeneratedFile) {
return;
}

await fs.rm(gitignorePath, { force: true });

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Legacy ignore rule cleanup skips mixed .gitignore files.

At Line 311, cleanup returns unless the file is “pure legacy”, so the legacy <workspace-name>.code-workspace ignore line remains when users also have other ignore entries. This violates the “remove legacy rule when present, preserve unrelated rules” behavior.

Suggested fix
   const legacyGeneratedPattern = getWorkspaceCodeWorkspaceFileName(workspaceName);
   const existingContent = await fs.readFile(gitignorePath, 'utf-8');
   const existingLines = existingContent.split(/\r?\n/u);
-  const nonEmptyLines = existingLines.filter((line) => line.trim().length > 0);
-  const isPureLegacyGeneratedFile =
-    nonEmptyLines.length === 1 && nonEmptyLines[0]?.trim() === legacyGeneratedPattern;
-
-  if (!isPureLegacyGeneratedFile) {
+  let removedLegacyPattern = false;
+  const keptLines = existingLines.filter((line) => {
+    if (line.trim() === legacyGeneratedPattern) {
+      removedLegacyPattern = true;
+      return false;
+    }
+    return true;
+  });
+  if (!removedLegacyPattern) {
     return;
   }
 
-  await fs.rm(gitignorePath, { force: true });
+  while (keptLines.length > 0 && keptLines[keptLines.length - 1]?.trim().length === 0) {
+    keptLines.pop();
+  }
+  if (keptLines.every((line) => line.trim().length === 0)) {
+    await fs.rm(gitignorePath, { force: true });
+    return;
+  }
+  await FileSystemUtils.writeFile(gitignorePath, `${keptLines.join('\n')}\n`);
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const nonEmptyLines = existingLines.filter((line) => line.trim().length > 0);
const isPureLegacyGeneratedFile =
nonEmptyLines.length === 1 && nonEmptyLines[0]?.trim() === legacyGeneratedPattern;
if (!isPureLegacyGeneratedFile) {
return;
}
await fs.rm(gitignorePath, { force: true });
const legacyGeneratedPattern = getWorkspaceCodeWorkspaceFileName(workspaceName);
const existingContent = await fs.readFile(gitignorePath, 'utf-8');
const existingLines = existingContent.split(/\r?\n/u);
let removedLegacyPattern = false;
const keptLines = existingLines.filter((line) => {
if (line.trim() === legacyGeneratedPattern) {
removedLegacyPattern = true;
return false;
}
return true;
});
if (!removedLegacyPattern) {
return;
}
while (keptLines.length > 0 && keptLines[keptLines.length - 1]?.trim().length === 0) {
keptLines.pop();
}
if (keptLines.every((line) => line.trim().length === 0)) {
await fs.rm(gitignorePath, { force: true });
return;
}
await FileSystemUtils.writeFile(gitignorePath, `${keptLines.join('\n')}\n`);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/core/workspace/open-surface.ts` around lines 307 - 315, The current logic
uses nonEmptyLines and isPureLegacyGeneratedFile to only delete gitignore when
it's the sole legacy line; instead, detect if any line equals
legacyGeneratedPattern and remove just that line: use
nonEmptyLines.includes(legacyGeneratedPattern) (or find) to decide whether to
act; if no match return; otherwise create a filteredLines =
nonEmptyLines.filter(l => l.trim() !== legacyGeneratedPattern), then if
filteredLines is empty call await fs.rm(gitignorePath, { force: true }) else
write the trimmed filteredLines back to gitignorePath (preserving other rules).
Ensure you update references to isPureLegacyGeneratedFile and only use fs.rm
when the resulting file would be empty.

@alfred-openspec alfred-openspec left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Looks good to me. The context-store/workspace flow changes are covered by the updated tests, and CI is green.

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

Actionable comments posted: 0

@alfred-openspec alfred-openspec left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Looks good. I checked the workspace/context-store flow changes, CI is green, and the targeted local test pass matches the PR validation scope.

@TabishB TabishB added this pull request to the merge queue May 28, 2026
Merged via the queue into main with commit 21c1805 May 28, 2026
12 checks passed
@TabishB TabishB deleted the codex/beta-context-workspace-polish branch May 28, 2026 15:51
linjinze999 pushed a commit to linjinze999/OpenSpec that referenced this pull request Jun 4, 2026
* Polish beta context workspace flow

* Allow context-only initiative workspace open

* Add workspace beta compatibility review item
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.

2 participants