From a3d29c81b19e9e56445efa254c0186f09e9acd0f Mon Sep 17 00:00:00 2001 From: AIOSAI Date: Thu, 7 May 2026 20:31:02 -0700 Subject: [PATCH] feat(system): Fix doctor action messages (remove setup.sh refs) + expand scaffold startup protocol (.trinity, inbox, init_report) Co-Authored-By: @devpulse --- src/aipass/aipass/apps/handlers/init/scaffold_content.py | 6 ++++++ src/aipass/aipass/apps/modules/doctor.py | 8 ++++---- src/aipass/aipass/tests/test_bootstrap.py | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/aipass/aipass/apps/handlers/init/scaffold_content.py b/src/aipass/aipass/apps/handlers/init/scaffold_content.py index d1ce34a1..b19b92fd 100644 --- a/src/aipass/aipass/apps/handlers/init/scaffold_content.py +++ b/src/aipass/aipass/apps/handlers/init/scaffold_content.py @@ -67,6 +67,12 @@ def claude_md(name: str) -> str: "and respond with the status.\n" "\n" f"**Read:** `{name}_REGISTRY.json`, `README.md`, `STATUS.local.md`\n" + "**Read:** `.trinity/passport.json`, `.trinity/local.json`, `.trinity/observations.json`\n" + "**Check:** If `.ai_mail.local/inbox.json` exists, read it. Process any mail.\n" + "**Check:** If `dropbox/init_report.json` exists, read it — this is your birth certificate. " + "Use it to understand your role, the project context, and any setup instructions. " + "If it mentions missing provider settings (hooks, env vars, permissions), " + "tell the user what needs configuring and where.\n" "**Run:** `git status`\n" "\n" "Then check the registry for agents and report status.\n" diff --git a/src/aipass/aipass/apps/modules/doctor.py b/src/aipass/aipass/apps/modules/doctor.py index 1242b3a5..dc5b43b6 100644 --- a/src/aipass/aipass/apps/modules/doctor.py +++ b/src/aipass/aipass/apps/modules/doctor.py @@ -232,7 +232,7 @@ def _check_provider_manifest() -> List[CheckResult]: if manifest_path is None: results.append( CheckResult( - "hooks", GLYPH_WARN, "manifest not found", "Run setup.sh or create .claude/provider_manifest.json" + "hooks", GLYPH_WARN, "manifest not found", "Expected .claude/provider_manifest.json in project root" ) ) return results @@ -270,7 +270,7 @@ def _check_provider_manifest() -> List[CheckResult]: "hooks", GLYPH_WARN, f"{len(missing_hooks)} hook(s) missing: {', '.join(missing_hooks)}", - "Run setup.sh or copy from .claude/hooks/ — see .claude/hooks/README.md", + "Copy missing hooks to ~/.claude/hooks/ — see .claude/hooks/README.md", ) ) @@ -294,7 +294,7 @@ def _check_provider_manifest() -> List[CheckResult]: "env vars", GLYPH_WARN, f"{len(missing_env)} env var(s) missing: {', '.join(missing_env)}", - "Run setup.sh to configure provider settings", + "Add to ~/.claude/settings.json env block — see provider_manifest.json", ) ) @@ -329,7 +329,7 @@ def _check_provider_manifest() -> List[CheckResult]: "permissions", GLYPH_WARN, f"{total_missing} permission rule(s) missing", - "Run setup.sh to configure provider permissions", + "Add to ~/.claude/settings.json permissions — see provider_manifest.json", ) ) diff --git a/src/aipass/aipass/tests/test_bootstrap.py b/src/aipass/aipass/tests/test_bootstrap.py index f1238bed..6eda3a1a 100644 --- a/src/aipass/aipass/tests/test_bootstrap.py +++ b/src/aipass/aipass/tests/test_bootstrap.py @@ -207,10 +207,10 @@ def test_init_project_claude_md_content(tmp_path): assert "## Getting Started" in content assert "## Available Commands" in content assert "## Startup Protocol" in content - # Startup protocol reads registry, not .trinity/ startup_idx = content.index("## Startup Protocol") startup_section = content[startup_idx:] - assert ".trinity/" not in startup_section + assert ".trinity/passport.json" in startup_section + assert "init_report.json" in startup_section assert "aipass init agent" in content assert "ZETA_REGISTRY.json" in content