chore: feat(ceo): fold Google Analytics into the CEO board digest (ceo_read_ga) #335
No reviewers
Labels
No labels
Agent
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No assignees
2 participants
Notifications
Total time spent: 48 seconds
Due date
igor
48 seconds
No due date set.
Dependencies
No dependencies set
Reference
joshtronic/igor!335
Loading…
Reference in a new issue
No description provided.
Delete branch "agent/330-feat-fold-google-analytics-into-the-ceo-digest"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What this PR does
ceo_read_ga <repo>tolib/ceo.sh, sibling toceo_read_gsc-- same.seo.domainresolution, sameGOOGLE_SERVICE_ACCOUNTgate, degrades gracefully (not-configured / no-property / token-fail -> note, never guess)bin/tick.shright after the GSC scoreboardbin/test-ceo.shwith aceo_read_gablock mirroring theceo_read_gscblock (no-domain, unconfigured, no-property-match, happy-path current-vs-prior, token-mint-failure)Test plan
bash bin/check-sync.shpasses (allbin/test-*.sh, including the newceo_read_gaassertions)/security-reviewrun on the diff -- no findingsmake lint(shellcheck) not run -- shellcheck isn't installed in this environmentCloses #330
🤖 Review —
APPROVE(automated)CI for
fab8e081: successAdds
ceo_read_ga <repo>mirroringceo_read_gsc, wires it into the digest inbin/tick.sh, and extendsbin/test-ceo.shwith matching assertions. In scope, ~90 lines, CI green.Verified against the diff:
lib/ceo.sh, one-line wiring inbin/tick.sh:2103, and a full test block inbin/test-ceo.sh. Themake lintitem is honestly left unchecked with a reason.return 0, empty), unconfigured (GOOGLE_SERVICE_ACCOUNTempty), token-mint-fail (ga_property_for_domainrc 1), no-property-match (empty property), happy-path.sessions | 100 | 80, engagement-rate math (0.6*10000/100 = 60%), conversions/key-events, and window dates all match the mocked metrics.ga_run_reportcalls fall back to{"rows":[]}on error, and even a missingga_property_for_domainwould take theif !branch to a note rather than crash the digest.Minor notes (non-blocking):
ga_property_for_domain,ga_run_report,seo_ga_metrics,seo_window), so CI confirmsceo_read_ga's own logic but not that those helpers actually exist/behave inlib/seo-analysis.sh. The description states they're the same functions the SEO pass already uses, and the design degrades to a note if any are absent, so the risk is low — worth a glance if you have the tree open.ga_property_for_domain, which may conflate other failure modes under a "token mint failed" label. Cosmetic.No security, scope, or correctness concerns. Safe to merge.
Independent review by the harness on
claude-opus-4-8(effort: high). The human reviewer is requested once Igor has reviewed; a human still merges.