Skip to content

Make Beats PM Kit Codex-first#11

Open
officebeats wants to merge 2 commits into
mainfrom
codex/codex-first-beats-pm-kit
Open

Make Beats PM Kit Codex-first#11
officebeats wants to merge 2 commits into
mainfrom
codex/codex-first-beats-pm-kit

Conversation

@officebeats
Copy link
Copy Markdown
Owner

Summary

  • Make Codex the primary Beats PM Kit runtime while keeping Antigravity as a compatibility target.
  • Promote the next high-signal Codex workflows and add project-scoped Codex custom agents.
  • Add Codex doctor/setup commands, non-mutating adapter checks, UTF-8-safe script output, inventory counts, optional Codex prompts/action wiring, and Obsidian bridge support referenced by the promoted /obsidian skill.

Verification

  • python system/scripts/adapter_guard.py --mode check
  • python -m unittest system.tests.test_obsidian_bridge -v
  • python system/scripts/detect_runtime.py --human
  • python system/scripts/context_health.py --check
  • python system/scripts/beats.py codex-doctor -- --json
  • python system/scripts/beats.py codex-setup -- --skip-user-home --skip-hooks

Notes

  • .agent/command-registry.json remains the source of truth for generated adapter surfaces.
  • Generated source-command mirrors and local runtime state are intentionally not included.
  • Optional Codex Action wiring is manual workflow_dispatch and gated on OPENAI_API_KEY.

The kit needs a reusable deck-generation path that publishes templates and workflow instructions while keeping generated briefs, source documents, and private workspace content local-only.

Constraint: Deck publishing must preserve private-folder ignore rules and remain compatible with the communication-intake release changes already on main.
Rejected: Publish generated deck artifacts | those can contain private meeting or customer context.
Rejected: Force-push rewritten PR history | the merge update kept reviewed commits intact.
Confidence: high
Scope-risk: narrow
Directive: Keep deck inputs and generated outputs out of git unless they are sanitized templates.
Tested: Kilo Code Review pass on reviewed deck changes; adapter-guard pass on refreshed branch; release-readiness and adapter/transcript unit tests pass locally.
Not-tested: Live presentation export through third-party office tooling.
Codex now has first-class health and setup entrypoints, custom agents, promoted skill contracts, optional CI prompts/action wiring, and docs that treat Antigravity as compatibility while preserving the shared .agent source of truth.

Constraint: Antigravity users still need generated adapters and shared .agent state
Constraint: Private status, vault, and MCP data must remain ignored or user-scoped
Rejected: Commit generated source-command mirrors | would bloat the initial Codex skill surface
Confidence: high
Scope-risk: moderate
Directive: Keep .agent/command-registry.json as the source of truth and run adapter_guard --mode check after command changes
Tested: python system/scripts/adapter_guard.py --mode check
Tested: python -m unittest system.tests.test_obsidian_bridge -v
Not-tested: Optional GitHub Codex Action execution without OPENAI_API_KEY secret
Copy link
Copy Markdown

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

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: 1a70434328

ℹ️ 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".

elif target == "daily":
uri = build_uri("daily", vault_param(config))
elif target == "tracker":
uri = build_uri("open", {"path": str(configured_target(config) / "5. Trackers" / "TASK_MASTER.md")})
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 Use synced Trackers path for open tracker

In sync mode, this builds a URI to .../5. Trackers/TASK_MASTER.md, but run_sync() writes that folder as Trackers (per SYNC_MAP). As a result, obsidian_bridge.py open tracker points to a non-existent file in external vaults and fails to open the tracker note users just synced.

Useful? React with 👍 / 👎.

Comment on lines +125 to +126
if path is None:
return {"path": None, "exists": False, "is_dir": False}
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 Keep has_obsidian_config key for null vault paths

When as_path() returns None for a malformed or missing vault path entry, path_info() omits has_obsidian_config, but parse_saved_vaults() always reads info["has_obsidian_config"]. A single bad vault entry in obsidian.json will therefore raise KeyError and break status/configure detection instead of being treated as stale/invalid data.

Useful? React with 👍 / 👎.



def command_sync(args: argparse.Namespace) -> int:
dry_run = not args.apply
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 Respect --dry-run when sync flags conflict

The sync command computes dry_run only from --apply, so --dry-run --apply still performs writes. Because both flags are accepted by the parser, users or wrapper scripts can pass both and unintentionally mutate their vault while expecting a preview. Make the flags mutually exclusive or prioritize --dry-run for safety.

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