Skip to content

mica.wtf Content Freshness Strategy

Internal planning document for keeping mica.wtf current across EU legislation, EU supervisory material, national competent authority material, and blog commentary. This document is not part of the GitBook navigation and should not be added to SUMMARY.md.

Freshness targets below are measured from the time an authoritative source publishes, updates, or republishes a relevant item.

SectionAuthoritative primary sourcesUpdate frequencyContent typesFreshness requirement
MiCA full legislative textEUR-Lex CELEX 32023R1114: https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=CELEX%3A32023R1114; ELI OJ page: https://eur-lex.europa.eu/eli/reg/2023/1114/oj/eng; EUR-Lex email/RSS alerts available from the document pageLow-volume, ad-hoc amendments or corrigendaRegulation text, consolidated text, corrigenda, amendments, delegated/implementing acts affecting cited articlesLegislative text must be checked weekly; any amendment/corrigendum must be reflected or queued within 2 business days. Static text older than 30 days without a source check is too stale.
ToFR full legislative textEUR-Lex CELEX 32023R1113: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32023R1113; ELI OJ page: https://eur-lex.europa.eu/eli/reg/2023/1113/oj/eng; EUR-Lex email/RSS alerts available from the document pageLow-volume, ad-hoc amendments or corrigendaRegulation text, consolidated text, corrigenda, amendments, delegated/implementing acts affecting crypto-transfer obligationsSame as MiCA: weekly source check; amendment/corrigendum reflected or queued within 2 business days; source-check age above 30 days is too stale.
ESMA standards, guidelines, Q&As, statements, opinionsESMA MiCA activity page: https://www.esma.europa.eu/esmas-activities/digital-finance-and-innovation/markets-crypto-assets-regulation-mica; ESMA Interactive Single Rulebook MiCA: https://www.esma.europa.eu/publications-and-data/interactive-single-rulebook/mica; ESMA Q&A page: https://www.esma.europa.eu/publications-and-data/questions-answers; MiCA Q&A search used by current checker: https://www.esma.europa.eu/esma-qa-search-page?field_qa_level1_target_id%5B0%5D=20011; ESMA news: https://www.esma.europa.eu/press-news/esma-newsQ&As can update weekly or monthly; technical standards and guidelines are ad-hoc; news/statements can appear any business dayFinal reports, consultation/final draft RTS/ITS, guidelines, Q&A answers, statements, opinions, warnings, MiCA register CSVsQ&A and news source checks daily on business days; final reports/guidelines checked daily; new Q&A should be staged within 24 hours; high-impact statements/warnings within same business day.
EBA technical standards, guidelines, Q&As, decisions, reportsEBA MiCAR page: https://www.eba.europa.eu/regulation-and-policy/asset-referenced-and-e-money-tokens-mica; EBA Interactive Single Rulebook: https://www.eba.europa.eu/regulation-and-policy/single-rulebook/interactive-single-rulebook; EBA Single Rulebook Q&A: https://www.eba.europa.eu/single-rule-book-qa; current MiCAR Q&A filter: https://www.eba.europa.eu/single-rule-book-qa/all?qa_legal_act%5B0%5D=18; EBA publications: https://www.eba.europa.eu/publications-and-media/publications; EBA news and press: https://www.eba.europa.eu/publications-and-media/press-releasesQ&As and publications are ad-hoc, often clustered around implementation dates; news can appear any business dayRTS/ITS, guidelines, opinions, Q&A answers, decisions, reports, supervisory priorities, statementsDaily business-day checks; new Q&A and technical material staged within 24 hours; high-impact statements within same business day.
ESMA MiCA registersESMA MiCA activity page, register section: https://www.esma.europa.eu/esmas-activities/digital-finance-and-innovation/markets-crypto-assets-regulation-mica; ESMA databases and registers: https://www.esma.europa.eu/publications-and-data/databases-and-registers; ESMA registers portal help: https://registers.esma.europa.eu/publication/helpPageRegular interval republication; potentially daily/weekly during transitionCSV files for Title II white papers, ART issuers, EMT issuers, authorised CASPs, and non-compliant entitiesCheck daily. New register version should be detected within 24 hours. Register deltas should be queued for review unless Jacob approves a dedicated register section.
BaFin (Germany)BaFin MiCAR page: https://www.bafin.de/EN/Aufsicht/MiCAR/MiCAR_node_en.html; German source page: https://www.bafin.de/DE/Aufsicht/MiCAR/MiCAR_node.html; BaFin publications/news root: https://www.bafin.de/EN/PublikationenDaten/PublikationenDaten_node_en.htmlAd-hoc; guidance updates and FAQs can change without a new standalone documentNCA guidance, FAQs, notices, update tables, forms, interpretive guidance, warningsCheck twice weekly; page-hash changes queued within 48 hours; enforcement/warning items same business day.
AMF (France)AMF MiCA in-depth page: https://www.amf-france.org/en/news-publications/depth/mica; French MiCA topic page: https://www.amf-france.org/fr/sujets/mica; English crypto-assets taxonomy: https://www.amf-france.org/en/taxonomy/term/180; AMF news releases: https://www.amf-france.org/en/news-publications/news-releases/amf-news-releasesAd-hoc; topic page can update weekly near deadlinesNCA guidance, doctrine updates, application forms, white-paper notification procedures, warnings, transition noticesCheck daily for topic/news pages; in-depth page twice weekly; new MiCA-tagged items queued within 24 hours; warnings same business day.
Central Bank of Ireland (CBI)CBI MiCAR page: https://www.centralbank.ie/regulation/markets-in-crypto-assets-regulation; CBI news and media: https://www.centralbank.ie/news-media; CBI portal/forms linked from MiCAR pageAd-hoc; application process material changes around portal and authorisation deadlinesGuidance notes, application forms, key facts documents, STOR forms, transition notices, speeches/newsCheck daily; new files or date changes staged within 24 hours; application-process changes within same business day.
CSSF (Luxembourg)CSSF crypto-assets page: https://www.cssf.lu/en/crypto-assets/; MiCA/MiCAR page: https://www.cssf.lu/en/markets-in-crypto-assets-mica-micar/; French page: https://www.cssf.lu/fr/marches-de-crypto-actifs-mica-micar/; CSSF publications: https://www.cssf.lu/en/publications/Ad-hoc; guidance and FAQs update intermittentlyNCA guidance, FAQs, communiques, circulars, warnings, investor noticesCheck twice weekly; new or updated MiCA items queued within 48 hours; warnings same business day.
DNB + AFM (Netherlands)DNB MiCAR page: https://www.dnb.nl/en/sector-information/open-book-supervision/laws-and-eu-regulations/micar/; Dutch DNB page: https://www.dnb.nl/micar/; AFM crypto sector page: https://www.afm.nl/nl-nl/sector/cryptopartijen; AFM white papers page: https://www.afm.nl/nl-nl/sector/cryptopartijen/toezicht/white-papers; AFM news: https://www.afm.nl/en/sector/actueelAd-hoc; AFM/DNB division of responsibilities makes page updates likely around forms and registersNCA guidance, CASP authorisation material, white-paper processes, prudential/stablecoin guidance, newsCheck twice weekly; new guidance queued within 48 hours; authorisation process changes within same business day.
DFSA / Finanstilsynet (Denmark)DFSA article on DeFi and MiCA exemptions: https://www.dfsa.dk/news/2024/jun/crypto-assets_250624; DFSA news root: https://www.dfsa.dk/newsLow-volume, ad-hocNCA explanatory articles, principles papers, consultations, supervision noticesCheck weekly; new crypto/MiCA publication queued within 3 business days unless it is an enforcement/warning item.
IOSCOIOSCO crypto and digital assets workstream: https://www.iosco.org/crypto_assets/; IOSCO publication library: https://www.iosco.org/library/; policy recommendations PDF: https://api.iosco.org/library/pubdocs/pdf/IOSCOPD755.pdfLow-volume, ad-hoc global standard-setter outputRecommendations, consultation reports, implementation reports, joint FSB/IOSCO reportsCheck weekly; new crypto/digital-assets reports queued within 3 business days.
Additional NCAs to add (CySEC, MFSA, CNMV, etc.)CySEC EEA CASP register: https://www.cysec.gov.cy/en-GB/entities/crypto-asset-services-providers-casps/eea-casps/; MFSA crypto-assets page: https://www.mfsa.mt/our-work/crypto-assets/; MFSA virtual financial assets page: https://www.mfsa.mt/our-work/virtual-financial-assets/; CNMV MiCA page: https://www.cnmv.es/portal/mica/regulacion-criptoactivos.aspx?lang=esAd-hoc; jurisdiction-specificNCA guidance, applications, transition notices, warnings, registersAdd only after creating source-specific checkers. Default to twice-weekly checks and 48-hour queueing until source behavior is measured.
BlogPrimary sources above plus Official Journal daily publication: https://eur-lex.europa.eu/oj/direct-access.html; European Commission digital finance page: https://finance.ec.europa.eu/digital-finance_en; ESMA/EBA/NCA news feeds/pagesEditorial cadence, not source cadenceCommentary, explainers, update posts, deadline reminders, regulatory newsBlog should never auto-publish. Proposed topics may be generated daily; human-authored or human-reviewed posts should publish within 2 business days for major regulatory changes.
scripts/update-checkers/
sources/
eurlex-mica.js
eurlex-tofr.js
esma-mica-docs.js
esma-mica-qas.js
esma-mica-registers.js
eba-micar-docs.js
eba-micar-qas.js
nca-bafin.js
nca-amf.js
nca-cbi.js
nca-cssf.js
nca-dnb-afm.js
nca-dfsa.js
iosco-crypto-assets.js
lib/
fetch.js
hash.js
manifests.js
classify.js
markdown.js
telegram.js
run-checker.js
run-all.js
.freshness/
manifests/
diffs/
logs/
dead-letter/
generated/

Naming convention: checker files use <source>-<scope>.js; NCA checkers use nca-<authority>.js. Each checker exports sourceId, sourceName, sourceUrls, run(), and classify(item).

Run schedules in UTC through Hermes cron, not raw crontab. Staggering avoids simultaneous load on official sites and makes Telegram alerts easier to read. The checked-in wrapper is scripts/update-checkers/run-group.sh; production no-agent jobs use ~/.hermes/scripts/micawtf-*.sh launchers so Hermes can deliver script stdout directly to Telegram.

micawtf-esma 5 7 * * 1-5 ESMA Q&A, documents, and MiCA register
micawtf-eba 25 7 * * 1-5 EBA Q&A and publications
micawtf-nca-daily 5 8 * * 1-5 NCA high-priority pages
micawtf-nca-weekly 45 8 * * 2,5 Lower-volume NCAs and IOSCO
micawtf-legislation 15 9 * * 1 EUR-Lex legislative text checks
micawtf-blog-signals 15 12 * * 1-5 Blog topic discovery, queue only
micawtf-daily-audit 30 16 * * 1-5 Freshness audit and stale-source alert

See scripts/update-checkers/README.md for the exact hermes cron create commands.

Freshness automation changes the editorial order, not the publication controls. The default publishing runway is the issue #37 MiCA review consultation series in _drafts/blog-queue.md under Series fallback. Cron-driven findings enter Triggered or the appended checklist queue and preempt that series only when they are urgent, date-sensitive, or materially stronger than the next planned series part. If nothing fresh clears that bar, publish the next queued issue #37 series part. If both are blocked, use the evergreen queue.

Before drafting, run:

Terminal window
node scripts/editorial-status.js

The command reads _drafts/blog-queue.md and recent .freshness/logs/ events and prints the recommended lane. It is an editorial triage aid only; blog posts remain human-authored or human-reviewed and never auto-publish.

The weekly editorial clock is scripts/editorial-clock.js. In production the Hermes launcher runs it with --dispatch --commit, which creates the draft assignment, sets the review deadline, updates the queue, commits the dispatch, pushes it, and lets Hermes deliver stdout to Telegram. Daily review SLA reminders and auto-parking live in scripts/editorial-review-nudge.sh. Publishing remains gated by scripts/publish-draft.sh, which requires status: Approved before moving a draft into spaces/blog/.

Each checker should:

  1. Fetch the configured source URLs with a consistent user agent, timeout, retry policy, and last-known ETag/Last-Modified headers where available.
  2. Normalize the response into structured items. Use DOM parsing or CSV/JSON parsing where available; do not rely on brittle substring matching for primary detection.
  3. Compute stable identifiers from official IDs first, then canonical URLs, then content hashes.
  4. Compare against .freshness/manifests/<sourceId>.json.
  5. Emit a JSON result and optional human-readable diff.
  6. Classify findings as auto_publish_candidate, review_required, needs_classification, source_error, or no_change.

Signals:

SignalMeaningAction
New official ID or URLNew document/Q&A/publication foundGenerate pending Markdown or auto-publish if governance allows.
Existing item content hash changedSource changed existing materialQueue diff for human review unless it is a harmless metadata-only change.
Publication date changedSource corrected or republished an itemQueue review and include old/new date in alert.
ETag/Last-Modified unchanged and item count unchangedNo changeUpdate last_checked_at only.
Fetch failure after retriesSource unreachableRecord source error and alert based on source criticality.
Parser cannot map item to known typeChange detected but not classifiedSend to dead-letter queue.

Checker output should be a JSON event file, one per run:

{
"run_id": "2026-06-06T07-05-00Z-esma-mica-qas",
"source_id": "esma-mica-qas",
"checked_at": "2026-06-06T07:05:00Z",
"status": "changed",
"source_urls": [
"https://www.esma.europa.eu/esma-qa-search-page?field_qa_level1_target_id%5B0%5D=20011"
],
"counts": {
"seen": 42,
"new": 2,
"changed": 0,
"errors": 0
},
"items": [
{
"source_item_id": "ESMA_QA_2671",
"canonical_url": "https://www.esma.europa.eu/esma-qa-search-page?field_qa_level1_target_id%5B0%5D=20011",
"title": "White paper obligations...",
"type": "q-and-a",
"authority": "ESMA",
"published": "2026-06-01",
"content_hash": "sha256:...",
"classification": "auto_publish_candidate",
"target_path": "eu-level/q-and-a/esma-qa-2671-white-paper-obligations.md",
"review_reason": null
}
]
}

Manifests live in .freshness/manifests/<sourceId>.json and contain canonical state only: source item IDs, URLs, hashes, known target files, last seen dates, and last successful check time. Diffs live in .freshness/diffs/<sourceId>/<runId>/.

checker
-> structured JSON event
-> manifest comparison
-> classification
-> generated Markdown in .freshness/generated/ or dead-letter entry
-> quality gates
-> move approved files into content tree
-> node scripts/build-summary.js
-> git diff validation
-> git commit with source-specific message
-> git push
-> Telegram ping with result and links

build-summary.js should run only after content files are moved into the live tree. It should not run for queue-only or dead-letter-only detections.

All newly generated standards/NCA/blog files should include:

---
title: ""
shortTitle: ""
type: ""
authority: ""
jurisdiction: ""
id: ""
published: ""
updated: ""
status: ""
source_page: ""
source_pdf: ""
source_hash: ""
source_checked_at: ""
freshness_status: current
review_status: auto-generated
reviewed_by: ""
reviewed_at: ""
topics: []
related_articles: []
---

Legislative article files should not be regenerated automatically unless an amendment workflow is built. For amendment notes, use amendment_source, celex, oj_reference, effective_from, and affected_articles.

FieldAuto-generatableHuman review needed
title, shortTitle, type, authority, jurisdictionYes, from source metadata and classifierReview if classifier confidence is below 0.85 or title is machine-translated.
id, published, updated, source_page, source_pdf, source_hash, source_checked_atYesReview only if missing or conflicting.
statusPartlyHuman review if legal force is unclear: draft, final draft, adopted, in force, withdrawn, superseded.
topics, related_articlesPartlyHuman review for low-confidence article mapping or broad reports.
Body summary and key provisionsPartlyRequired for enforcement, warnings, opinions, blog, source changes, and all legislative amendments.
review_status, reviewed_by, reviewed_atYes for workflow defaultsHuman action required to publish review-only items.
SectionNew file must containQuality gates before commit
MiCA / ToFR legislative changesAmendment note, affected articles, old/new source references, effective date, EUR-Lex source linkNever auto-commit legislative text changes. Require CELEX match, diff against current article, and human approval.
ESMA/EBA Q&AQuestion ID, question, answer summary, relevant MiCA/ToFR articles, source URL, publication/update dateAuto-commit allowed only if official ID, source URL, date, and answer text are extracted; minimum 150 body words; at least one related article or explicit related_articles: [] with reason.
ESMA/EBA final reports and guidelinesScope summary, key provisions, relevant articles, implementation/application dates, source PDF/pageRequire source PDF or official page, minimum 250 body words, at least 3 key provisions, status classification, and no broken relative links.
EBA decisions/opinions/reportsDecision/report type, legal basis, affected entities, key obligations or findingsHuman review unless routine Q&A. Minimum 200 body words and official ID if available.
NCA guidanceAuthority, jurisdiction, audience, what changed, operational impact, source page/PDFHuman review by default. Minimum 200 body words, language noted if not English, and no unsupported legal conclusions.
NCA warnings/enforcementAuthority, jurisdiction, entity/person named, action type, date, source link, legal basisHuman review required. No auto-commit. Alert immediately.
IOSCOReport type, recommendation area, MiCA relevance, source PDFHuman review required. Minimum 250 body words and explicit explanation of EU/MiCA relevance.
BlogThesis, sources, implications, date-sensitive caveatsHuman authored or reviewed only. No auto-commit. Follow _conventions/blog-content.md: public mica.wtf links for internal targets, no GitHub blob links for site content, and social copy kept in _drafts/social/<slug>.md instead of the article Markdown.

On timeout, DNS error, HTTP 5xx, or persistent HTTP 403:

  1. Retry twice with exponential backoff.
  2. Preserve the prior manifest.
  3. Write .freshness/logs/<sourceId>/<runId>.json.
  4. Set source status to degraded after one failed run and down after three consecutive failed runs.
  5. Send Telegram alerts only when the source is high priority or has failed three consecutive runs.

HTTP 404 on a previously known canonical URL is a high-priority change, not a normal fetch failure. Queue it as source_removed_or_moved.

If a checker finds a changed hash, new URL, unknown document type, or non-English page that cannot be mapped with confidence:

.freshness/dead-letter/<sourceId>/<runId>/<sourceItemId>.json
.freshness/dead-letter/<sourceId>/<runId>/<sourceItemId>.html
.freshness/dead-letter/<sourceId>/<runId>/<sourceItemId>.md

The JSON file should include the raw metadata, classifier scores, fetch URL, content hash, proposed target section, and reason classification failed.

Use a concise severity prefix and one message per source run unless an urgent item is found.

[mica.wtf][INFO] ESMA MiCA Q&A: no change. checked=42 run=2026-06-06T07:05Z
[mica.wtf][NOTICE] EBA MiCAR Q&A: 2 new Q&As staged. auto=2 review=0 commit=abc123
[mica.wtf][REVIEW] AMF MiCA: 1 new guidance item requires review. queue=.freshness/dead-letter/nca-amf/...
[mica.wtf][URGENT] BaFin warning/enforcement item detected. No publish. Review source URL in dead-letter entry.
[mica.wtf][ERROR] EUR-Lex MiCA unreachable after 3 attempts. last_success=2026-06-01T09:15Z

Severity:

SeverityUse forExpected action
INFONo change, audit passNo action.
NOTICEAuto-staged or auto-committed routine updatesReview opportunistically.
REVIEWHuman review queue createdReview within freshness SLA.
URGENTEnforcement, warnings, legislative amendments, source removalsSame-business-day human review.
ERRORSource unreachable, parser broken, commit/push failureFix automation or monitor source.

Safe to auto-commit after quality gates:

SectionAuto-commit?Conditions
ESMA Q&AYesOfficial ESMA_QA_* ID, source URL, answer text, and article mapping present.
EBA Single Rulebook Q&AYesOfficial YYYY_NNNN ID, source URL, answer text, and MiCAR legal-act filter match.
Routine source-check manifests/logsNo live-site commit neededKeep operational artifacts out of Git unless Jacob wants history.

Human review required before publish:

SectionReason
MiCA and ToFR legislative text changesLegal text integrity and amendment handling.
ESMA/EBA final reports, guidelines, opinions, decisions, reportsStatus and legal-force classification can be nuanced.
All NCA publicationsJurisdictional context and language issues.
Enforcement actions, warnings, non-compliant entity register changesDefamation, sensitivity, and legal accuracy risk.
IOSCO materialRelevance to MiCA may be indirect.
Blog postsEditorial judgment and source synthesis.

If a source changes an existing document:

  1. Preserve existing file.
  2. Generate a diff file under .freshness/diffs/.
  3. Add or update updated, source_hash, and source_checked_at only after review.
  4. If the official source supersedes a prior document, mark the old page status: Superseded and add superseded_by.
  5. If sources conflict, prefer the newest official primary source from the responsible authority. Do not reconcile by using law-firm summaries or media reports.

Use Git as the canonical version history. For user-facing pages, add a short ## Change history section only when a document has materially changed after publication:

## Change history
- 2026-06-06: Updated source metadata after ESMA republished the Q&A answer.
- 2026-06-01: Initial publication based on ESMA_QA_2671.

For legislative amendments, keep a dedicated internal amendment log in .freshness/diffs/legislation/ and publish a human-reviewed note before editing article text.

Phase 1: High-Value Detection and Review Queues (18-26 agent hours)

Section titled “Phase 1: High-Value Detection and Review Queues (18-26 agent hours)”

Build first:

  • Replace or wrap scripts/check-updates.js with scripts/update-checkers/run-all.js while preserving existing ESMA/EBA Q&A behavior.
  • Implement shared fetch, hash, manifest, and Telegram helpers.
  • Implement ESMA Q&A, EBA Q&A, ESMA MiCA documents, EBA MiCAR documents, and EUR-Lex MiCA/ToFR checkers.
  • Create JSON event output, manifests, diff directories, and dead-letter queues.
  • Add quality gates for generated Q&A files.

Why first: ESMA/EBA Q&As and documents are high-value, already partially covered, and have the clearest source structure.

Phase 2: NCA Expansion and Human Review Workflow (20-32 agent hours)

Section titled “Phase 2: NCA Expansion and Human Review Workflow (20-32 agent hours)”

Build next:

  • Add BaFin, AMF, CBI, CSSF, DNB/AFM, DFSA, and IOSCO checkers.
  • Implement page-hash diffing with DOM normalization for pages that do not expose structured feeds.
  • Add review queue summaries and Telegram REVIEW/URGENT alert routing.
  • Add source-specific classification rules for guidance, forms, warnings, enforcement, and topic pages.
  • Add freshness audit that flags stale source checks.

Why second: NCA material has higher classification risk and needs reliable review queue mechanics before any publishing.

Phase 3: Self-Healing Generation and Broader Automation (24-40 agent hours)

Section titled “Phase 3: Self-Healing Generation and Broader Automation (24-40 agent hours)”

Build last:

  • Add generated Markdown templates for ESMA/EBA reports and NCA guidance.
  • Add source PDF download, checksum, and optional text extraction for comparison.
  • Add broken-link validation and relative-link validation before auto-commit.
  • Add auto-generated branch/PR mode for review-required changes if Jacob prefers not to publish from the main branch.
  • Add ESMA MiCA register CSV delta ingestion and optional register pages.
  • Add a dashboard or report page summarizing last source checks, stale sources, and pending review items.

Why last: generation beyond Q&A requires stronger legal/status classification and more robust review tooling.

  1. Should routine ESMA/EBA Q&As auto-publish to the live site after quality gates, or should they be staged for review first?
  2. Should NCA updates always require human review, or can low-risk form/template changes auto-publish?
  3. Should operational artifacts under .freshness/ be committed to Git, ignored, or stored externally?
  4. Should Telegram alerts go to one channel, or should URGENT alerts route to a separate channel/chat?
  5. Do we want a public MiCA register section for ESMA CSV deltas, or only internal monitoring?
  6. Who is the named reviewer for reviewed_by values: Jacob only, or a broader reviewer list?
  7. Should blog topic detection create draft Markdown files, issue-style queue entries, or Telegram-only prompts?
  8. For non-English NCA pages, should the site publish English summaries only, or preserve translated excerpts with original-language labels?
  9. Should source PDFs be stored locally for archival integrity, or should mica.wtf link only to official PDFs?
  10. What is the acceptable same-day response window for urgent warnings/enforcement items: 4 business hours, end of day, or next morning?