Skip to content

Add SafeSkill security badge (84/100 — Passes with Notes)#1

Open
OyaAIProd wants to merge 1 commit into
hanlulong:mainfrom
OyaAIProd:safeskill-scan-1774784133606
Open

Add SafeSkill security badge (84/100 — Passes with Notes)#1
OyaAIProd wants to merge 1 commit into
hanlulong:mainfrom
OyaAIProd:safeskill-scan-1774784133606

Conversation

@OyaAIProd

Copy link
Copy Markdown

⚠️ SafeSkill Security Scan Results

Metric Value
Overall Score 84/100 (Passes with Notes)
Code Score 98/100
Content Score 60/100
Findings 58 findings detected (1 critical)
Taint Flows 0
Files Scanned 26
Scan Duration 1.4s

Top Findings

  • 🔴 critical: Data exfiltration pattern detected (data-exfil-pattern): "curl -X POST http://localhost:3001/api/query -H "Content-Type: application/json"" (docs/archive/COMPLEX_QUERY_TEST_SUITE_README.md:352)
  • 🟠 high: References sensitive path: import.meta.env.VITE_SUPABASE_URL (packages/frontend/vite.config.ts:16)
  • 🟠 high: References sensitive path: import.meta.env.VITE_SUPABASE_ANON_KEY (packages/frontend/vite.config.ts:17)
  • 🟠 high: Detected instruction-override attempt: "system:" (docs/analysis/INDICATOR_RESOLUTION_ANALYSIS.md:472)
  • 🟠 high: Context boundary escape detected (fake-turn-marker): "User:" (docs/archive/fixes-nov23/COMTRADE_FIX_SUMMARY.md:51)

View full report on SafeSkill


This PR was automatically generated by SafeSkill — the security scanner for AI tools and MCP servers.

hanlulong added a commit that referenced this pull request Jul 11, 2026
ExchangeRate keyed endpoint, retrieval-layer concurrency

- IMF SDMX multi-country batches accumulate first-success-per-country
  (a 3-country comparison returned after country #1, silently dropping
  the rest); CSV series group by the DSD structure's real dimension ids
  so attribute columns (STATUS) can't fragment a series; DataMapper
  source links use the code's actual dataset anchor, not @weo.
- CoinGecko: the free-tier 365-day history clamp is disclosed via a
  metadata note on both paths, and frequency is derived from the ACTUAL
  point spacing (8-90 day hourly windows were labeled "daily").
- ExchangeRate: the keyed v6 endpoint returns conversion_rates, not
  rates — setting an API key would have hard-broken every spot query.
- Indicator retrieval: FTS query builder strips ALL non-word characters
  (an enumerated escape list let '"2025,"*' through — an FTS5 syntax
  error that killed the whole lexical arm for any punctuated query, seen
  in prod); sqlite connections are per-thread (the shared connection
  corrupted in-flight cursors under concurrent searches, ~40/day
  InterfaceError in prod, silently degrading retrieval).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hanlulong added a commit that referenced this pull request Jul 11, 2026
final = normalize(0.75*name_vec + 0.25*syn_vec) for the ~11K rows with
meaningful synonyms; all other rows byte-identical to the name-only
index. This achieves what the rolled-back text-concatenation rebuild
could not: A/B strictly-improved-or-equal on all ten probes — UNRATE
back to #1 for "unemployment rate", GDPC1 ENTERED the "US GDP" top-6,
M2 entered "M2 money supply", StatsCan's monthly LFS cube rose to #1 —
with zero flagship crowding (name-dominant weighting preserves series
identity; the synonym component only nudges). Adopted via service
restart after A/B review.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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