Skip to content

feat(ctf): multi-event corpus ingestion and 30 new tier-B challenges - #32

Merged
log0u7 merged 1 commit into
mainfrom
feat/ctf-corpus-scale-v5
Oct 26, 2026
Merged

log0u7 merged 1 commit into
mainfrom
feat/ctf-corpus-scale-v5

Conversation

@log0u7

@log0u7 log0u7 commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Summary

  • ingest generalizes across CTF-Archives events (Zeekr 2026-09-19, WQB 2026-09-04, CCB 2026-09-13): extraction layouts vary per zip (wrapper dirs, nesting), so challenges resolve to their content root and deduplicate by that root (symlink-cycle guarded), longest directory name = canonical challenge name.
  • Statement matching strips the hex-hash suffix of release dir names: all 29 WQB/CCB statements extract now (verified on cold_forge + ticketsage).
  • 30 new tier-B challenges (WQB 27 slots incl. SilentConfig tar.gz, CCB 3): statements in Chinese, flag format only, writeups never embedded. The statement-less incident log bundle stays OUT of the corpus (gitleaks trips on its fictional decoy UUID; the tar.gz remains in the local store - no allowlist needed, the file is not in this history).
  • Regression guards: case-id charset/uniqueness asserts, manifest-vs-cases consistency test (the orphan class found by review), statement-less fallback test, symlink-cycle test. The three legacy pack examples are scoped out of the consistency check (hand-written, pre-corpus).
  • New totals: 52 corpus cases (12 verified tier, 40 tier-B) + 3 legacy pack examples.

Issue for this PR

N/A

Checklist

  • Conventional Commits
  • test_ctf_ingest.py: 6 tests across the three extraction layouts
  • 473 tests + lint + mypy green locally

ingest generalizes across CTF-Archives events (Zeekr 2026-09-19, WQB
2026-09-04, CCB 2026-09-13): extraction layouts vary per zip (wrapper
dirs, nesting), so challenges resolve to their content root and
deduplicate by that root (symlink-cycle guarded), with the longest
directory name as the canonical challenge name. Statement matching
strips the hex-hash suffix of release dir names (all 29 WQB/CCB
statements extract now).

30 new tier-B challenges (WQB 27 slots incl. SilentConfig, CCB 3):
statements in Chinese, flag format only, writeups never embedded. The
statement-less incident log bundle stays out of the corpus (gitleaks
trips on its fictional decoy UUID; its tar.gz remains in the local
store for a future allowlisted re-ingest).

Regression guards: case-id charset/uniqueness asserts, a
manifest-vs-cases consistency test (the orphan class found by review),
a statement-less fallback test and a symlink-cycle test. New totals:
52 corpus cases (12 verified tier, 40 tier-B) + 3 legacy pack examples.
@log0u7
log0u7 merged commit 9730efc into main Oct 26, 2026
8 checks passed
@log0u7
log0u7 deleted the feat/ctf-corpus-scale-v5 branch October 26, 2026 18:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant