The autonomous agent's loop prompt had grown to ~9 000 words of accumulated
findings, refutations and traps. That is a symptom, not a style: it was doing
the job the corpus should do, in the one place that dies with the container.
Three concrete failures followed from it, and each gets a structural fix rather
than a louder instruction.
1. IT REPEATED WORK IT HAD ALREADY DONE.
The "do not revive" list and the method traps existed ONLY in the prompt, so
nothing pointed a fresh iteration at them. Extracted verbatim into two
tracked files:
docs/re/REFUTED.md 105 claims tested and dead, grouped by subject so a
grep for your noun finds the neighbourhood
docs/re/METHOD.md the traps already paid for -- controls, inference,
searching, reading data, runtime
Both are linked from INDEX.md, and the loop prompt now opens by requiring
them to be read. This is the fix for "re-derived something already known":
the knowledge is now where the next iteration looks, not in a context window.
2. IT FORGOT TO ARM THE NEXT WAKEUP.
The prompt tried to solve this by shouting at itself in the first line. The
real fix is to stop asking: `loose` now defaults to a FIXED interval (45m),
so the harness owns the cadence and a forgotten ScheduleWakeup cannot end the
run. SYLPH_LOOP_INTERVAL= (empty) restores self-pacing.
3. IT COULD NOT PUBLISH, SO THE WORK ONLY EXISTED IN THE CONTAINER.
New `push-work`, plus a read-only credentials mount
(SYLPH_GIT_CREDENTIALS, default ~/.sylph-git-credentials). It pushes the
CURRENT branch only, refuses anything that is not auto/*, and never
force-pushes -- so the consolidated line stays a human's decision and a
confused iteration cannot rewrite history. The loop prompt now requires a
push on every iteration that commits, rather than at the end of some longer
arc, which is exactly when a container dies.
The prompt itself drops from ~9 000 words to 85 lines and, more importantly,
stops accumulating: findings go in the corpus, and the prompt points at it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
9.3 KiB
9.3 KiB
Refuted — claims that were tested and died
Read this before proposing a hypothesis. Every line below was believed at some point, measured, and found false. Reviving one costs a whole iteration and produces nothing.
This file exists because the list had been living in the autonomous agent's loop prompt — the only copy, lost the moment the container was. A refuted result is a real result; it belongs in the corpus like any other.
Format: each entry is the claim as it was believed. Where the true answer is
known it follows after →. Grouped by subject so a grep for your noun finds the
neighbourhood, not just the line.
Offsets, structs and the progress singleton
position = instance − 0x12c→ refuted.+0x29d0→ refuted.- "an offset intersection can find a struct's consumer" → only for LARGE or
unusual offsets. Small ones have no power (
+184: 301/351/115 hits). - "a
+1956store means a progress write" → writes go through the COPY, not direct stores. 9 direct stores, none of them a progress write. - "the singleton-global filter can find progress writers" → it fails its own control.
- "the progress copy destination is an
r1-relative stack local" → it is a frame register. Ther1assumption returned 0 for all 21 candidates including the known-good — the filter was killed by its own control. - "word B's writer also stores the Time/Points record" → it does not.
- "the debriefing records the metric with the clear bit" → 44 calls, exactly two
strings (
DEBRIEFING,BASE_INFO), noTime, noPoints. - "
0x820AF030holds live state" → all 384 words constant; it is a spawned-entity record, not live state.
Screens, classes and RTTI
- "the RTTI route can name the anonymous classes" → 1 150 vtables: 1 150
ANON_, 0rtti_present, 0 base classes. - "the sibling vtable methods name the class" → they cannot.
- "
xrefscan name the callers of a vtable method" → no. - "the
ind_callrefutation voids existing corpus claims" → damage bounded, 4/4 caller claims verify. Butxrefs.ind_callis a CROSS PRODUCT — always filterkind='call'. - "
BASE_INFOmarks the 5-slot screen family" → it discriminates screen-config from table-read, 9/9 vs 10/10. - "a high key count means a rich screen" →
sub_82297550/sub_822A2F00's 27 "keys" are coordinate pairs, i.e. a layout table. - "
EX_= the CHALLENGE-mission debriefing" →EX_is EXTRA, mission-kind 3. - "the
EX_selection has not been shown" → it has:[[obj+4]+184] == 3.
Stages, missions and the challenge set
- "the disc's stages are numbered 1..28" → S01–S16 story, S17 cut, S18–S23 tutorials, S24–S29 challenge.
- "S24–S29 are story missions" → they are the challenge missions.
- "the challenge missions have their own maps" → they reuse
GP_MAIN_GAME_E.pak's stage records. - "the challenge
REQUIREMENTvalues are 16,25,26,27,29" → the chain is 16→24→25→26→27→28. - "the
Extra0nfamily shares one leaderboard metric" →RECORD_TYPEis per-stage: 3 Time / 3 Points. - "stage = filled SHAB count + 1" → refuted.
- "the first TRIGGER is always the point of no return" → refuted.
- "
EnumUnit_S14.tblmight be missing" / "S14's 13 are a manifest omission" / "asteroids are exempt from the manifest" → S14's 13 are dangling deployments. NEEDS-HUMAN: fly S14. - "
StageMessageSet_S02.tblis not in the pak" → it is. - "
S28_p1has an asteroid volume with no definition" → refuted. - "
test_s8p1_asteroid.tblis test-only" → refuted. - "the settings family has 28 or 29 objects" → 24.
ISL / mission scripting
- "the bytecode is in the
.embsec_sections" → refuted. - "only 31 built-ins take a unit" → refuted.
- "
sub_8230C398is the message pump" → refuted. - "
bus+8216is the subscriber registry" → refuted. - "the ScriptPhase vtable is ≥200 slots" → 113.
IDXD, paks and naming
- "IDXD record keys are
name_hash" → record keys aretag_hash(case-SENSITIVE);name_hashis case-INSENSITIVE and used for pak keys. - "pak TOC order is stage order" / "TOC order is semantic order" → it is not.
- "the executable holds the asset names" → the image names no data value at all; that route is powerless.
- "the image might name a data VALUE" → powerless.
- "the XPR2 manifest names hash to the DefTables tables" → refuted.
- "the
DefTablesmodel names are unreachable" → reachable via theEnumeratedeclaration tables (1 413/1 425, 99.2 %). - "the
GP_MAIN_GAME_*unnamed block is undiscovered data" → refuted. - "each
GP_MAIN_GAME_*Enumerateobject declares something" → refuted. - "
GP_HANGAR_ARSENALis missing data tables" → refuted. - "the
Enumerationself-index can name objects" → a self-index names records, not files. - "a per-pak prefix might close the 2D blocker" → no.
- "the
+paths might name the 2D orGP_READY_ROOMkeys" → the+-dictionary route is exhausted, 0 of 1 817. - "the
game:\paths are unresolved" → refuted. - "a set-difference over file names can see reuse" → it cannot; join per USER. Per-pak copies are ×6.
Units, weapons, effects and assets
- "
Generic(394) is the unit datasheet" → refuted. - "a loadout's
Arm1names an item" → it names a hardpoint slot (Turret_NNN), 59/59. - "
EnumUnitand the unit datasheet share a vocabulary" → they do not. - "the roster is the
Generic.Modelset" → roster 40,Generic.Model46,GameResourceID480 — three vocabularies. - "every unit ID is
UN_<l>###_<FACTION>_<name>" → the grammar isUN_<letter>###_[<subkind>_]<FACTION>_<name>. - "
_EXnis theExtra0nindex" → three differentEXvocabularies exist. - "the only two
_EX5names on the disc are the AA gun and the DeltaSaber" → refuted. - "running the tutorial will instantiate the
_Ttrlweapons" → refuted. - "the disc has exactly three
EnumWeapontables" → four. - "the
wep_NNpackage gaps are unshipped weapons" / "wep_85is the tip of a family" →wep_85is the only declared-but-unshipped asset (59/0/1/26). - "nothing is deployed without being declared" → refuted.
- "effects are one namespace" → refuted.
- "the 58 undeclared effect names are missing assets" → refuted.
- "all five orphan effects are unshipped" → refuted.
- "
eff_f0002ships inBase.xpr" → refuted. - "
Base.xprholds more bound effects thanptc_pack" → refuted. - "the 34 unlocated are a scatter" → refuted.
- "the 9 unlocated might be under another prefix" → refuted.
- "
ptc_packhas 532 names" → 727. - "the
_e/_flaw is effect-FIELD-specific" → it is the faction law, 564/564. - "a disc-wide
.xprbyte search can show an effect is ABSENT" → it cannot. - "
rot_n001is on the disc" → refuted. - "
rou_f004's mesh is inStage_S28.xpr" → it is inDeltaSaber_A.xpr. - "
parent+_all+_childis the composite-model convention" → refuted._hangaris real (59 of 166, 59/59 with a bare twin);_all/_childis not. - "
Motion_guard_starthas no damage variants" → refuted. - "
CoverAreabits 2 and 3 are mutually exclusive" → refuted. - "the 27 unresolved
NamePlatevalues are missing objects" → refuted.
LOD, background and misc tables
- "
EnumLODSet_*is a per-stage family" →EnumLODSet_test.tblserves 17 stages; 17+5+1 = 23. - "there are 8 orphan LOD tables" → 6.
- "the orphans are stale copies of
_test" → refuted. - "S25 is absent from the
DefTablesLOD families" → refuted. - "
BackGroundIDhas no referent anywhere" → it is an identity. - "
BackGroundPackage == BG_<id>.xpr" → refuted. - "
<X>ID+<X>Packageis a convention" → refuted. - "
Placement_*/RouteTest_*are unattached" → refuted. - "the
AsteroidDefinitionjoin does not reproduce by hash" → it does. - "the 8-value frame is a new finding" → it was already in the corpus.
Loaders, config and tuning
- "the config reader is XML" → INI.
- "
sub_822F9498is the unit-definition loader" → it isPlayerParams's. - "
sub_822AE628reads the main-gameTweak" → refuted. - "
sub_8230D1F8is a rank table" → it is the stage-settings loader. - "
sub_82286BC8's key list is new" → refuted. - "
sub_825F2CF0/sub_825F2F88read a post-processing table" → refuted. - "
Boosteris a new schema" / "Boosteris the player craft's flight envelope" → refuted; nothing selectsBooster. - "the
AnalogRevice/Tweakblock is unreachable" → reachable (sub_821A6CF0, base0x820A1630). - "a 0-xref string block has no reader" → refuted.
- "the AI table was NEEDS-HUMAN" → refuted.
- "the
PG*HUD names are undocumented" → they are documented. - "a base-solver row identifies a FUNCTION" → it does not.
- "a 64K-boundary base is low confidence" → inverted; it is high confidence.
- "the 0x820B0000 cluster is a false positive" → refuted.
- "a pointer to a function in the image implies a registry" → refuted.
.pdatais not a registry. - "the 13 player-facing chatter tables are the WINGMAN tables" → refuted.
- "the 8 undeclared chatter tables are tutorial chatter" → refuted.
- "other datasheets ship a schema too" → refuted.
Encoding and text
- "every IDXD string value is ASCII" → 6 non-ASCII values of 99 328.
- "
文字列is a dev placeholder" → they are Shift-JIS type words.