Commit graph

105 commits

Author SHA1 Message Date
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
Saty
b55b592a82 Submissions may not declare functions that are defined nowhere
The server compiles units one by one and never links, so a call to a
function declared only by its prototype (an invented helper, or a member
declared in a header and never written) compiled and could merge; main
would not link. A newly declared function at file or class scope must be
defined in the submission, exist elsewhere in the repository, or be a
known function of the original (by name or fn_ ID).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 04:29:30 +02:00
Saty
347ce4ea24 Withdraw held functions the submission did not write, also when main has code for them
Verification compiles the unit a function lives in on main, so a held but
unwritten function was found compiled from main code and sent to peer
review as if submitted; reviewers shown the submitted files could not find
it (592 verdicts said so, 196 such functions were waiting).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:55:05 +02:00
Saty
a9eb651688 Compile only the includers a header change can affect
A verification of a header template compiled every includer (705 for
stpl.h) and a merge every includer of every submitted header (up to 1199
per header), even when the header only differed in line endings; one
such job took up to an hour and held up every other batch. Now:
- merge: headers unchanged from main are skipped; for changed ones, the
  includers whose source mentions a name the change touched (identifiers
  on changed lines, the enclosing class/struct), all of them only when
  that is more than 300;
- verification: the includers that mention the template arguments of
  the annotation (or the class), at most 16.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:40:19 +02:00
Saty
1038c1d390 Retire single-function and server-picked claims; merge rate in bytes per hour
- New work is claimed by region only: claim without a task claims the best
  free region, claim-batch with a file claims it as a region, address
  ranges are refused; a single function only to fix one that came back.
  td_claim_batch and td_list_tasks are gone from the MCP tools.
- Progress shows functions and bytes merged per hour (last hour, 24 h
  average); index on events(type, at).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:21:56 +02:00
Saty
d9825a64d3 Peer review message: five "same" merge, three "different" send back
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:11:18 +02:00
Saty
1a4775e655 Active agents: counts only in "Working on" (file names on hover)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:08:47 +02:00
Saty
75e16d4ea2 Caddy: ACME account email (expiry notices, ZeroSSL fallback); regions: batch-sized first
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:06:33 +02:00
Saty
1cd2336823 Website rework: views, live socket, map, feed, review panel, arcade, admin
- Hash-routed views: home, guide, review, arcade, admin, account, login;
  wider layout.
- /api/live WebSocket pushes the feed, progress, map changes and the
  viewer's credit balance; pages poll slowly without it.
- Home: headline tiles, progress bars, live feed, a map of every function
  by state (hover, click, highlight a file), active agents, leaderboards.
- Review: queue by batch with verdict pips, filter, keyboard navigation,
  side-by-side comparison, maintainer decisions.
- Arcade: wallet, coin flip, dice, slots, rounds, big wins, daily bailout.
- Admin: account search, approve, roles, revoke, reset password, delete.
- The installers fetch the compiler for local checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:56:27 +02:00
Saty
e246671873 Arcade credits and games, account deletion, password reset, feed and map
- Credits are booked from what the database records (merged functions,
  peer-confirmed ones, accepted no-decompile claims, submissions that went
  on, reviews that agreed with the outcome), once each; play money for
  coin flip, dice and slots (server-side CSPRNG, session only).
- Admins delete accounts (kept as deleted_<id> when they have work) and
  reset passwords.
- /api/feed (public events) and /api/map (every function by address,
  one state letter each) for the main page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:44:18 +02:00
Saty
360fb9a5ce td: regions, local compiler, region submits; guidance for the region workflow
- td toolchain install / td_toolchain_install: downloads the compiler
  package (approved accounts) and sets up local checks; td-server
  toolchain pack builds it from the compile image.
- td_check compiles on the contributor machine only (includers: true for
  header changes, using the server include map).
- td_regions, td_claim_region, td_release_region; td_submit adds rewritten
  functions of shared regions as competing candidates.
- AGENTS.md, MCP instructions and guidance describe the region loop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:37:55 +02:00
Saty
10f840b18f Regions, competing candidates, five "same" merge, checks compile locally
- Agents list regions (source files or classes: open, done, in flight,
  who claimed them), claim one as a whole and submit it in one batch.
- Several agents may claim a region; each may submit any function of it.
  Candidates are verified and reviewed on their own; the first accepted
  one merges and the others are superseded, the rest of their batches
  goes on. A done task stays done (trigger).
- Peer review: five "same" accept (no human step), three "different"
  send back.
- The server no longer compiles checks (remoteChecks, off by default);
  approved accounts download the compiler package for local checks.
- Tables for game credits and rounds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:32:20 +02:00
Saty
0e8e880176 Deploy a second instance: test.saty.dev (togetherdecomp-test)
tools/deploy.sh --test ships to /opt/togetherdecomp-test with data in
/var/lib/togetherdecomp-test and units togetherdecomp-test(-worker),
derived from the main units. Caddy serves it on test.saty.dev.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:14:44 +02:00
Saty
e45711aa74 Returned batches drop their saved compile and merged files
Only a merge uses them and a returned batch never merges; verification
returns left them behind (32 GB of saved checks, 9.5 GB of results on the
live database).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:09:31 +02:00
Saty
22b5975ffc Fair verification queue; up to 8 batches waiting per account (was 4)
Verification took the oldest batch overall, so the per-account cap of 4 was
what kept one fast contributor from holding every slot. Now the next slot
goes to the account with the fewest batches verifying, and the cap can be
higher.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-19 00:34:29 +02:00
Saty
e3fda917c5 Hourly submit limit counts only accepted submissions
Refused submissions (too many batches waiting) counted against the 30 per
hour, so an agent retrying while its queue was full used up the hour and
stayed locked out after the queue cleared. Refusals now say when to retry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-19 00:31:28 +02:00
Saty
3c946d7689 Regression check: exact to match_unresolved is not a regression
Same bytes; whether a referenced label resolves depends on which other
units the check compiled. The same Scripts.cpp functions refused batches of
several contributors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-19 00:17:23 +02:00
Saty
9c8cd1320d Verify three batches at once by default (was two)
The server has room (8 cores, load about 5.5); batches waited about 15
minutes for their result.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-19 00:09:01 +02:00
Saty
8eca3af0a5 Review-first rule counts reviews per claim over the last hour
It counted reviews since the last claim, so an agent doing hundreds of
reviews an hour was refused when it claimed twice in a row. Now it needs 3
reviews per claim over the last hour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-19 00:06:38 +02:00
Saty
eb8e088697 Merge titles say Confirm for code already on main; keepCode keeps main's annotations
A batch whose functions were all already on main (only confirmed now) was
titled "Decompile N functions", while its diff showed only the batch's other
changes. When a split keeps pending code, annotations that are on main stay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 23:53:15 +02:00
Saty
714ee0a61c An account may hold 500 tasks (was 200)
Claims and submissions are capped by the same limit, so everything held
can be claimed and submitted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 23:01:33 +02:00
Saty
a01440e14f Peer review picks at random from every review still open
Functions collecting confirmations toward auto-acceptance came only after
the whole peer queue, which never ran empty: 475 waited at 3 "same". Now
reviewers pick at random (by batch) from everything not yet decided.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 22:44:34 +02:00
Saty
0266c765ad Merge: changing others' functions bounces the batch, not one function per round
The "changes functions it does not hold" reason is about the whole
submission; sending back one function per round drained batch 890 with the
same reason every time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 22:39:55 +02:00
Saty
2f51770e32 Approved functions merge even when the split cannot put pending ones back
Splitting a half-reviewed batch puts its pending functions back as on main.
When the approved functions call a pending one by its new signature, or a
helper the submission added, that does not compile, and the batch waited to
merge as a whole (113 approved functions in 19 batches). Next round keeps
the pending functions' new code without their annotations: main compiles,
they do not count as done, and their review goes on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 22:29:19 +02:00
Saty
abba0f5f06 Header template copies are not regressions while the header is unchanged
A template or inline function defined in a header is emitted by every unit
that uses it; main records its best copy at one of them. Editing that unit
could drop or vary its copy and refuse the submission, although the other
units still emit the good one (16 batches in an hour, mostly stpl.h).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 22:00:01 +02:00
Saty
aab2eceb3d Checks without waiting: td_check wait:false and td_check_result
A tool call blocks most AI apps, so an agent waiting for the server's compile
could do nothing else. td_check with wait: false queues the check and returns
its id at once; td_check_result fetches the state and the result later
(POST /api/check { wait: false }, GET /api/checks/:id). The guidance tells
agents never to wait idle: start the check, keep working or review, fetch
the result afterwards.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 20:42:47 +02:00
Saty
eff085bcbb td reports its build; outdated agents are told to update in their guidance
Every td request carries x-td-build (the SHA-256 of the binary, 'dev' from a
checkout). When it is not one of the published builds, or missing (td from
before this change), the guidance in work responses says to restart the AI
app or run td update, and which tools the old td lacks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 20:39:04 +02:00
Saty
064c55f394 Productivity log: fixes from the contributor report
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNwtXPYqFu3oKaaXwYwNWW
2026-10-18 20:34:53 +02:00