shoot(): the search loop now runs to the spec cap regardless of
wall-clock, so grid_hash is truly deterministic in seed + budget.
Previously the wall-clock check could truncate the fit phase on slow
hosts, producing different traces for the same seed (caught by the
CRAN MKL builder).Initial release.
shoot(): budgeted exploratory linear-model search across predictor
subsets, transformations, interactions, sample restrictions, outcome
constructions, and model-form lifts.restriction axis: complete-cases pruning, Tukey IQR fence on the
outcome or a predictor, Cook's D leverage exclusion, and factor-level
restriction.outcome_construction axis: composite indices, residualisation,
ratio outcomes, within-group z-scoring.model_form axis: polynomial / spline predictor wraps, native Huber
M-estimator (rlm), GLM family swaps, random-intercept lifts.print(run) and every
output generator via a shared describe_spec() helper.summary(run) reports counts for each axis.run_log(): persisted history of recorded runs.The cursed bestiary covers questionable-research-practice tactics that fire as in-run tactical-pause modifiers:
+aggregate (alias +agg): collapse records to country / group means
before fit. Hides within-group variance when within-group variance
exceeds between-group variance.+compilation (alias +comp): treat a literature compilation of
reported values as ground-truth response. Reporting bias gets
re-emitted as ecological signal.+gapfill (alias +gap): validate predictions for unobserved cases
using fit metrics on the observed cases. The reported metric is silent
precisely where the question lives.+tier2 (alias +relax, +downweight): when the pre-registered
quality filter yields too few cases, introduce a downweighted second
tier and backdate the threshold to Methods.+counter_argument (alias +counter, +preempt): inscribe the
reviewer's likely objections and their rebuttals into the manuscript.
Closes off review by performing it on the reviewer's behalf.+pseudo_spatial (alias +coords): add geographic coordinates as
fixed effects and treat that as having handled spatial
autocorrelation. Residuals still cluster.+omit_control (alias +omit): drop a covariate because you don't
want to interpret it. Variance reassigns to the predictors of interest
and strengthens their apparent effects.+knife_edge (alias +labeling): define group membership by a
knife-edge presence rule on a continuous variable. The comparison
effect emerges from the labelling rule, not the underlying process.+iid_rescue (alias +iid): reassign an inconvenient fixed effect
to an iid random effect when the result is otherwise unwelcome.+defer_fix (alias +defer, +next_step): acknowledge a
methodological correction; defer it to the next paper / first step /
future analysis while the broken analysis proceeds unchanged.+coffee_break (alias +side_meeting, +offline): move
methodological disagreement off the written record. A six-paragraph
objection is answered with a one-line proposal to "discuss it
informally" at the retreat.+mechanism_rebuttal (alias +intuition, +but_biologically):
dismiss a statistical concern by appealing to domain mechanism rather
than engaging with the statistical content. The null simulation is
set aside because the mechanism is "obvious".Five modifiers covering distinct rhetorical moves that redirect
attention away from a methodological concern rather than engaging
with it. All share the deflection fallacy tag.
+misunderstanding (alias +you_misread): relocate the
methodological problem from the analysis to the reader.
+narrow_answer (alias +strawman): answer a weaker version of
the concern at the wrong level of analysis.
+complexity_shield (alias +its_complex): invoke unspecified
complexity to dismiss a specific narrow concern.
+frame_shift (alias +oscillate): oscillate between descriptive
and causal framing depending on which is being challenged.
+matter_of_taste (alias +just_one_way): soften a falsifiable
concern into a matter of perspective.
vocab_tags includes aggregation_artifact and deflection
fallacy tags.
Career-gated output set: locked functions return a status block and become usable once the tier is reached. Unlocks persist across sessions via the save state.
manuscript() (Postdoc).presentation(), reviewer_response(), graphical_abstract()
(Senior Scientist).funding() (PI).tempdir(); override with output_dir = or
options(texanshootR.output_dir = ...).career(): dashboard of level, runs, favorite method, opaque
qualitative scores.achievements(): registry of visible and hidden achievements with
unlock status.wardrobe(): ASCII cosmetic slots that auto-equip when their
unlocking achievement fires.progress(): HUD-style companion to ?<fn>. Reads live save state
and prints which functions are unlocked, which are locked, and what
the next unlock requires.tools::R_user_dir("texanshootR", "data").reset_career(), reset_achievements(), reset_wardrobe(),
reset_all().?\texanshootR-options``.require_unlocked(): single source of truth for output-tier gating.
Signals a tx_locked condition so scripts fail loudly while
interactive callers can tryCatch(tx_locked = ...). Roxygen
@description on each gated function carries the static unlock
requirement so ?presentation documents the tier even when the
function is callable.validate_messages(): schema check for the bundled YAML message
packs.vocab_*() family: enumerates the vocabularies that drive message
selection and effect application.