# Source updates / Theo dõi nguồn — J10

This preview feature records evidence and requests review; it never changes tax or valuation code. The public register contains links and limited source metadata, without source document redistribution or a new reuse licence. No money amounts, exchange rates or measurements are calculated here. Existing shared currency components remain the responsibility of their original module.

## Reproduce a check

Run from the repository worktree, with Node.js 22 or later. Write evidence outside public/:

```sh
# Rebuild the two HTML pages and register from documented metadata (writes J10 namespaces):
python3 tools/investor/updates/build.py
node tools/investor/updates/snapshot.mjs local ~/work/research/v3-build/10-theo-doi-nguon/local-new.json
node tools/investor/updates/snapshot.mjs compare public/investor/updates/registry.json ~/work/research/v3-build/10-theo-doi-nguon/local-new.json ~/work/research/v3-build/10-theo-doi-nguon/local-diff.json
node tools/investor/updates/check-remote.mjs public/investor/updates/registry.json ~/work/research/v3-build/10-theo-doi-nguon/remote-new
node --test tests/investor-updates.test.mjs
```

The remote command defaults to policy-pending: each host needs a documented review of its public terms (fetchPolicy.termsUrl, reviewedAt, status=cleared) in a research copy of the register before retrieval. This is a source rights review, not product approval. It then fetches robots.txt and conservatively pauses when any disallow is present or robots cannot be read. It spaces requests by at least five seconds per host, respecting a longer Crawl-delay, does not follow redirects, and stops a host on 403/429/captcha. No proxy, login, alternate API or retry to bypass a block. Keep blocked sources stopped across runs; do not clear policy without new permission evidence. The same research output directory retains host-stops.json across runs; blocked/dead entries in the input register are also skipped. Run one collector per host; do not launch concurrent collectors. errors.json lists failed/unknown sources with check dates and URLs. No network means unknown, never unchanged.

For remote bytes, contentHash stays null until a separate content review; PDFs with changed signatures may need inspection despite matching extracted text. The local text fingerprint normalizes line endings and horizontal whitespace, not legal meaning. Matching fingerprints do not prove unchanged legal effect. The comparison checks date metadata independently of hashes. No automatic extraction of publication/effective dates from URLs or crawl dates.

## Interpret the result

- unknown: outage, missing baseline or missing source; restore evidence before relying on it.
- review: metadata/content differences or missing dates; read original articles/paragraphs and effective/amendment chain.
- candidate: new source, draft, or changed price unit/jurisdiction; keep out of active rules until reviewed.
- technical: byte change with equal normalized text fingerprint; still retain both hashes and inspect source packaging.
- unchanged: no difference in the two successful snapshots; no certification of current law.

NĐ68 → NĐ141 is an amendment relationship. NQ43 is a related conditional measure, not an asserted replacement of all prior rules. Compare each instrument and propagate Q19/Q20/Q25 impacts without changing tax results. Consolidated texts have unknown blanket effective dates. IssuedAt, publishedAt, checkedAt and metadataReviewedAt have separate meanings; null means unknown. Source hashes inherited from another task are labelled in hashProvenance. Local metadata checks do not recheck source URLs.

Freeze output hashes before independent source review; preserve originals in the research directory, read them again independently, then publish deliberately reviewed metadata. Never run shared generators from this task. Suggested weekly review is a proposal; no production cron, API fee or indexing request is created.

## Tiếng Việt

Người dùng có thể lọc nguồn, mở văn bản, tải snapshot và so tệp cũ trên thiết bị. Không đưa giấy tờ cá nhân vào tệp. Khi thiếu ngày hoặc nguồn lỗi: mở nguồn gốc, kiểm số văn bản/điều/khoản/kỳ áp dụng và lưu bằng chứng cùng kế hoạch. Không suy nguồn chết là văn bản hết hiệu lực hay luật không đổi. Chạy lệnh ở trên để tạo báo cáo mới; sổ công khai không tự cập nhật sau lệnh thu. B07 sẽ tích hợp menu/SEO và fragment EN sau khi kiểm URL production thực.
