v0.33.0 — exploration & disclosure backlog
Added — exploration & disclosure backlog
The unifying design principle (per the project goal): give the agent disclosure
capability to self-mine what it needs to see, and turn single-shot choices into
visible explorations. None of these rewrite bullets or fabricate — they surface
real signals and let the human pick.
jd-check --explain(#80). For each MISSING JD keyword, classify it
groundable(real supporting snippets exist in the activity — shown with source
refs) vsabsent("honest gap — leave it"). Reuses the evidence-disclosure layer;
advisory only, never auto-inserts. Newcore/jd_explain.py.explorecommand (#76). Sweeps atop_n × page_budgetgrid, renders+reviews
each cell, and surfaces the Pareto front (configs not dominated on score↑ /
pages↓) so the layout sweet-spot is found deliberately instead of by hand. Pure
layout/selection — same truthful-lever guarantee asiterate. Newcore/explore.py.personas-compare --with-scores(#78). Joins the per-group bullet diff with a
per-persona review-score table for the same locale + JD, and highlights the persona
that maximizes JD fit — turning persona choice from an up-front guess into a
data-driven comparison. Newcore/persona_compare.py.run --branch <Gn> --decision <json>+--branches+--adopt(#77). Forks
the gate ledger to a named branch (original kept intact), applies the alternative
decision, recomputes only that gate's invalidation suffix, and auto review-diffs the
branch vs the original — making the gate flow a tree instead of a line. New
core/run_branch.py(pure, deterministic branch ids; no clock/RNG).enrich --candidates <angles>+bullets-compare(#75). Generates N
angle-biased candidate bullet-sets per group (impact_first/breadth_first/
depth_first— each a prompt PREFIX; the anti-fabrication rules are untouched) and
shows them side by side so the user picks the best framing per group. New
core/candidates.py; the angle threads throughenricher._build_prompt→emit_jobs.- G5 per-metric selection (#79 part 2). The G5 metrics gate is no longer
all-or-nothing: the decision recordspick: [{group, value}]to weave a SUBSET, and
the gate file scaffolds an emptypick.g5_selected_metricsalways intersects the
pick withsafe_to_surfacevalues, so a pick can never smuggle an unsafe/unlisted
value past the P1 guard (closes #79; part 1 shipped in 0.32.4).