This repository has been archived on 2026-09-16. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Syplheed-Reborn/docs/re/REFUTED.md
Sylpheed RE agent e1dcc689bc agent: move the loop prompt's memory into the corpus, and let it push
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>
2026-08-28 15:46:59 +02:00

9.3 KiB
Raw Permalink Blame History

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 +1956 store 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. The r1 assumption 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), no Time, no Points.
  • "0x820AF030 holds 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_, 0 rtti_present, 0 base classes.
  • "the sibling vtable methods name the class" → they cannot.
  • "xrefs can name the callers of a vtable method" → no.
  • "the ind_call refutation voids existing corpus claims" → damage bounded, 4/4 caller claims verify. But xrefs.ind_call is a CROSS PRODUCT — always filter kind='call'.
  • "BASE_INFO marks 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" → S01S16 story, S17 cut, S18S23 tutorials, S24S29 challenge.
  • "S24S29 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 REQUIREMENT values are 16,25,26,27,29" → the chain is 16→24→25→26→27→28.
  • "the Extra0n family shares one leaderboard metric" → RECORD_TYPE is 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.tbl might 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.tbl is not in the pak" → it is.
  • "S28_p1 has an asteroid volume with no definition" → refuted.
  • "test_s8p1_asteroid.tbl is 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_8230C398 is the message pump" → refuted.
  • "bus+8216 is the subscriber registry" → refuted.
  • "the ScriptPhase vtable is ≥200 slots" → 113.

IDXD, paks and naming

  • "IDXD record keys are name_hash" → record keys are tag_hash (case-SENSITIVE); name_hash is 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 DefTables model names are unreachable" → reachable via the Enumerate declaration tables (1 413/1 425, 99.2 %).
  • "the GP_MAIN_GAME_* unnamed block is undiscovered data" → refuted.
  • "each GP_MAIN_GAME_* Enumerate object declares something" → refuted.
  • "GP_HANGAR_ARSENAL is missing data tables" → refuted.
  • "the Enumeration self-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 or GP_READY_ROOM keys" → 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 Arm1 names an item" → it names a hardpoint slot (Turret_NNN), 59/59.
  • "EnumUnit and the unit datasheet share a vocabulary" → they do not.
  • "the roster is the Generic.Model set" → roster 40, Generic.Model 46, GameResourceID 480 — three vocabularies.
  • "every unit ID is UN_<l>###_<FACTION>_<name>" → the grammar is UN_<letter>###_[<subkind>_]<FACTION>_<name>.
  • "_EXn is the Extra0n index" → three different EX vocabularies exist.
  • "the only two _EX5 names on the disc are the AA gun and the DeltaSaber" → refuted.
  • "running the tutorial will instantiate the _Ttrl weapons" → refuted.
  • "the disc has exactly three EnumWeapon tables" → four.
  • "the wep_NN package gaps are unshipped weapons" / "wep_85 is the tip of a family" → wep_85 is 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_f0002 ships in Base.xpr" → refuted.
  • "Base.xpr holds more bound effects than ptc_pack" → refuted.
  • "the 34 unlocated are a scatter" → refuted.
  • "the 9 unlocated might be under another prefix" → refuted.
  • "ptc_pack has 532 names" → 727.
  • "the _e/_f law is effect-FIELD-specific" → it is the faction law, 564/564.
  • "a disc-wide .xpr byte search can show an effect is ABSENT" → it cannot.
  • "rot_n001 is on the disc" → refuted.
  • "rou_f004's mesh is in Stage_S28.xpr" → it is in DeltaSaber_A.xpr.
  • "parent + _all + _child is the composite-model convention" → refuted. _hangar is real (59 of 166, 59/59 with a bare twin); _all/_child is not.
  • "Motion_guard_start has no damage variants" → refuted.
  • "CoverArea bits 2 and 3 are mutually exclusive" → refuted.
  • "the 27 unresolved NamePlate values are missing objects" → refuted.

LOD, background and misc tables

  • "EnumLODSet_* is a per-stage family" → EnumLODSet_test.tbl serves 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 DefTables LOD families" → refuted.
  • "BackGroundID has no referent anywhere" → it is an identity.
  • "BackGroundPackage == BG_<id>.xpr" → refuted.
  • "<X>ID + <X>Package is a convention" → refuted.
  • "Placement_* / RouteTest_* are unattached" → refuted.
  • "the AsteroidDefinition join 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_822F9498 is the unit-definition loader" → it is PlayerParams's.
  • "sub_822AE628 reads the main-game Tweak" → refuted.
  • "sub_8230D1F8 is a rank table" → it is the stage-settings loader.
  • "sub_82286BC8's key list is new" → refuted.
  • "sub_825F2CF0 / sub_825F2F88 read a post-processing table" → refuted.
  • "Booster is a new schema" / "Booster is the player craft's flight envelope" → refuted; nothing selects Booster.
  • "the AnalogRevice/Tweak block is unreachable" → reachable (sub_821A6CF0, base 0x820A1630).
  • "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. .pdata is 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.