TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Crawls the webpages gathers content uses AI to make analysis on what changed
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗ChangeSentinel is a configuration-driven regulatory monitoring and review system. It discovers public pages and linked documents within explicitly defined source boundaries, fetches and extracts their contents, compares observations against trusted baselines, preserves evidence for meaningful changes, and uses AI to help explain potential regulatory significance.
It is more than a crawler: the repository combines a scheduled monitoring engine, a publication-discovery workflow called Scout, durable change evidence and run history, notifications, and a browser-based review console. GitHub Actions provides the automation, so the core monitor does not require a permanently running server.
flowchart TD
A["Configured active source<br/>config/sources.json"] --> B["Discover in-scope URLs"]
B --> C["Fetch pages and documents"]
C --> D["Extract content<br/>HTML · PDF · Office"]
D --> E["Normalize text and fingerprint source"]
E --> F{"Compare with prior baseline"}
F -->|Unchanged| G["Record check / history"]
F -->|Changed| H["Classify technical event"]
F -->|Same source, parser drift| I["Record baseline migration<br/>no regulatory alert"]
H --> J["Save immutable snapshots<br/>and text / HTML diffs"]
J --> K["Conservative relevance triage"]
K --> L["AI interpretation<br/>when configured and eligible"]
L --> M["Validate report and queue notifications"]
M --> N["Commit monitoring state"]
N --> O["Deliver idempotent notifications"]
G --> P["Dashboard and run history"]
I --> P
J --> P
L --> P
O --> P
S["Scout schedule / manual run"] --> T["Read configured feeds,<br/>sitemaps and listing pages"]
T --> U["Rank and enrich publication candidates"]
U --> V["Scout review queue"]
V -->|Owner reviews candidate| W["Record Not relevant / Restore decision"]
V -->|Owner requests source change| X["Validate source request"]
X --> Y["Update Scout configuration"]
Y --> S
W --> V
P --> Z["Human review and follow-up"]
The scheduled monitor and Scout solve different problems:
Source definitions live in config/sources.json. The engine starts from configured seeds and discovers resources within the source's allowed scope. Active configuration determines what is run; a source described in history or retained as inactive is not automatically monitored.
The active fleet includes two Federal Reserve reporting-forms pilots (overview and recently updated form details), plus individually registered pages and documents such as Federal Reserve/FRB Services reporting materials and OSFI's BCAR materials. The older EBA monitoring configurations are inactive; EBA remains present as a separate Scout discovery profile. The exact active scope is defined by the configuration, not by this summary.
The discovery layer canonicalizes URLs and applies source-specific rules to avoid treating superficial URL differences as separate resources. Discovery results and failures are recorded so an incomplete crawl is not confused with a complete inventory.
The fetch and extraction layers turn supported web content into comparable evidence. HTML extraction filters common non-content elements—such as scripts, styles, navigation, footers, and cookie/banner containers—where appropriate. PDF and office-document paths use document extraction tooling, with fallback behavior for supported formats.
The system retains the fetched HTML response separately from normalized extracted text. That distinction allows the dashboard to show the original page/source and compare it with the extracted text used for change detection.
Normalized text removes irrelevant formatting differences such as repeated whitespace, empty lines, and Unicode representation differences. A SHA-256 fingerprint of the normalized content is the primary text comparison signal.
Typical event types include:
| Event | Meaning |
|---|---|
NEW_URL | A URL appears in the discovered inventory for the first time. |
CHANGED_URL | Normalized extracted content changed. |
HTML_SOURCE_CHANGED | The stable HTML comparison signature changed while extracted text stayed the same. |
UNCHANGED_URL | The content comparison is unchanged. |
REMOVED_URL | A previously monitored URL is absent from a complete discovery result, subject to removal safeguards. |
FETCH_ERROR | The resource could not be fetched successfully. |
EXTRACTION_ERROR | The resource was fetched but could not be converted into usable text. |
BASELINE_MIGRATION | Extracted output changed while the underlying source is proven unchanged, for example after an extractor upgrade or extraction drift. |
The monitor includes safeguards against noisy changes. Rotating Cloudflare challenge metadata is normalized for HTML comparison while raw response evidence is retained. Large sudden URL removals are held for confirmation; browser-only discovery requires absence across consecutive complete crawls before removal is reported. Parser-version changes or extraction drift on byte-identical sources are recorded as baseline migrations rather than regulatory changes.
Meaningful events preserve evidence under data/evidence/, with snapshots under data/snapshots/. Content-addressed HTML snapshots avoid overwriting evidence referenced by older events. Depending on the event, the record can include previous/current fingerprints, extracted-text diffs, formatted HTML-source diffs, and snapshot locations.
Specification files get a row-level reading as well (regmon/spec_diff.py): edit-check and validation-rule workbooks are aligned by rule ID, data dictionaries and PDF field-spec tables by field code (MDRM, DPM, measure, formato), XSDs by element path and code list, and XBRL linkbases by assertion. A change then says which rules are new or retired and from when, which logic or messages changed, which checks became blocking, and where the regulator's own "New / Updated / Deprecated" annotation disagrees with what actually changed. python -m regmon.spec_diff PREV CUR -o report.xlsx runs the same comparison on two local files and writes an analyst workbook with Impact and comment columns; a file's own release notes are audited against what changed, and changed rows' effective dates go into the calendar. python -m regmon.spec_conformance SPEC OURS -o gaps.xlsx checks our own rule library or data dictionary against the regulator's spec (see docs/OPERATIONS.md).
The AI interpretation layer receives candidate change evidence and returns a strict structured assessment with fields for relevance, topic, change type, summary, impact, effective date, affected scope, suggested actions, and rationale. It is instructed to use only the supplied evidence and to state when a value is not established. AI is an aid for triage and explanation—not a substitute for source verification or professional judgment.
Notifications are sent through ntfy for eligible relevant changes and configured operational events. Event identifiers prevent duplicate delivery. Notifications are queued in a durable outbox, monitoring state is validated and committed first, and delivery state is recorded afterward so failures can be investigated and retried safely.
Important runtime state includes:
| Path | Purpose |
|---|---|
data/latest.json | Latest per-source monitored URL inventory and baseline metadata. |
data/report.json, data/report.md | Aggregate latest report. |
data/reports/ | Per-source reports. |
data/snapshots/ | Saved normalized text and raw HTML snapshots. |
data/evidence/ | Event evidence and diffs. |
data/history/ | Compact index and full per-run history. |
data/notifications.json | Notification idempotency state. |
data/notification-outbox.json | Durable queue of notifications awaiting delivery. |
Scout is a separate, configuration-driven discovery workflow. Its profiles in config/scout.json describe regulators, regions, permitted hosts, languages, and discovery channels such as sitemaps, feeds, and listing pages. Listing channels can use bounded pagination and depth-limited exploration. Per-regulator request, time, response-size, and delay limits constrain discovery.
Scout runs weekly and can also be dispatched manually for all active profiles or a selected regulator. It records sweep history, candidate evidence, and review decisions under data/scout/. The dashboard's Scout view shows candidate pages and the signals behind the discovery decision.
Owner-initiated dashboard requests can record Not relevant or Restore decisions, or request a source/profile change. The workflows validate requests before updating Scout state/configuration. A newly discovered candidate is not silently promoted into the monitoring engine: source expansion remains an explicit, reviewable action.
The GitHub Pages console is a lightweight, dependency-conscious frontend built around index.html, dashboard.js, dashboard-lib.js, and dashboard-v2.html. Monitoring JSON is read from the repository, so data-only monitoring commits can update the dashboard without rebuilding the static site.
The workspace includes:
The console is designed for desktop and mobile layouts. Its pure presentation logic is separated into dashboard-lib.js and has automated tests.
GitHub Actions orchestrates monitoring, testing, discovery, and publishing.
| Workflow | Responsibility |
|---|---|
RegMonitor CI (.github/workflows/ci.yml) | Unit/regression tests, Python compilation, extraction checks, Edge Function type checks/tests, and dashboard browser smoke tests. |
Regulatory Monitor | Scheduled or manual source scan, extraction, comparison, evidence/report generation, state validation, commit, and notification delivery. |
AI Smoke Test | Non-mutating check of the configured OpenRouter integration and its structured JSON contract. |
Scout | Scheduled or manually requested publication discovery and Scout-state persistence. |
Scout Review Decision | Processes owner-submitted Scout review decisions. |
Scout Source Request | Validates and applies owner-submitted Scout source/profile requests. |
Deploy Monitoring Console (pages.yml) | Publishes the dashboard to GitHub Pages. |
The scheduled scan wakes every six hours and can also be triggered manually; each monitor may ask to be checked less often, on some weekdays or within local hours (see the scan schedules section of docs/OPERATIONS.md). Scout has its own weekly schedule. Check the workflow files for the authoritative schedules and required secrets.
Use Python 3.13, then install the repository's pinned dependencies:
git clone https://github.com/GauravDarwesh/ChangeSentinel.git
cd ChangeSentinel
python3.13 -m venv .venv
source .venv/bin/activate
python -m pip install --extra-index-url https://download.pytorch.org/whl/cpu -r requirements.txt
Run the test suite:
python -m unittest discover -s tests -p "test*.py" -v
python -m compileall -q regmon
Some extraction integration checks require system OCR tooling; CI installs Tesseract and exercises document extraction against synthetic and saved golden-corpus inputs. The dashboard can be served via a local static HTTP server or the configured GitHub Pages deployment.
Do not run a production scan or commit generated monitoring state unintentionally while experimenting. Review the workflow and configuration before using commands that write under data/.
config/sources.json.config/scout.json..
├── config/
│ ├── sources.json # Active/inactive monitoring source definitions
│ └── scout.json # Scout regulator profiles and discovery channels
├── regmon/ # Monitoring engine, extraction, comparison, AI, state, Scout
├── scripts/ # State commits, extraction checks, dashboard smoke tests
├── tests/ # Python and dashboard/Edge Function regression tests
├── supabase/functions/ # Ask Sentinel, calendar, and page-reader APIs
├── data/ # Baselines, reports, evidence, history, Scout state
├── index.html # Main dashboard shell
├── dashboard.js # Dashboard interactions and rendering
├── dashboard-lib.js # Pure dashboard logic and formatting
└── .github/workflows/ # CI, monitoring, Scout, and Pages automation
ChangeSentinel monitors public sources configured in the repository; it is not a guarantee that every publication from every regulator is discovered. Coverage depends on source configuration, publisher site structure, crawl limits, fetchability, and extraction quality. A technically detected change may not be relevant, and an AI assessment can be incomplete or wrong. Review the preserved source and diff before acting on an assessment.
An inactive source is not scheduled for routine monitoring. Scout candidates are suggestions until reviewed. The project is designed to make evidence and uncertainty inspectable rather than claim perfect coverage or automated regulatory compliance.
There is currently no LICENSE file in the repository. Do not assume the code is available for reuse or redistribution under an open-source license until the repository owner adds or clarifies licensing terms.