@blamejs/exceptd-skills 0.16.12 → 0.16.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +3 -1
- package/CHANGELOG.md +8 -0
- package/README.md +5 -5
- package/bin/exceptd.js +4 -1
- package/data/_indexes/_meta.json +17 -15
- package/data/_indexes/activity-feed.json +16 -2
- package/data/_indexes/chains.json +21663 -4894
- package/data/_indexes/currency.json +19 -1
- package/data/_indexes/frequency.json +103 -40
- package/data/_indexes/handoff-dag.json +9 -1
- package/data/_indexes/jurisdiction-map.json +7 -3
- package/data/_indexes/section-offsets.json +170 -0
- package/data/_indexes/stale-content.json +1 -1
- package/data/_indexes/summary-cards.json +76 -0
- package/data/_indexes/token-budget.json +103 -3
- package/data/_indexes/trigger-table.json +99 -0
- package/data/_indexes/xref.json +41 -3
- package/data/cwe-catalog.json +12 -2
- package/data/playbooks/audit-log-integrity.json +637 -0
- package/data/playbooks/cred-stores.json +1 -0
- package/data/playbooks/crypto.json +18 -5
- package/data/playbooks/framework.json +2 -0
- package/data/playbooks/mail-server-hardening.json +3 -1
- package/data/playbooks/network-trust.json +647 -0
- package/data/playbooks/vc-wallet-trust.json +2 -1
- package/manifest-snapshot.json +105 -2
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +157 -46
- package/package.json +2 -2
- package/sbom.cdx.json +96 -36
- package/skills/audit-log-integrity/skill.md +80 -0
- package/skills/network-trust/skill.md +81 -0
package/AGENTS.md
CHANGED
|
@@ -156,7 +156,7 @@ Cross-cutting playbook `framework` is the natural correlation layer — many pla
|
|
|
156
156
|
|
|
157
157
|
| Verb | What it does |
|
|
158
158
|
|---|---|
|
|
159
|
-
| `exceptd brief --all` | Grouped-by-scope summary of all
|
|
159
|
+
| `exceptd brief --all` | Grouped-by-scope summary of all 28 playbooks. `--scope <type>` filters. `--directives` expands directive IDs/titles per playbook. `--flat` for non-grouped. `exceptd plan` was removed in v0.13.0; invoking it returns a structured `ok:false` refusal pointing at this command. |
|
|
160
160
|
| `exceptd brief <pb>` | Phase 2 threat-context briefing — threat context, RWEP thresholds, skill chain, token budget, jurisdiction obligations. |
|
|
161
161
|
| `exceptd run <pb> --evidence <file>` | Phases 5-7 (analyze + validate + close) from agent evidence. Auto-detect cwd when no playbook positional. `--vex <file>` drops CycloneDX/OpenVEX `not_affected` CVEs. `--diff-from-latest` for drift mode. `--force-stale` overrides currency hard-block. |
|
|
162
162
|
| `exceptd ai-run <pb>` | Streaming variant of `run` for AI agents; emits phase-by-phase NDJSON. |
|
|
@@ -452,6 +452,8 @@ When in doubt, ship the playbook without a collector and open the gap as a follo
|
|
|
452
452
|
| identity assurance, aal, ial, fal, fido2, webauthn, passkey, oidc, saml | identity-assurance |
|
|
453
453
|
| verifiable credential, digital wallet, sd-jwt-vc, oid4vp, mdoc, eudi wallet, eidas 2.0, did:web, status list, credential verifier | vc-wallet-trust |
|
|
454
454
|
| mail server hardening, smtp smuggling, starttls injection, open relay, imap command injection, managesieve, sieve redirect, mailbox dav, pop3, mx hardening | mail-server-hardening |
|
|
455
|
+
| network trust, adversary in the middle, aitm, dnssec, dane, tlsa, tsig, mtls pinning, http message signature, dns rebinding, nts, authenticated time | network-trust |
|
|
456
|
+
| audit log integrity, tamper evident logging, hash chain, worm, object lock, legal hold, honeytoken, break glass, dual control, anti forensics, separation of duties | audit-log-integrity |
|
|
455
457
|
| ot security, ics security, scada, plc, iec 62443, nist 800-82, nerc cip | ot-ics-security |
|
|
456
458
|
| cvd, vdp, bug bounty, iso 29147, iso 30111, csaf, security.txt | coordinated-vuln-disclosure |
|
|
457
459
|
| threat model, stride, pasta, linddun, kill chain, diamond model, unified kill chain | threat-modeling-methodology |
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.16.14 — 2026-06-02
|
|
4
|
+
|
|
5
|
+
New `audit-log-integrity` playbook and skill audit whether the system-of-record audit trail survives the privileged or insider attacker most likely to tamper with it: a hash chain that is written but never verified on read, audit entries unsigned or signed with a key co-located with the log writer, WORM storage in governance/override mode (a privileged role can still delete) rather than compliance mode, legal holds that annotate but do not block the retention purge, the log-writing identity also able to delete its own log, and missing or untriaged honeytokens plus unwitnessed break-glass access. It maps to NIST 800-53 SI-2, ISO 27001 A.8.15, NIS2 Art.21, and SOC 2 CC7. Run it with `exceptd brief audit-log-integrity` or `exceptd run audit-log-integrity`. The recently added `vc-wallet-trust`, `mail-server-hardening`, and `network-trust` playbooks now also map UK CAF and AU ISM, so their framework-gap output is complete on multi-jurisdiction runs.
|
|
6
|
+
|
|
7
|
+
## 0.16.13 — 2026-06-02
|
|
8
|
+
|
|
9
|
+
New `network-trust` playbook and skill audit the trust-anchor validation beneath TLS that adversary-in-the-middle attacks exploit: DNSSEC not validated end-to-end, DANE/TLSA not checked on capable peers, zone operations without TSIG, mTLS trusting a broad CA bundle instead of a pinned private CA, RFC 9421 HTTP message signatures unverified or under-scoped, DNS rebinding unguarded (SSRF into internal addresses), and unauthenticated NTP whose clock shift can revive expired certificates or shift TOTP windows. It maps to the DNSSEC resolver-DoS catalog entries (KeyTrap, NSEC3) and to NIST 800-53 SC-8, ISO 27001 A.8.21, NIS2 Art.21, and UK-CAF B4. Run it with `exceptd brief network-trust` or `exceptd run network-trust`.
|
|
10
|
+
|
|
3
11
|
## 0.16.12 — 2026-06-02
|
|
4
12
|
|
|
5
13
|
New `mail-server-hardening` playbook and skill audit the inbound mail-server protocol surface that sender authentication (SPF/DKIM/DMARC) and transport TLS do not protect: SMTP smuggling via a non-standard end-of-data sequence, STARTTLS receive-buffer command/response injection, IMAP/POP3 bare-CR-LF and ManageSieve PUTSCRIPT injection, uncapped Sieve `redirect` used as a mail-routing exfiltration primitive, an unauthenticated open relay, mailbox-DAV (CalDAV/CardDAV) path traversal and XXE, and cleartext AUTH offered before STARTTLS. It maps to the SMTP-smuggling (CVE-2023-51764/51766) and STARTTLS-injection (CVE-2021-38371/33515) catalog families and to NIST 800-53 SI-2, ISO 27001 A.8.8, NIS2 Art.21, and PCI-DSS 4.0 6.3.3. Run it with `exceptd brief mail-server-hardening` or `exceptd run mail-server-hardening`.
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
[](https://github.com/blamejs/exceptd-skills/actions/workflows/ci.yml)
|
|
15
15
|
[](https://scorecard.dev/viewer/?uri=github.com/blamejs/exceptd-skills)
|
|
16
16
|
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
17
|
-
[](#skill-inventory)
|
|
18
18
|
[](https://atlas.mitre.org)
|
|
19
19
|
[](https://attack.mitre.org)
|
|
20
20
|
[](AGENTS.md)
|
|
@@ -30,7 +30,7 @@ This platform surfaces what is actually happening right now. Every skill explici
|
|
|
30
30
|
|
|
31
31
|
## Status
|
|
32
32
|
|
|
33
|
-
Pre-1.0. Latest release lives on [GitHub Releases](https://github.com/blamejs/exceptd-skills/releases) and on npm as [`@blamejs/exceptd-skills`](https://www.npmjs.com/package/@blamejs/exceptd-skills) with signed npm provenance attestation and Ed25519-signed skill bodies. The package ships
|
|
33
|
+
Pre-1.0. Latest release lives on [GitHub Releases](https://github.com/blamejs/exceptd-skills/releases) and on npm as [`@blamejs/exceptd-skills`](https://www.npmjs.com/package/@blamejs/exceptd-skills) with signed npm provenance attestation and Ed25519-signed skill bodies. The package ships 46 skills across kernel LPE, MCP supply chain, AI-as-C2, prompt injection, post-quantum crypto, SBOM integrity, identity-incident response, and 35 other AI/security domains, plus 11 intelligence catalogs (CVE / ATLAS / ATT&CK / CWE / D3FEND / DLP / RFC / framework gaps / global frameworks / zero-day lessons / exploit availability) covering 35 jurisdictions; the CVE catalog holds 439 actively-exploited and high-priority entries, each carrying behavioral indicators, an ATT&CK technique mapping, and a defense-chain zero-day lesson. 28 investigation playbooks (kernel, MCP, AI-API, framework, SBOM, runtime, hardening, secrets, cred-stores, containers, crypto, plus `webhook-callback-abuse`, `cicd-pipeline-compromise`, `identity-sso-compromise`, `llm-tool-use-exfil`, `post-quantum-migration`, `ai-discovered-cve-triage`, `supply-chain-recovery`, `citation-hygiene`, `vc-wallet-trust`, `mail-server-hardening`, `network-trust`, `audit-log-integrity`, and more), a CLI for discovery and investigation built around `discover → brief → run → attest` (each run executes the playbook's seven-phase contract), and a nightly auto-refresh job that pulls KEV / NVD / EPSS / GHSA / OSV / IETF deltas plus 15 primary-source advisory, research-blog, and tech-press feeds (Qualys TRU, Red Hat RHSA, Ubuntu USN, ZDI, kernel.org, oss-security, JFrog, CISA, Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red, BleepingComputer security, and The Hacker News) into auto-PRs for editorial review, alongside a silent-regression watcher that flags historical CVEs re-broken without a new identifier.
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -144,7 +144,7 @@ exceptd help
|
|
|
144
144
|
First run — verify the signing chain and pin the public-key fingerprint for out-of-band checks:
|
|
145
145
|
|
|
146
146
|
```bash
|
|
147
|
-
exceptd doctor --signatures # verify Ed25519 chains (
|
|
147
|
+
exceptd doctor --signatures # verify Ed25519 chains (46/46 expected)
|
|
148
148
|
cat $(exceptd path)/keys/EXPECTED_FINGERPRINT # pin fingerprint for OOB verify
|
|
149
149
|
```
|
|
150
150
|
|
|
@@ -162,7 +162,7 @@ GitHub repo-pattern monitoring: `exceptd watchlist --org-scan --org <login>` pro
|
|
|
162
162
|
|
|
163
163
|
AI-assistant config-file audit: `exceptd doctor --ai-config` walks `~/.claude`, `~/.cursor`, `~/.codeium`, `~/.aider`, and `~/.continue`, flagging sensitive files (`settings.json`, `mcp.json`, `*.mcp_config.json`, `api_key*`, `*.token`, `*.credentials`) not at mode 0600 on POSIX. On Windows the mode bits aren't load-bearing; each finding is surfaced with an info-level "manual ACL review" note. Catches the AI-config-credential-exfil class that the Shai-Hulud framework targets. Opt-in — does not run as part of the default no-flag `doctor` pass.
|
|
164
164
|
|
|
165
|
-
Evidence-collection layer: `exceptd collect <playbook>` invokes a companion script under `lib/collectors/<playbook>.js` that walks cwd, applies the catalogued regex set, stats permissions, and emits the submission JSON in the same shape `exceptd run --evidence -` accepts. 14 of
|
|
165
|
+
Evidence-collection layer: `exceptd collect <playbook>` invokes a companion script under `lib/collectors/<playbook>.js` that walks cwd, applies the catalogued regex set, stats permissions, and emits the submission JSON in the same shape `exceptd run --evidence -` accepts. 14 of 28 playbooks have collectors today (`ai-api`, `cicd-pipeline-compromise`, `citation-hygiene`, `containers`, `cred-stores`, `crypto`, `crypto-codebase`, `hardening`, `kernel`, `library-author`, `mcp`, `runtime`, `sbom`, `secrets`); the remaining 14 are policy-skipped per AGENTS.md (judgement-shaped incident / governance / pure-analyze playbooks where AI-driven evidence collection is the design). Canonical operator pipe: `exceptd collect <pb> | exceptd run <pb> --evidence -`. `exceptd doctor --collectors` enumerates the layer; `exceptd discover` tags applicable playbooks with `[collector]` when one ships. `cicd-pipeline-compromise` requires `--attest-ownership` on the collect call (the playbook's `operator-owns-ci-fleet` precondition is opt-in to prevent unauthorized CI assessments).
|
|
166
166
|
|
|
167
167
|
Daily scheduled threat intake: a `routine: exceptd-threat-intake` (claude.ai remote agent) runs daily at 14:00 UTC. Sequence: `npm install` → `refresh --check-advisories` → `watchlist --alerts` → `refresh --apply` → `refresh --advisory <CVE-ID>` for up to 5 new CVE IDs from the primary-source feeds → re-sign + rebuild-indexes if the catalog mutated → commit on `intake/<YYYY-MM-DD>` branch with the full diff in the report. Closes the cadence gap that previously left fresh disclosures dependent on operator-triggered intake. Operator-managed at <https://claude.ai/code/routines>.
|
|
168
168
|
|
|
@@ -281,7 +281,7 @@ exceptd collect <playbook> Walk cwd + invoke the companion collector
|
|
|
281
281
|
under lib/collectors/<playbook>.js. Emits
|
|
282
282
|
a submission JSON ready to pipe into
|
|
283
283
|
`exceptd run <playbook> --evidence -`.
|
|
284
|
-
14/
|
|
284
|
+
14/28 playbooks have collectors; the rest
|
|
285
285
|
are AI-driven by design (incident /
|
|
286
286
|
governance / pure-analyze — see
|
|
287
287
|
AGENTS.md).
|
package/bin/exceptd.js
CHANGED
|
@@ -3118,11 +3118,13 @@ function refuseNoDirectives(verb, playbookId, pretty) {
|
|
|
3118
3118
|
// supply the precondition themselves.
|
|
3119
3119
|
const POLICY_SKIPPED_PLAYBOOKS = new Set([
|
|
3120
3120
|
"ai-discovered-cve-triage",
|
|
3121
|
+
"audit-log-integrity",
|
|
3121
3122
|
"cloud-iam-incident",
|
|
3122
3123
|
"idp-incident",
|
|
3123
3124
|
"identity-sso-compromise",
|
|
3124
3125
|
"llm-tool-use-exfil",
|
|
3125
3126
|
"mail-server-hardening",
|
|
3127
|
+
"network-trust",
|
|
3126
3128
|
"post-quantum-migration",
|
|
3127
3129
|
"ransomware",
|
|
3128
3130
|
"supply-chain-recovery",
|
|
@@ -7063,7 +7065,8 @@ function cmdDoctor(runner, args, runOpts, pretty) {
|
|
|
7063
7065
|
"cloud-iam-incident", "idp-incident", "identity-sso-compromise",
|
|
7064
7066
|
"llm-tool-use-exfil", "supply-chain-recovery",
|
|
7065
7067
|
"post-quantum-migration", "webhook-callback-abuse",
|
|
7066
|
-
"vc-wallet-trust", "mail-server-hardening",
|
|
7068
|
+
"vc-wallet-trust", "mail-server-hardening", "network-trust",
|
|
7069
|
+
"audit-log-integrity",
|
|
7067
7070
|
];
|
|
7068
7071
|
const playbookFiles = fs.readdirSync(playbookDir)
|
|
7069
7072
|
.filter(f => f.endsWith(".json") && !f.startsWith("_"))
|
package/data/_indexes/_meta.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.1.0",
|
|
3
|
-
"generated_at": "2026-06-
|
|
3
|
+
"generated_at": "2026-06-02T17:43:25.965Z",
|
|
4
4
|
"generator": "scripts/build-indexes.js",
|
|
5
|
-
"source_count":
|
|
5
|
+
"source_count": 58,
|
|
6
6
|
"source_hashes": {
|
|
7
|
-
"manifest.json": "
|
|
7
|
+
"manifest.json": "ea32d11918b9e9429c3ced5e07f667a755a2ad50aee090b71d3aa0196af3accb",
|
|
8
8
|
"data/atlas-ttps.json": "f66b456cf82a3c20575d8479de41f7b11b7ee5693eb1fcf64a67e162ae1b88a2",
|
|
9
9
|
"data/attack-techniques.json": "c39f28e3402ef13ad9b7076819f63fda67a22f97e3e375cfe01c4a4e0beff7c9",
|
|
10
10
|
"data/cve-catalog.json": "8264da4534d39c9493cfcd18acf7e38ed47ce2a81be15afd5a3f4baf1d504929",
|
|
11
|
-
"data/cwe-catalog.json": "
|
|
11
|
+
"data/cwe-catalog.json": "4762ef6f4d1cfe6eb9abff5f4539037294f18ded6feb3176161a4bb35fe85d32",
|
|
12
12
|
"data/d3fend-catalog.json": "9a54bccb9f24f84b32024216cc3f53819a053721ac8ab43c326859e68fc0ffaf",
|
|
13
13
|
"data/dlp-controls.json": "d2406c482dddd30e49203879999dc4b3a7fd4d0494d6a61d86b91ee76415df19",
|
|
14
14
|
"data/exploit-availability.json": "ec2656f0d9a893610e27b43eb6035fe9b18e057c9f6dfaac7e7d4959bbcbb795",
|
|
@@ -59,35 +59,37 @@
|
|
|
59
59
|
"skills/cloud-iam-incident/skill.md": "6aab2e400d1e87df7ac2b6f0a17dac6aa99723b217258c4a7b446703d1521775",
|
|
60
60
|
"skills/idp-incident-response/skill.md": "cb2f2c5b90de4592bfd66dcd55f9bf2004f370746d519cad577fcbaf36125878",
|
|
61
61
|
"skills/vc-wallet-trust/skill.md": "802dada75d934c9ab322246f650eb2eac9e2f72c1f094b0cebcfa605b56108a5",
|
|
62
|
-
"skills/mail-server-hardening/skill.md": "0554e23457851ac1cdb3b8217fae902789798db1bbc67c5f4cf1df6fd265cf15"
|
|
62
|
+
"skills/mail-server-hardening/skill.md": "0554e23457851ac1cdb3b8217fae902789798db1bbc67c5f4cf1df6fd265cf15",
|
|
63
|
+
"skills/network-trust/skill.md": "d1c2fd6ce0bd74e508a41a61c8618cc5c979eaea2702ca97003ce46ba8c9dfa8",
|
|
64
|
+
"skills/audit-log-integrity/skill.md": "72485e8df55dea8df80b675f04f32de2d32b8ee17d5e0aa96e61cd9bcb831193"
|
|
63
65
|
},
|
|
64
|
-
"skill_count":
|
|
66
|
+
"skill_count": 46,
|
|
65
67
|
"catalog_count": 11,
|
|
66
68
|
"index_stats": {
|
|
67
69
|
"xref_entries": {
|
|
68
|
-
"cwe_refs":
|
|
70
|
+
"cwe_refs": 42,
|
|
69
71
|
"d3fend_refs": 21,
|
|
70
|
-
"framework_gaps":
|
|
72
|
+
"framework_gaps": 85,
|
|
71
73
|
"atlas_refs": 10,
|
|
72
|
-
"attack_refs":
|
|
74
|
+
"attack_refs": 47,
|
|
73
75
|
"rfc_refs": 23,
|
|
74
76
|
"dlp_refs": 0
|
|
75
77
|
},
|
|
76
|
-
"trigger_table_entries":
|
|
78
|
+
"trigger_table_entries": 607,
|
|
77
79
|
"chains_cve_entries": 426,
|
|
78
80
|
"chains_cwe_entries": 174,
|
|
79
81
|
"jurisdictions_indexed": 29,
|
|
80
|
-
"handoff_dag_nodes":
|
|
81
|
-
"summary_cards":
|
|
82
|
-
"section_offsets_skills":
|
|
83
|
-
"token_budget_total_approx":
|
|
82
|
+
"handoff_dag_nodes": 46,
|
|
83
|
+
"summary_cards": 46,
|
|
84
|
+
"section_offsets_skills": 46,
|
|
85
|
+
"token_budget_total_approx": 426319,
|
|
84
86
|
"recipes": 8,
|
|
85
87
|
"jurisdiction_clocks": 29,
|
|
86
88
|
"did_ladders": 8,
|
|
87
89
|
"theater_fingerprints": 7,
|
|
88
90
|
"currency_action_required": 0,
|
|
89
91
|
"frequency_fields": 7,
|
|
90
|
-
"activity_feed_events":
|
|
92
|
+
"activity_feed_events": 58,
|
|
91
93
|
"catalog_summaries": 11,
|
|
92
94
|
"stale_content_findings": 1
|
|
93
95
|
},
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"_meta": {
|
|
3
3
|
"schema_version": "1.0.0",
|
|
4
4
|
"note": "Per-artifact 'last changed' feed sorted descending by date. Skill events from manifest.last_threat_review; catalog events from data/<catalog>.json _meta.last_updated.",
|
|
5
|
-
"event_count":
|
|
5
|
+
"event_count": 58
|
|
6
6
|
},
|
|
7
7
|
"events": [
|
|
8
8
|
{
|
|
@@ -19,6 +19,20 @@
|
|
|
19
19
|
"path": "skills/mail-server-hardening/skill.md",
|
|
20
20
|
"note": "Inbound mail-server protocol hardening for mid-2026 — SMTP smuggling, STARTTLS command/response injection, IMAP/POP3/ManageSieve command injection, Sieve redirect exfiltration, open relay, mailbox-DAV traversal/XXE, and cleartext-AUTH (the server-side protocol layer that SPF/DKIM/DMARC do not protect)"
|
|
21
21
|
},
|
|
22
|
+
{
|
|
23
|
+
"date": "2026-06-02",
|
|
24
|
+
"type": "skill_review",
|
|
25
|
+
"artifact": "network-trust",
|
|
26
|
+
"path": "skills/network-trust/skill.md",
|
|
27
|
+
"note": "Network-layer trust and adversary-in-the-middle resistance for mid-2026 — DNSSEC validation, DANE/TLSA pinning, TSIG, mTLS private-CA pinning, RFC 9421 HTTP message signatures, DNS-rebinding/SSRF guarding, and authenticated time (NTS) and its effect on certificate validity and TOTP"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"date": "2026-06-02",
|
|
31
|
+
"type": "skill_review",
|
|
32
|
+
"artifact": "audit-log-integrity",
|
|
33
|
+
"path": "skills/audit-log-integrity/skill.md",
|
|
34
|
+
"note": "Audit-log integrity for mid-2026 — tamper-evident hash-chaining, off-host signing, compliance-mode WORM immutability, legal-hold-vs-retention enforcement, writer/custodian separation, and deception (honeytoken) coverage that resist the privileged attacker most likely to tamper with the trail"
|
|
35
|
+
},
|
|
22
36
|
{
|
|
23
37
|
"date": "2026-06-01",
|
|
24
38
|
"type": "catalog_update",
|
|
@@ -286,7 +300,7 @@
|
|
|
286
300
|
"type": "manifest_review",
|
|
287
301
|
"artifact": "manifest.json",
|
|
288
302
|
"path": "manifest.json",
|
|
289
|
-
"note": "manifest threat_review_date —
|
|
303
|
+
"note": "manifest threat_review_date — 46 skills, 11 catalogs"
|
|
290
304
|
},
|
|
291
305
|
{
|
|
292
306
|
"date": "2026-05-11",
|