Commit graph

132 commits

Author SHA1 Message Date
ragnarok-clanker
7964a0cb2a Update guide prompts for continuous single and multi-agent workflows 2026-10-27 12:56:43 +01:00
ragnarok-clanker
2565638a36 Refresh stylesheet cache for Discord icon 2026-10-27 11:28:28 +01:00
ragnarok-clanker
e947372d9b Add inline Discord icon to header link 2026-10-27 11:26:08 +01:00
ragnarok-clanker
4be1826605 Preserve explicit review waivers for identical resubmitted code 2026-10-27 11:18:52 +01:00
ragnarok-clanker
077e858722 Add Discord header link and public invite redirect 2026-10-27 11:15:32 +01:00
ragnarok-clanker
b20e903244 Validate original literals using the configured execution charset 2026-10-27 10:45:49 +01:00
ragnarok-clanker
656fb1bf5e Batch committed include reads to prevent web event-loop stalls 2026-10-27 10:28:21 +01:00
ragnarok-clanker
70b8378109 Show compiler-generated claims with original evidence instead of missing source 2026-10-27 01:10:09 +01:00
ragnarok-clanker
088108a930 Include generated-code claims in batch review filtering 2026-10-27 00:52:36 +01:00
ragnarok-clanker
7670364f67 Distinguish reviewable batches and settle abandoned open submissions 2026-10-27 00:48:39 +01:00
ragnarok-clanker
6472a15a17 Batches page: list every batch, including those sent back before review
GET /api/batches lists batches newest first with state, reason, notes and per-state function counts; filters by state and author, pages with before/limit. The batch detail adds notes, times and file paths. The website gets a Batches view with tabs, a detail panel linking each function to its review page, and an admin button to accept a batch sent back only for lower scores.
2026-10-27 00:21:49 +01:00
ragnarok-clanker
dce889f0b2 Allow // OFFSET: provenance annotations in submissions 2026-10-26 23:43:29 +01:00
ragnarok-clanker
63e447077d Admins can merge a batch sent back only for lower matching scores 2026-10-26 23:06:58 +01:00
ragnarok-clanker
20b67432b1 Maintainer peer-review skip marks the attempt peer_skipped so merge re-verification accepts it 2026-10-26 22:32:37 +01:00
ragnarok-clanker
0e3648a174 Enforce project global ownership in verification and merging 2026-10-26 20:14:59 +01:00
ragnarok-clanker
95fd65997f Let provenance comments move between the files of one submission
A definition moving to its owner unit keeps its // STATIC: line. The free-text gate pools the base versions of all submitted files; each base comment or string covers one occurrence anywhere in the submission.
2026-10-26 19:33:31 +01:00
ragnarok-clanker
5f8e7493c8 Find header includers from the sources, not only from earlier compiles
unit_deps holds only the units some merge compiled, so a change to a header no merge touched compiled none of its includers. Includers now unite unit_deps with a transitive #include scan of the sources as the submission has them.
2026-10-26 19:31:30 +01:00
ragnarok-clanker
8d472dd8ee Compare linked code without line numbers, namespace hashes or unlearned names
effectiveHash masks only relocated fields (an operand equal to its source line no longer counts), and normalizes MSVC anonymous-namespace hashes. A check binds every annotated global's decorated name, from its definition or an annotated extern, across all its units before comparing, so references from other units resolve to the global's ID as they will once main learns the name.
2026-10-26 19:25:03 +01:00
ragnarok-clanker
64b892b2b0 Maintenance batches compare linked code, not symbol names
effectiveHash fingerprints a function by its bytes and where each reference lands (symbol address + addend). A maintenance batch compiles the touched units as main has them and refuses only functions whose effective code changes, so moving a global, renaming it, or reaching a member through its owning object merges.
2026-10-26 18:55:10 +01:00
ragnarok-clanker
689a8bc85b Add maintenance batches and symbol corrections for maintainers
A maintenance batch carries structural source changes that belong to no function task (moving a global to its owner, fixing data annotations, adding a header or unit). It runs the same gates as function work and compiles every unit the change can affect; it merges only when no function's compiled code changes, recording the result like any merge. POST /api/admin/symbols/:id corrects a symbol's size or name, or retires a global main no longer annotates. td maintenance submit|symbol drive both.
2026-10-26 18:46:45 +01:00
ragnarok-clanker
4efc56fa8d Let agents revise merged functions through region claims
A region whose functions are all on main can be claimed, and its done tasks submitted as revisions: competing candidates verified and peer reviewed like new work, while the task stays done whatever the outcome. Rewriting a merged function without listing it sends the batch back instead of merging it unreviewed. Admins can force a done task back to open.
2026-10-26 18:06:07 +01:00
ragnarok-clanker
13c907b350 Deploy rodecomp from the clank-together checkout only 2026-10-26 15:53:42 +01:00
ragnarok-clanker
16c3ec4564 Keep the project's root AGENTS.md as the only agent guide
Remove template/AGENTS.md; prepare-project no longer generates AGENTS.md.
2026-10-26 15:52:00 +01:00
ragnarok-clanker
a77a3645a1 Keep private identities out of maintenance source 2026-10-26 15:35:17 +01:00
ragnarok-clanker
b14140ba27 Isolate explicit client checks and submissions
Check named files over a detached HEAD worktree using the existing overrides pipeline. Restrict automatic submission task discovery to selected files, and leave dirty working trees in place during sync.
2026-10-26 15:17:33 +01:00
ragnarok-clanker
4319cdb68b use-English-Claude-quickstart-links 2026-10-26 13:19:04 +01:00
ragnarok-clanker
64a374709b fix-windows-installer-without-winget 2026-10-26 13:10:23 +01:00
ragnarok-clanker
44df09abbb Bind annotations to functions by their debug-info definition line
The listing assigned each compiled function to the file of its first
source-line marker. When the optimizer schedules code inlined from a
header first (std::map::find, std::string::c_str, ...), that marker is
the header's, so a correctly compiled function was reported as "no
compiled function found after this annotation".

Checks now compile with /Z7, which puts CodeView debug info in the
object without changing codegen, and CoffObject.functionLines() reads
each function's definition file and line from its line table. The
binder uses that location and keeps the listing as the fallback for
objects without debug info; the listing still provides instruction
text and codeHash.
2026-10-26 11:50:52 +01:00
ragnarok-clanker
f43ff435cf Allow admins to manually review their own attempts 2026-10-25 20:27:25 +01:00
ragnarok-clanker
3b840c92f7 Preserve persistent admin registration approval setting 2026-10-25 20:27:24 +01:00
ragnarok-clanker
3def972933 Merge upstream main through aa55f6e 2026-10-25 20:20:00 +01:00
Saty
aa55f6e61c Region claims count toward the reviews a long queue asks for
The "review first" rule counted only task claims, but new work is claimed by
region, so after three reviews an hour an agent could claim any number of
regions while the review queue kept growing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:14:46 +01:00
Saty
7053ac8579 Peer review queue uses the same rules as the decision
The queue judged "decided" by weight alone, while a decision also takes two
reviewers on the winning side. A function led by one heavy verdict dropped
out of the queue but was never decided, and waited forever.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 17:24:43 +01:00
Saty
50117671ee Peer review: clear majority, a cap on reviewers, shared bodies skip review
"same" now needs 70% of the weight as well as a lead of three (7:3, not 10:7),
so a contested function is not worn down until "same" happens to lead. A
function seven reviewers could not decide goes back to its author with why;
the queue stops handing it out at the cap. Both are policy settings
(peerAcceptShare, peerMaxReviewers); trust's author record counts the same way.

One body annotated for several functions: when the original of the submitted
one is the same code as another's (same bytes, relative references to the same
targets) and main already accepts that one from this compiled body, the
submission is approved without peer review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:09:18 +01:00
Saty
ab5b07c5f5 Unstick functions on their way to main
A resubmission whose peer verdicts carry over now goes on as approved; in_review
waited for a human review that no longer comes, and the peer queue skipped it.

A batch that only merges as a whole (noSplit) goes back to its author once a
function of it drops out later (sent back, withdrawn, superseded), instead of
holding its approved functions forever.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:51:39 +01:00
f8f1fee278 Point hostnames at clank.rodecomp.online instead of saty.dev 2026-10-25 14:43:30 +01:00
022e0a2c78 Ragnarok rodecomp deployment on memento
Changes to upstream:
- git.js: coordinator commit identity from TD_GIT_AUTHOR_NAME/EMAIL.
- build.js: docker runner can share job dirs through a named volume
  (jobVolume/jobVolumeRoot) for containerized workers.
- install.js: staged installer output with logs, start prompt for regions.
- web: feed layout, cache-busting asset versions, multi-agent help section.
- build-td: fetch checksummed Windows runtime when building on non-Windows.

Additions:
- deploy/rodecomp: compose stack, Dockerfiles, Caddyfile, server.json,
  bulk import/verify scripts, and README.md with the deployment notes
  (the root README stays identical to upstream).
- toolchain/msvc-v142: MSVC v142 under Wine (Docker), SDK 10.0.19041.0.
- tools/rodecomp: project preparation, Forgejo provisioning, history and
  identity tools.
2026-10-25 14:40:13 +01:00
Saty
804ebd15c2 Admins can set how much an account's peer verdicts weigh
users.review_weight (1 to 3, or auto) overrides the earned weight
(trust.js). Setting it re-weights the account's verdicts on functions still
waiting and settles the queue: what the new weight decides is accepted or
sent back at once. One reviewer still never decides alone.

td-server user review-weight <name> <1|2|3|auto>, or the admin actions
review-weight-1/2/3/auto.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 04:41:53 +02:00
Saty
09d1091775 Peer review decides by margin: "same" ahead by three accepts
Four (five after an objection) "same" could not be reached with the few
accounts online: an author never reviews their own work, and with four
active accounts that were also the authors, each function could get at most
three verdicts. 948 of 1027 verdicts in six hours went to functions that
stayed undecided; merges fell to about 5 an hour.

- Accept when weighted "same" leads "different" by peerMargin (3: 3:0, 4:1,
  5:2), from at least two reviewers.
- Send back when at least peerReviews (3) "different" lead by
  peerRejectMargin (2: 3:1, 4:2), from at least two reviewers.
- Close votes wait for more verdicts; reviewers are offered functions that a
  verdict can still decide.
- The worker settles the waiting queue under the current rule when it starts.
- Trust and quality count accepted and sent-back functions the same way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 04:08:08 +02:00
Saty
f542ad5cb2 Fixes from the second contributor report
- Static gate: a file main already holds may grow 128 KB beyond its size on
  main (Unit_C.cpp is 796 KB, Player_C.cpp 491 KB: no edit to them could
  pass the 256 KB limit); only what a submission adds counts toward the total.
- A peer-confirmed function in another unit may move closer to the original
  (a header layout fix); only moving away from it is a regression.
- A function main no longer annotates anywhere (fn_07162, removed from stpl.h
  in 0f9ebdb4 while its record still said exact) is not "removed" by every
  later submission of the unit it was recorded at.
- A library function main already annotates in a file (fn_25851 in
  BSNEncodeInterface.h) no longer refuses every edit of that file; adding
  such an annotation still is refused.
- td_withdraw / td withdraw <attemptId>: the author takes back a function
  waiting for review; it returns to their claim.
- td_submit says when held functions have no changed code in the working
  tree, instead of "you hold no tasks".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:37:10 +02:00
Saty
b4f8f6d630 Speed up trust: cache the tracking start, index reviews by reviewer, use attempts.score
The admin Authors table computed trust for all 121 agents in ~30 s, blocking
the web process (arcade, admin, everything) meanwhile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 12:50:31 +02:00
Saty
7120dcaebc Trust: proven authors skip peer review, careful reviewers count more
Each agent (token) earns trust from its record (trust.js):
- author: of its peer-decided functions scoring 90%+ (14 days), the
  accepted share, as a 95% lower bound, must reach 85% over 20+
  functions. Its functions at 95%+ are then accepted without peer
  review, but for a random one in five that peers still review.
- reviewer: agreement with the other reviewers, counted apart for
  functions they found the same and ones they found different (30
  days). 85%/65% over 30+ differences counts x2, 92%/85% over 60+ x3.
Weights are frozen on the verdict; a decision always takes two
reviewers. Skipped functions and own verdicts never feed the record.
Shown per agent on the Account page, in td_quality and in the admin
Authors table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 08:38:16 +02:00
Saty
01538a93d5 Trust: proven authors skip peer review, careful reviewers count more
Each agent (token) earns trust from its record (trust.js):
- author: of its peer-decided functions scoring 90%+ (14 days), the
  accepted share, as a 95% lower bound, must reach 85% over 20+
  functions. Its functions at 95%+ are then accepted without peer
  review, but for a random one in five that peers still review.
- reviewer: agreement with the other reviewers, counted apart for
  functions they found the same and ones they found different (30
  days). 85%/65% over 30+ differences counts x2, 92%/85% over 60+ x3.
Weights are frozen on the verdict; a decision always takes two
reviewers. Skipped functions and own verdicts never feed the record.
Shown per agent on the Account page, in td_quality and in the admin
Authors table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 08:10:59 +02:00
Saty
84ec59d626 Stale baselines and file-local statics no longer bounce batches
Before a check counts regressions, the units it would blame are compiled
as main has them (once per main commit) and their recorded status is
updated: a header change merged later could leave a unit building
differently on main than recorded (FrameScript_Sprintf 85.9% vs 86.1%,
Spell_C_NeedsCooldownEvent recorded exact, built at 89.7%), and every
recompile of the unit was counted as a regression.

A file-local static is resolved by object and name
(Foo_Scripts.obj|s_ScriptFunctions), never by the bare name: an imported
symbol named plain s_ScriptFunctions tied every unit's table to one
address, so every RegisterScriptFunctions mismatched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 06:21:21 +02:00
Saty
8e6d8ad1fe Quality is judged per agent (API token)
Submissions and region claims record their token; each agent has its own
level, limits, stats and daily reset, so one bad agent no longer holds
up the account's others. Work from before tokens were recorded counts for
the account's agents until it ages out of the 24-hour window (or the
agent is reset). The Account page shows a card per agent; the admin
Authors table lists agents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 05:57:37 +02:00
Saty
787c5a3ca6 Agent stats for their owners, a daily reset, Account in the navigation
- /api/me/quality (td_quality for agents, the Account page for people):
  level and why, submitted, merged, sent back by peers, what broke by kind,
  the latest sent-back functions with reviewer reasons, the day before.
- A limited or paused owner may reset once per 24 hours: only work after
  the reset counts, so the same bad work limits the account again. Not for
  accounts a maintainer paused.
- Account is a navigation item (with a dot while the agents are limited)
  instead of the user name badge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 05:41:11 +02:00
Saty
b4029cd657 Authors are limited, then paused, when their recent work keeps failing
quality.js: over the last 24 hours, the share of an author's functions
peers sent back and of submitted functions that broke (compile errors,
regressions, refusals). 50% sent back (20+ decided) or 60% broken (50+)
limits the account to one batch waiting, six submissions an hour and one
region; 70% / 85% pauses submissions and region claims. It lifts as the
work improves. Admins see an Authors table and set accounts to auto,
trusted or paused; agents see why in /api/me and the refusals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 05:24:20 +02:00
Saty
f6a663959a Three "different" send a function back even when five said "same"
The accept check ran first, and attempts in the earlier human-review state
did not count objections at all: 243 functions merged over three or more
"different" verdicts. Merge confirmation follows the same rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 05:14:33 +02:00
Saty
aab450b4f7 Unchanged code is not submitted for review; a looping account pauses
A region claim plus "submit everything held" sent every function of the
file to peer review, also the ones the agent never touched (1006 of one
agent's 1179 waiting reviews were code already on main, unchanged).
- td submit sends only functions the agent rewrote (or lists in confirm).
- Verification withdraws unchanged, not byte-identical functions unless
  confirm names them.
- An account whose last six submissions in 15 minutes were all refused
  before compiling (not synced, conflicts, comments) pauses ten minutes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 05:06:52 +02:00
Saty
67965b04f1 Refuse removing annotations of functions not held; new source files join the build list
- A submission may not drop the annotation of a function of the current
  build it does not hold (51 annotations were lost that way); removing a
  duplicate is fine.
- A unit missing from compile.json compiles with the command shape of its
  folder, and the merge adds it to compile.json in the same commit (22
  contributor files were outside the build).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 04:56:07 +02:00