Skip to content

Commit 8f234e8

Browse files
authored
Merge pull request #5 from jwaldrip/jwaldrip/main
Fix IAM, update gap doc
2 parents 5cb1ebc + 7787ad1 commit 8f234e8

File tree

2 files changed

+26
-35
lines changed

2 files changed

+26
-35
lines changed

deploy/terraform/modules/auth-proxy/main.tf

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,23 +140,11 @@ resource "google_cloudfunctions2_function" "auth_proxy" {
140140
}
141141
}
142142

143-
# Grant the default compute service account access to secrets
144-
resource "google_project_iam_member" "secret_accessor" {
145-
project = var.project_id
146-
role = "roles/secretmanager.secretAccessor"
147-
member = "serviceAccount:${var.project_id}@appspot.gserviceaccount.com"
148-
}
149-
150-
# Also grant the compute service account
151-
resource "google_project_iam_member" "compute_secret_accessor" {
152-
project = var.project_id
153-
role = "roles/secretmanager.secretAccessor"
154-
member = "serviceAccount:${data.google_project.current.number}-compute@developer.gserviceaccount.com"
155-
}
156-
157-
data "google_project" "current" {
158-
project_id = var.project_id
159-
}
143+
# NOTE: The compute service account (xxx-compute@developer.gserviceaccount.com)
144+
# needs roles/secretmanager.secretAccessor granted manually — our Terraform SA
145+
# doesn't have projectIamAdmin permissions.
146+
# Run: gcloud projects add-iam-policy-binding PROJECT \
147+
# --member="serviceAccount:COMPUTE_SA" --role="roles/secretmanager.secretAccessor"
160148

161149
# Allow unauthenticated access (public OAuth endpoint)
162150
resource "google_cloud_run_v2_service_iam_member" "public" {

website/public/haiku-gaps.html

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ <h2>Current Architecture</h2>
305305
<div class="block block-done"><strong>Portfolio via Ticketing</strong><span>Intent epics + unit tickets = the dashboard</span></div>
306306
<div class="block block-done"><strong>Metrics via Provider</strong><span>CRM pipeline reports, ticketing velocity</span></div>
307307
<div class="block block-done"><strong>Audit Trail via Git</strong><span>Commits, PRs, review approvals</span></div>
308-
<div class="block block-gap"><strong>Unified Portfolio View</strong><span>/haiku:portfolio aggregating across all intents</span></div>
308+
<div class="block block-done"><strong>Portfolio Browse</strong><span>/browse — local + remote workspace explorer with OAuth</span></div>
309309
</div>
310310
</div>
311311
</div>
@@ -554,19 +554,22 @@ <h3><span class="tag tag-done">Solved</span> Metrics</h3>
554554
</div>
555555

556556
<div class="gap-card" style="margin-top:1.5rem; border-color:var(--accent)">
557-
<h3><span class="tag tag-done">Solution</span> Providers + /haiku:portfolio</h3>
558-
<p>The ticketing provider's boards and CRM's pipeline views are the primary portfolio dashboards. A <code>/haiku:portfolio</code> skill can additionally query providers and aggregate a CLI summary of all active intents across studios.</p>
559-
<pre style="margin-top:0.75rem; padding:1rem; background:var(--accent-bg); border-radius:0.5rem; font-size:0.8rem; overflow-x:auto; color:var(--accent)"><code># /haiku:portfolio queries providers, not local files
560-
→ Ticketing: list all H·AI·K·U epics, show stage/status
561-
→ CRM: list all active deals, show pipeline stage
562-
→ Knowledge: list recent cross-studio handoffs
563-
564-
# Output: unified view
565-
Active Intents:
566-
[software] feature-x — development (3/6 stages) Jira: PROJ-42
567-
[sales] acme-deal — negotiation (await) SF: 006abc
568-
[cs] acme-onboard — adoption (2/5 stages) Jira: CS-18</code></pre>
569-
<p style="font-size:0.85rem; margin-top:0.5rem"><strong>Remaining gap:</strong> Intent templates for automating repeatable processes. Everything else is provider-mediated.</p>
557+
<h3><span class="tag tag-done">Solution</span> /browse + Providers</h3>
558+
<p>The <code>/browse</code> feature is a hosted SPA that renders H·AI·K·U workspaces from any source:</p>
559+
<pre style="margin-top:0.75rem; padding:1rem; background:var(--accent-bg); border-radius:0.5rem; font-size:0.8rem; overflow-x:auto; color:var(--accent)"><code># Local — drag and drop a project folder
560+
/browse → reads .haiku/ via File System Access API
561+
562+
# Remote — connect to any Git provider
563+
/browse/git?repo=github.com/org/repo → GitHub REST API
564+
/browse/git?repo=gitlab.com/group/project → GitLab REST API
565+
566+
# Auth — SPA OAuth for private repos
567+
/auth/github/callback → code exchange via GCP Cloud Function
568+
/auth/gitlab/callback → code exchange via GCP Cloud Function
569+
570+
# Views: Portfolio → Intent → Stage → Unit
571+
# Same components for local and remote — only the data source differs</code></pre>
572+
<p style="font-size:0.85rem; margin-top:0.5rem">Ticketing provider boards remain the primary operational dashboard. <code>/browse</code> adds artifact-level visibility — dive into intent specs, unit criteria, stage outputs — directly from the browser.</p>
570573
</div>
571574

572575
<!-- ============================================================ -->
@@ -592,25 +595,25 @@ <h3 style="color:var(--success)">Built</h3>
592595
</ul>
593596
</div>
594597
<div>
595-
<h3 style="color:var(--success)">Solved via Providers</h3>
598+
<h3 style="color:var(--success)">Solved via Providers + Browse</h3>
596599
<ul style="margin-top:0.5rem">
597600
<li>Cross-studio data flow (knowledge provider)</li>
598601
<li>Event-driven gates (scheduled task polling)</li>
599602
<li>Role assignment (ticketing provider)</li>
600603
<li>Approval chains (provider workflows)</li>
601604
<li>Handoff protocols (knowledge provider)</li>
602-
<li>Portfolio visibility (ticketing + CRM)</li>
605+
<li>Portfolio visibility (ticketing + CRM + /browse)</li>
603606
<li>Cross-studio metrics (provider reporting)</li>
604607
<li>Audit trail (git + provider history)</li>
608+
<li>Workspace browse (local + GitHub/GitLab with OAuth)</li>
609+
<li>Auth proxy (GCP Cloud Function, Terraform-managed)</li>
605610
</ul>
606611
</div>
607612
<div>
608613
<h3 style="color:var(--warn)">Remaining Gaps</h3>
609614
<ul style="margin-top:0.5rem">
610615
<li><strong>Intent templates</strong> — parameterized playbooks for repeatable processes</li>
611616
<li><strong>Gate protocol schema</strong> — timeout, escalation, conditional approval in STAGE.md</li>
612-
<li><strong>/haiku:portfolio</strong> — CLI aggregation across providers</li>
613-
<li><strong>/haiku:triggers</strong> — scheduled polling skill for provider events</li>
614617
</ul>
615618
</div>
616619
</div>

0 commit comments

Comments
 (0)