factcircuit
FactCircuit는 불변 출처와 단계별 검증, 제한된 검색, 재현 가능한 평가를 제공하는 감사 가능한 주장·증거 검증 루프입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Subcutaneous Advanced Tracking and Landscape Analysis System
A static, no-build dashboard tracking high-concentration subcutaneous (SC)
injection technologies: who owns them, what stage they're at, what
concentration they've demonstrated, how they work, and the deal/news
activity behind each one -- benchmarked against our internal target
platforms (H-Cure, Thermicra) and the marketed reference product
(Dupixent).README 전문 보기 ↗Subcutaneous Advanced Tracking and Landscape Analysis System
A static, no-build dashboard tracking high-concentration subcutaneous (SC) injection technologies: who owns them, what stage they're at, what concentration they've demonstrated, how they work, and the deal/news activity behind each one -- benchmarked against our internal target platforms (H-Cure, Thermicra) and the marketed reference product (Dupixent).
This repo merges two earlier prototypes: the clean data/app separation and
sidebar/table/donut layout from SC-Atlas-Tracker, plus the richer content
(deal feed, internal benchmarks, concentration-vs-stage chart) from
High-Concentration-SC. Everything is condensed into a compact table with
expandable rows and short deal summaries with a "Read more" toggle, rather
than always-expanded cards -- so the page stays scannable at a glance
without hiding anything.
index.html the dashboard page (no build step, no framework)
assets/styles.css all styling
assets/app.js fetches data/dashboard_data.json and renders everything
assets/i18n.js EN/KO string tables + label maps for the language toggle
assets/icon.svg brand mark / favicon
data/technologies_db.py EDIT THIS to add/update a technology
data/deals_db.py EDIT THIS to log a new deal or news finding
data/internal_targets.json hand-maintained: H-Cure, Thermicra, Dupixent
data/dashboard_data.json generated -- the only data file the dashboard reads
data/archive/ the original two source spreadsheets, kept for
provenance only -- nothing reads them anymore
scripts/build_data.py regenerates dashboard_data.json from the *_db.py
files + internal_targets.json. Stdlib only, no
pip install needed.
scripts/ko_check.py checks every English prose field against its
Korean mirror. Run it before build_data.py.
The app and the database are two completely separate things.
assets/app.js never touches technology/deal data directly -- it only
fetches and renders data/dashboard_data.json. Adding a finding never
means editing index.html, assets/app.js, assets/i18n.js, or
assets/styles.css; it means editing data/technologies_db.py or
data/deals_db.py (plain Python, safe for Claude or a human to edit with
a text editor) and running one script.
The header carries an EN/KR toggle; the choice is remembered per browser in
localStorage under sc-atlas-lang. All of the interface copy lives in
assets/i18n.js, along with label maps for the controlled vocabulary the
build script emits -- stage buckets, technology types, concentration
buckets and the recurring deal_type phrasings.
Interface copy is translated from the string table. Record prose --
mechanism, concentration_text, needle_size and each deal summary --
is translated in the database itself, under the same field name plus a _ko
suffix:
'mechanism': 'Recombinant human hyaluronidase temporarily depolymerizes ...',
'mechanism_ko': '재조합 인간 히알루로니다제가 간질 공간의 히알루로난을 ...',
Three things are deliberate:
build_data.py wrote; only the visible label is translated. Switching
language never changes which rows are selected._ko mirror is a
translation of that finished English string, never a second summary written
from the sources. Two independently written texts drift, and the drift is
invisible to a reader who only reads one of them. Both scan routines
enforce this (.claude/skills/sc-atlas-*/SKILL.md), and
.claude/skills/sc-atlas-daily-scan/references/ko-glossary.md holds the
standing vocabulary so terms stay consistent across runs.build_data.py copies the _ko fields through verbatim and never generates
them. ko_check.py is what guards them:
python scripts/ko_check.py
It fails on a missing mirror, on an identifier or number that did not survive
the translation (750 mg/mL quietly becoming 600 mg/mL, a dropped patent
number), and on an English string pasted into a _ko field. That is the one
class of error a reviewer reading only one of the two languages cannot catch.
Fix the Korean to match the English, never the reverse.
Any static file server works, e.g.:
python -m http.server 8000
# open http://localhost:8000
Opening index.html directly via file:// will not work -- the browser
blocks the fetch() call that loads data/dashboard_data.json. A local
server (or any real static host, e.g. GitHub Pages) is required.
This is the entire routine update loop -- intended to be run by a scheduled task (human or Claude) without touching any other file, and without installing anything:
data/technologies_db.py and add/edit a dict in TECHNOLOGIES. Copy an
existing entry as a template; give a new one a unique id (lowercase,
underscore-separated -- that's what deals join against).data/deals_db.py and add a dict to
DEALS. Its technology_id must match an id in technologies_db.py
(or a deal_id_aliases entry in internal_targets.json if it's about
an internal target rather than an external technology). Give it a
unique deal_id.data/internal_targets.json directly -- it's hand-written,
not generated, since it doesn't come from either database file.python scripts/build_data.py
data/dashboard_data.json along with whichever
*_db.py file(s) or internal_targets.json changed.The script prints a WARNING to stderr for anything it can't confidently
place -- a stage_raw value that doesn't match any bucketing rule, or a
deal whose technology_id doesn't match a known technology or
internal-target alias. Don't ignore these; either add a rule
(STAGE_RULES in scripts/build_data.py) or fix the entry that triggered it.
stage_bucket -- the raw "Development Stage" text is messy free text;
the script buckets it into six categories (Research / Academic →
Preclinical → Platform / Feasibility → Pre-registration / Late-stage →
Approved / Marketed, plus a "Varies by Program" catch-all) that drive both
the stage filter and the scatter chart's x-axis.concentration_bucket -- the numeric mg/mL column bucketed into
ranges for the concentration filter. Rows without a numeric value show as
"Not disclosed," not zero.date field is often free text ("2022-11
(option); converted to exclusive worldwide license") rather than a clean
date -- that's fine, don't force it into ISO format. The script extracts
the latest year/month/day mentioned anywhere in the text to sort deals
newest-first; the original text is preserved for display.thermicra_unconfirmed deal -- one entry in deals_db.py was
originally logged against an external company before being corrected to
an internal target. data/internal_targets.json's deal_id_aliases
field redirects any deal with that technology_id onto the Thermicra
internal target as a note, instead of showing it as an unmatched or
external entry.stage_raw text describes a mix of statuses in one
string (e.g. "Commercial (lead product approved); platform extension in
Phase III"). The bucketing picks the most senior/leading status -- check
stage_raw in data/technologies_db.py (or expand the row on the
dashboard) before citing a specific stage in a deck.flagged: True in deals_db.py)
as based on conflicting or unconfirmed secondary sources -- these carry a
visible FLAGGED badge in both the recent-activity feed and the per-tech
deal list. Don't cite a flagged item as confirmed without checking its
summary text.