SnapAPI session 64: OpenAPI cleanup, dark mode blog post, 474 tests
This commit is contained in:
parent
e566d6af16
commit
06f7d40365
4 changed files with 79 additions and 17 deletions
|
|
@ -52,14 +52,14 @@
|
||||||
],
|
],
|
||||||
"notes": "N26 uses Xetra tickers. Always provide ISIN for orders. Fractional shares by EUR amount supported.",
|
"notes": "N26 uses Xetra tickers. Always provide ISIN for orders. Fractional shares by EUR amount supported.",
|
||||||
"created": "2026-02-12T20:00:00Z",
|
"created": "2026-02-12T20:00:00Z",
|
||||||
"lastUpdated": "2026-03-05T17:15:00Z",
|
"lastUpdated": "2026-03-06T09:15:00Z",
|
||||||
"closingSnapshot": {
|
"closingSnapshot": {
|
||||||
"date": "2026-03-05",
|
"date": "2026-03-06",
|
||||||
"DFNS": 60.85,
|
"DFNS": 62.05,
|
||||||
"portfolioValue": 1082.16,
|
"portfolioValue": 1103.16,
|
||||||
"dailyPL": -24.19,
|
"dailyPL": 20.99,
|
||||||
"dailyPLpct": -2.19,
|
"dailyPLpct": 1.94,
|
||||||
"totalReturn": 8.22
|
"totalReturn": 10.32
|
||||||
},
|
},
|
||||||
"pendingActions": []
|
"pendingActions": []
|
||||||
}
|
}
|
||||||
|
|
@ -26,9 +26,26 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"totalInvested": 22200,
|
"totalInvested": 22200,
|
||||||
"lastAnalysis": "2026-03-05T18:05:00Z",
|
"lastAnalysis": "2026-03-06T11:05:00Z",
|
||||||
"updateNote": "4:00 PM Vienna Thursday - RHM.DE €1,626–€1,638 range (+3.7% daily support). PICK $59.72 (-2.47% day, down from $61.23—mining weakness accelerating). DFNS.PA API unavailable but defense sector outperforming. RHM earnings March 11 catalyst key. PICK below $60 signals potential uranium rotation if <$58 support breaks. Defense thesis intact on geopolitical tensions. HOLD all positions; monitor PICK support at $58.",
|
"updateNote": "4:00 PM Vienna Thursday - RHM.DE €1,626–€1,638 range (+3.7% daily support). PICK $59.72 (-2.47% day, down from $61.23—mining weakness accelerating). DFNS.PA API unavailable but defense sector outperforming. RHM earnings March 11 catalyst key. PICK below $60 signals potential uranium rotation if <$58 support breaks. Defense thesis intact on geopolitical tensions. HOLD all positions; monitor PICK support at $58.",
|
||||||
"priceHistory": [
|
"priceHistory": [
|
||||||
|
{
|
||||||
|
"timestamp": "2026-03-06T11:05:00Z",
|
||||||
|
"RHM.DE": 1626.0,
|
||||||
|
"PICK": 58.79,
|
||||||
|
"note": "11:05 AM Vienna Friday - RHM.DE €1,626 (stable). PICK $58.79 firmly below $58 support (rotation trigger confirmed). Defense thesis intact despite mining weakness; Iran conflict day 6 continuing. RHM earnings March 11 catalyst key. HOLD RHM.DE/DFNS.PA; **PICK rotation candidate**—consider uranium ETF swap if closed below $58. No new opportunities due to API rate limits. Web searches exhausted."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": "2026-03-06T10:00:00Z",
|
||||||
|
"RHM.DE": 1626.0,
|
||||||
|
"PICK": 58.79,
|
||||||
|
"note": "10:00 AM Vienna Friday - RHM.DE €1,626 (-0.74% from Thu €1,638.50, near €100B market cap). PICK $58.79 (-3.985% day, support level holding). Defense sector momentum intact (Rheinmetall acquisitions, earnings March 11, geopolitical tailwinds continue). Mining weak but RHM thesis solid. Middle East war day 6, oil stable, safe-haven flows supporting defense/commodities. No new breakout opportunities; broader tech/semiconductors not N26-accessible. HOLD all positions; RHM support level €1,600 watch, PICK rotation trigger if <$58 broken late-session."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": "2026-03-06T09:01:00Z",
|
||||||
|
"PICK": 58.79,
|
||||||
|
"note": "9:01 AM Vienna Friday - PICK $58.79 (-3.985% day, broke $58 support threshold). RHM.DE/DFNS.PA API unavailable but defense thesis intact (Iran conflict escalating, Allianz research confirms sector outperformance). URNM $66.50 (-6.3% day). Rotation trigger hit for PICK; consider URNM.L/URNM.SW swap but wait for better uranium entry (not on down day). RHM earnings March 11 catalyst remains key. HOLD positions; monitor PICK close for rotation execution."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"timestamp": "2026-03-05T18:05:00Z",
|
"timestamp": "2026-03-05T18:05:00Z",
|
||||||
"RHM.DE": 1638.5,
|
"RHM.DE": 1638.5,
|
||||||
|
|
@ -189,10 +206,5 @@
|
||||||
"PICK": 64.34,
|
"PICK": 64.34,
|
||||||
"note": "3:01 PM Vienna - PICK steady $64.34 (+0.33% today). Defense ETFs +14% YTD. US-Iran war escalating, Brent toward $80. Broad equities down >1%, defense/commodities safe-haven strength intact."
|
"note": "3:01 PM Vienna - PICK steady $64.34 (+0.33% today). Defense ETFs +14% YTD. US-Iran war escalating, Brent toward $80. Broad equities down >1%, defense/commodities safe-haven strength intact."
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"timestamp": "2026-03-02T14:09:00Z",
|
|
||||||
"PICK": 64.34,
|
|
||||||
"note": "2:09 PM Vienna - PICK flat from 1 PM, +0.33% today. Broad market down >1%. Gold $5,387 (+22% YoY). Defense & commodities outperforming. Thesis intact."
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,52 @@
|
||||||
# SnapAPI Session Log
|
# SnapAPI Session Log
|
||||||
|
|
||||||
|
## Session 64 — 2026-03-06 12:00 CET (Quality & SEO)
|
||||||
|
|
||||||
|
**Goal:** OpenAPI spec cleanup + new blog post for SEO while blocked on production deploy.
|
||||||
|
|
||||||
|
**Health Check:**
|
||||||
|
- Production: ✅ healthy, 2 replicas, v0.5.2 (VULNERABLE — BUG-016 still exploitable via POST)
|
||||||
|
- Staging: ✅ healthy, 1 replica, upgraded to staging-e7ef9d7
|
||||||
|
|
||||||
|
**Work Done:**
|
||||||
|
|
||||||
|
### 1. OpenAPI Spec Cleanup (sub-agent: snapapi-dev-openapi)
|
||||||
|
- Dynamic version reading from package.json (was hardcoded "0.3.0")
|
||||||
|
- Removed dead "Signup" tag (free signup was removed in v0.3.0)
|
||||||
|
- Added missing `cache` parameter to POST /v1/screenshot body schema
|
||||||
|
- 3 new tests (TDD: RED → GREEN)
|
||||||
|
- Pushed: commit 990b6d4
|
||||||
|
|
||||||
|
### 2. Blog Post: Dark Mode Screenshots (sub-agent: snapapi-dev-blog + manual recovery)
|
||||||
|
- New blog post: "How to Capture Dark Mode Screenshots Automatically"
|
||||||
|
- Covers: darkMode parameter, CSS injection, hideSelectors, dual OG images
|
||||||
|
- Code examples: cURL, Node.js, Python
|
||||||
|
- JSON-LD BlogPosting schema, OG tags, breadcrumbs
|
||||||
|
- Blog index + sitemap updated
|
||||||
|
- 12 new blog tests (TDD: RED → GREEN)
|
||||||
|
- Pushed: commit e7ef9d7
|
||||||
|
- **Note:** Blog agent committed locally but didn't push; work was recovered manually
|
||||||
|
|
||||||
|
### 3. Staging Deployment
|
||||||
|
- Built image staging-e7ef9d7 (--no-cache), imported to w1+w2
|
||||||
|
- Used unique tag to avoid containerd cache issues
|
||||||
|
- All verified: blog 200 + JSON-LD, OpenAPI version 0.9.0, no Signup tag, cache in POST body
|
||||||
|
|
||||||
|
**Test Suite:** 474 tests passing (up from 459)
|
||||||
|
|
||||||
|
**Production Vulnerability Confirmed:** POST /v1/signup/free still returns valid API keys on production. Key created during testing was not persisted to DB (oddly) but the route is active.
|
||||||
|
|
||||||
|
**Investor Test:**
|
||||||
|
1. Stranger trust with money? **Yes on staging, NO on production**
|
||||||
|
2. Data loss on crash? **No** (CNPG PostgreSQL)
|
||||||
|
3. Free tier abuse? **⚠️ YES on production** — BUG-016 still active
|
||||||
|
4. Key recovery? **Yes on staging**
|
||||||
|
5. All website features work? **Yes on staging** — 4 blog posts, 16+ pages, all functional
|
||||||
|
|
||||||
|
**Production Status:** ⛔ VULNERABLE — 36+ commits behind staging. Strongly recommend production deploy approval.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Session 63 — 2026-03-06 09:00 CET (Feature Development)
|
## Session 63 — 2026-03-06 09:00 CET (Feature Development)
|
||||||
|
|
||||||
**Goal:** Add batch screenshot endpoint and retry logic while blocked on production deploy approval.
|
**Goal:** Add batch screenshot endpoint and retry logic while blocked on production deploy approval.
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"phase": "production-live",
|
"phase": "production-live",
|
||||||
"version": "0.5.2-prod (VULNERABLE: free signup still live) / 0.9.0-staging (459 tests)",
|
"version": "0.5.2-prod (VULNERABLE: free signup still live) / 0.9.0-staging (474 tests)",
|
||||||
"staging": {
|
"staging": {
|
||||||
"status": "running",
|
"status": "running",
|
||||||
"namespace": "snapapi-staging",
|
"namespace": "snapapi-staging",
|
||||||
"replicas": 1,
|
"replicas": 1,
|
||||||
"image": "git.cloonar.com/openclawd/snapapi:latest-staging",
|
"image": "git.cloonar.com/openclawd/snapapi:staging-e7ef9d7",
|
||||||
"healthCheck": "passing"
|
"healthCheck": "passing"
|
||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
|
|
@ -103,7 +103,10 @@
|
||||||
"Test suite: 431 tests passing (staging)",
|
"Test suite: 431 tests passing (staging)",
|
||||||
"Batch screenshot endpoint: POST /v1/screenshots/batch — up to 10 URLs per request, partial success, concurrent processing (staging)",
|
"Batch screenshot endpoint: POST /v1/screenshots/batch — up to 10 URLs per request, partial success, concurrent processing (staging)",
|
||||||
"Screenshot retry logic: automatic retry (max 2) for transient browser failures with exponential backoff, X-Retry-Count header (staging)",
|
"Screenshot retry logic: automatic retry (max 2) for transient browser failures with exponential backoff, X-Retry-Count header (staging)",
|
||||||
"Test suite: 459 tests passing (staging)"
|
"Test suite: 459 tests passing (staging)",
|
||||||
|
"OpenAPI spec cleanup: dynamic version from package.json, removed dead Signup tag, added cache to POST body (staging)",
|
||||||
|
"Blog post: How to Capture Dark Mode Screenshots Automatically — darkMode parameter, CSS injection, dual OG images (staging)",
|
||||||
|
"Test suite: 474 tests passing (staging)"
|
||||||
],
|
],
|
||||||
"notDone": [
|
"notDone": [
|
||||||
"Register Stripe webhook URL in Stripe Dashboard",
|
"Register Stripe webhook URL in Stripe Dashboard",
|
||||||
|
|
@ -126,6 +129,6 @@
|
||||||
"priceId": "price_1T2XHpRtlDv9c8GoThHfd8kS"
|
"priceId": "price_1T2XHpRtlDv9c8GoThHfd8kS"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lastSession": "2026-03-05T17:00:00Z",
|
"lastSession": "2026-03-06T11:00:00Z",
|
||||||
"codeLocation": "Forgejo repo openclawd/SnapAPI. Clone: git clone forgejo-snapapi:openclawd/SnapAPI.git"
|
"codeLocation": "Forgejo repo openclawd/SnapAPI. Clone: git clone forgejo-snapapi:openclawd/SnapAPI.git"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue