Historical-only report. This is a dated playtest record, not the current behavioral contract. Use
MVP.mdfor the product contract andREADME.mdfor the current moderator manual.
Environment:
- Subreddit:
r/strikeledger_dev - Browser: logged-in Chrome profile through Codex browser extension
- Moderator account observed:
AlexSt1975 - Existing test target observed:
u/FeelingAd9932 - Non-moderator account observed:
FeelingAd9932 - Dashboard post observed:
https://www.reddit.com/r/strikeledger_dev/comments/1u4t1h2/strikeledger_dashboard/
-
npm run type-checkpassed. -
npm testpassed: 21 files, 178 tests. -
npm run lintpassed. -
npm run buildpassed.
- Development subreddit opened with the app installed.
- Moderator account with moderator UI access confirmed.
- App appears in the subreddit sidebar as
strikeledger. - Existing dashboard post opens.
- Native Reddit app settings page defaults reviewed.
- Native setting help text reviewed.
-
Warn and removecompleted live to confirm explicit Reddit moderator permission scope. - Ordinary-call attempt for
/internal/triggers/on-app-installrepeated. - [~] Scheduler route isolation probe attempted. Direct webview URL returned
401, and the controlled browser context could not issue the documented fetch from inside the embedded dashboard iframe. Follow-up dashboard-webview attempts were blocked before reaching the app: direct network access failed, controlled page evaluation exposed neitherfetchnorXMLHttpRequest, and the browser security policy blocked the form-based fallback. - Real scheduled cleanup confirmed from logs.
- Live operational log stream checked while triggering Admin, Warn, History, Profile, and Reverse. Logs were checked for Admin/settings, History/Profile, post Warn, post Warn and remove, post Warn and mark NSFW, comment Warn, comment Warn and remove, Reverse, precondition failures, and scheduler cleanup.
- Post
Warnsubmitted successfully. Reddit displayedStrike recorded: Warn for Rule 1. Active total: 2.Live logs later showedenforcement.submit.createdfort3_1u4tmuyandapi.history.okwithentryCount: 2,activeTotal: 2. - Comment
Warnsubmitted and verified. - Post
Warn and removesubmitted and verified. - Comment
Warn and removesubmitted and verified. - Post
Warn and mark NSFWsubmitted and verified. - [~] Same moderator retry/idempotency checked. Reopening the same post/action/rule with the same moderator blocked the duplicate without creating a second entry, but the exact same-form retry path was not reproduced through Reddit's form UI.
- Cross-moderator duplicate handling checked.
- Locked content enforcement rejection checked.
- Already removed content rejection checked.
- Already NSFW content rejection checked.
- Non-moderator enforcement rejection checked. As
u/FeelingAd9932, posthttps://www.reddit.com/r/strikeledger_dev/comments/1u4rwrp/my_first_post/showed no moderation actions menu and noStrikeLedger:actions.
- Public comments checked for no point totals or active totals.
- Public comments checked for target permalink.
-
Warn and removepublic comment wording checked. -
Warn and mark NSFWpublic comment wording checked. - Private notices checked. Live logs showed
userNotice:"succeeded"for post Warn, post Warn and remove, post Warn and mark NSFW, comment Warn, and comment Warn and remove, plusreversalUserNotice:"succeeded"for Reverse. Asu/FeelingAd9932, Reddit surfaced private notice conversations under/chat/requests, not the old message inbox. - Private notice permalink checked. The visible private notices included target permalinks, including
/r/strikeledger_dev/comments/1u4tmuy/my_next_post/. - [~] Action-specific private notice wording checked. The visible
Warn and mark NSFWprivate notice, correlated with log entry455e2456-f5c3-4341-9a2e-607c7c9ec1eb, included points, active total, and target permalink, but did not state that the post was marked NSFW. A visibleWarn and removeprivate notice was not found in chat requests. - [~] Native mod notes checked. Live logs showed
modNote:"succeeded"for post Warn, post Warn and remove, post Warn and mark NSFW, comment Warn, and comment Warn and remove, plusreversalModNote:"succeeded"for Reverse; native mod-note UI content was not inspected. - User-notice opt-out checked through native app settings.
-
StrikeLedger: Historyopened from a post menu and loaded the selected author. -
StrikeLedger: Profileopened from dashboard context and loaded coherent totals for the selected author. - Reversal dialog opened, required reason was submitted, and the native mod-note checkbox was visible.
- History opened from a comment menu.
- Profile opened from a comment menu.
- [~] Narrow/mobile rendering checked. Desktop History rendered the wide table and hidden compact cards; Chrome zoom did not trigger the app's
max-width: 720pxlayout, so a real narrow/mobile viewport still needs manual or tool-assisted verification. - Active entry reversed with a required reason.
- Admin recalculate checked for a selected user.
- Non-moderator dashboard view checked for a user with entries.
- Non-moderator dashboard empty state checked.
- [~] Non-moderator protected API blocking checked. The non-moderator dashboard exposed only the compact self-history view and no Admin, Profile, Reverse, Recalculate, Run cleanup, or Rules JSON controls. Recent logs showed
api.bootstrap.limitedandapi.self_summary.okforFeelingAd9932; direct protected GET route probes were blocked by the browser before reaching Devvit, so live POST-route blocking is still not directly observed.
- Admin tab opened and current revision/rules displayed.
- Native point value setting changed and applied to a new action.
- Admin rule label changed and applied to new enforcement forms.
- Admin stale revision conflict checked. After deploying
strikeledger@0.8.5, a stale revision5JSON import after revision6saved producedSettings changed. Current revision: 6.and did not overwrite the newer settings. - Invalid rules JSON or values rejected.
- Dashboard iframe loaded with tabs
History,Profile, andAdmin. - Admin view showed revision
3, decay1/30d, user notices on, and native mod notes on. - Existing history for
u/FeelingAd9932showed one active Rule 1Warnentry with succeeded side effects. - Post
Warnwas submitted onhttps://www.reddit.com/r/strikeledger_dev/comments/1u4tmuy/my_next_post/with moderator noteLive playtest post Warn 2026-06-19. - After the post
Warn, post-menuHistoryandProfilerows repeatedly closed without navigating in the controlled browser, even though the menu rows were visible. Dashboard direct lookup was started as a fallback but Chrome blocked automation because an extension UI was open. - Exact scheduler-route isolation still needs live Devvit validation from the embedded dashboard console or a more capable browser console path.
- Continuation performed on 2026-06-19:
- Non-connected Devvit logs showed repeated
StrikeLedger scheduler.cleanup.okwithretentionDays:365,maxEntries:2000, and no deletions. - Logs confirmed the earlier post
Warnentry0df78507-a8d0-4550-a858-95f56698e694fort3_1u4tmuy, actionwarn, statussucceeded,activeTotal:2, and side effectspublicComment,modNote, anduserNoticeallsucceeded. - Post
Warn and removewas submitted onhttps://www.reddit.com/r/strikeledger_dev/comments/1u4tn1z/remove_this_post/with moderator noteLive playtest post Warn and remove 2026-06-19. Reddit displayedStrike recorded: Warn and remove for Rule 1. Active total: 5. - Logs confirmed post
Warn and removeentry98ffbbef-9b59-4b28-8b44-ddb494c153c6fort3_1u4tn1z, actionwarn_remove, statussucceeded,activeTotal:5,remove:"succeeded",publicComment:"succeeded",modNote:"succeeded", anduserNotice:"succeeded". - The removed post showed Reddit moderation state via
Add removal reasonand a new locked/distinguished app comment fromu/strikeledger. The public text wasModerator notice: this content violates Rule 1. This moderator action has been recorded in subreddit warning history. Target: ...; it included the target permalink and did not include point totals, active totals, or a claim that the post was removed. - A fresh comment target was created on
https://www.reddit.com/r/strikeledger_dev/comments/1u4rwrp/my_first_post/:Live playtest comment target for StrikeLedger Warn 2026-06-19, permalinkhttps://www.reddit.com/r/strikeledger_dev/comments/1u4rwrp/comment/osl667e/. - Comment
Warnwas submitted againstt1_osl667ewith moderator noteLive playtest comment Warn 2026-06-19. Reddit displayedStrike recorded: Warn for Rule 1. Active total: 1. - Logs confirmed comment
Warnentry1e703298-cc52-499f-9c10-77246487fc0efort1_osl667e, actionwarn, statussucceeded,activeTotal:1, and side effectspublicComment,modNote, anduserNoticeallsucceeded. - After reload, the comment thread showed a locked/distinguished app reply under
osl667ewith the target permalink. The public text did not include point totals or active totals. - The native Devvit app settings page showed installed app settings with defaults and help text for point values, decay, public/private/native templates, private notices, native mod notes, reversal mod notes, distinguished/locked app comments, and sticky-comment toggles. Observed defaults included Warn
1, Warn and remove3, Warn and mark NSFW1, decay amount1, decay interval30, user notices on, native mod notes on, reversal mod notes on, distinguished comments on, and locked comments on. - Post
Warn and mark NSFWwas submitted onhttps://www.reddit.com/r/strikeledger_dev/comments/1u4tmuy/my_next_post/with moderator noteLive playtest post Warn and mark NSFW 2026-06-19. Reddit displayedStrike recorded: Warn and mark NSFW for Rule 1. Active total: 6. - The Warn/NSFW target showed the
NSFWlabel and a locked/distinguished app comment fromu/strikeledger. The public text wasModerator notice: this content violates Rule 1. This moderator action has been recorded in subreddit warning history. Target: ...; it included the target permalink and did not include point totals, active totals, or a claim that the post was marked NSFW. - Logs confirmed post
Warn and mark NSFWentry455e2456-f5c3-4341-9a2e-607c7c9ec1ebfort3_1u4tmuy, actionwarn_nsfw, statussucceeded,activeTotal:6,markNsfw:"succeeded",publicComment:"succeeded",modNote:"succeeded", anduserNotice:"succeeded". - Comment
Warn and removewas submitted againstt1_osl667ewith moderator noteLive playtest comment Warn and remove 2026-06-19. Reddit displayedStrike recorded: Warn and remove for Rule 1. Active total: 4. - Logs confirmed comment
Warn and removeentryaefb3186-5e81-4531-bf95-c06b3d429878fort1_osl667e, actionwarn_remove, statussucceeded,activeTotal:4,remove:"succeeded",publicComment:"succeeded",modNote:"succeeded", anduserNotice:"succeeded". The Reddit thread also exposedAdd removal reasonon the target comment, consistent with removed moderator state. - The comment
Warn and removeapp reply was locked/distinguished, included the target permalink, and did not include point totals or active totals. - Comment-menu
Historyopened the dashboard foru/AlexSt1975; the iframe showed active total4and the two comment entries,Warn and removeandWarn. - Comment-menu
Profileopened the dashboard foru/AlexSt1975; the iframe showed active total4, lifetime points4, reversed entries0, and the two comment entries. - Dashboard Admin was reopened and still showed revision
3, decay1/30d, user notices on, mod notes on, typed rule controls, and theRecalculateuser lookup control. Attempting to enter the selected user and run Recalculate was blocked by a Chrome extension UI; dismiss the extension UI before continuing browser automation. - Admin Recalculate was later submitted for
AlexSt1975. The dashboard returnedname:alexst1975: active total 4., matching the previously observed History/Profile total. Logs confirmedapi.recalculate.okwithuserKey:"name:alexst1975"andactiveTotal:4. - The active one-point
Warnentry1e703298-cc52-499f-9c10-77246487fc0ewas reversed with reasonLive playtest reversal 2026-06-19. The dashboard updated to active total3, kept the entry visible asReversed, and showed the reason plusBy: u/AlexSt1975. - Logs confirmed
api.reverse.okfor entry1e703298-cc52-499f-9c10-77246487fc0e, targett1_osl667e, actionwarn, statusreversed,activeTotal:3,reversalModNote:"succeeded", andreversalUserNotice:"succeeded". - Already-NSFW precondition was checked by submitting
Warn and mark NSFWagainsthttps://www.reddit.com/r/strikeledger_dev/comments/1u4tmuy/my_next_post/, which already displayedView NSFW content. NoStrike recordedsuccess toast appeared. Logs confirmedenforcement.submit.precondition_failedfort3_1u4tmuywith reasonAlready NSFW posts cannot be warned and marked NSFW. - Already-removed precondition was checked by submitting
Warn and removeagainsthttps://www.reddit.com/r/strikeledger_dev/comments/1u4tn1z/remove_this_post/, which displayedAdd removal reason. NoStrike recordedsuccess toast appeared. Logs confirmedenforcement.submit.precondition_failedfort3_1u4tn1zwith reasonAlready removed content cannot be warned and removed. - Invalid Admin rules JSON was rejected in the dashboard. Submitting
{ "schemaVersion": 1, "revision": 3, "rules": [ }producedUnexpected token '}', ... is not valid JSON, left the saved revision at3, and the Rules JSON field was refreshed afterward. - Admin Rule 1 label was changed to
Rule 1 Playtestand saved. The dashboard advanced to revision4, and a newly openedStrikeLedger: Warnform showed the rule selector valueRule 1 Playtest (+1). The form was canceled without submitting enforcement. - A stale revision probe then submitted the earlier revision
3rules JSON. Expected stale-conflict behavior was not observed: logs showed anotherapi.settings.save.okand the dashboard advanced to revision5. The imported JSON restored the label back toRule 1, and the final Admin view showed revision5with headingRule 1. - Local fix added after the stale revision probe: Rules JSON import now submits the imported config revision, and
/api/settingsrejects mismatched request/config revisions without overwriting current settings. - Local verification after the fix passed:
npx vitest run src/routes/api.test.ts(37 tests),npm run type-check,npm test(21 files, 178 tests),npm run lint, andnpm run build. - Uploaded and installed
strikeledger@0.8.5tor/strikeledger_dev.npx devvit view --jsonshowed uploaded version0.8.5, and the embedded app-page README reportedApp version: 0.8.5. - Live stale revision retest passed on
strikeledger@0.8.5: Admin started at revision5; saving revision5Rules JSON with a temporary Rule 1 label advanced settings to revision6; submitting the old revision5Rules JSON producedSettings changed. Current revision: 6. - Reloading Admin after the stale conflict showed revision
6with the temporary Rule 1 label still present, confirming the stale JSON did not overwrite current settings. The temporary label was then restored toRule 1, advancing Admin to revision7. - Recent non-connected Devvit logs corroborated the stale retest:
api.settings.save.okat revision6,api.settings.save.conflictwithexpectedRevision:5andcurrentRevision:6, thenapi.settings.save.okat revision7for the restore. - Native Warn point value was temporarily changed from
1to2on the Reddit for Developers install settings page. After reload, the settings page showed Warn point value2, and the dashboard summary showedWarn: 2, Warn and remove: 3, Warn and mark NSFW: 1. - A new
StrikeLedger: Warnform on postt3_1u4tmuyshowedRule 1 (+2)andRule 2 (+2). Rule 2 was selected and submitted with moderator noteLive playtest native Warn point value 2 retry 2026-06-19. - Recent non-connected Devvit logs confirmed
enforcement.submit.createdfor entry68af88b6-bff6-488b-9472-8d75c481e68b, targett3_1u4tmuy, actionwarn,ruleId:"rule-2", statussucceeded, andactiveTotal:8, consistent with the previous active total6plus the temporary 2-point Warn value. - Native Warn point value was restored to
1; after reload, the settings page showed Warn point value1, and the dashboard summary returned toWarn: 1, Warn and remove: 3, Warn and mark NSFW: 1. - Locked content rejection was checked against locked app comment
t1_osk95mk. SubmittingStrikeLedger: WarnshowedLocked content cannot be warned.and no success toast. Recent non-connected Devvit logs confirmedenforcement.submit.precondition_failedfortargetId:"t1_osk95mk",targetKind:"comment", and reasonLocked content cannot be warned. - Same-moderator duplicate retry was checked by reopening
StrikeLedger: Warnfor postt3_1u4tmuy, selectingRule 2, and submitting after the prior successful Rule 2 Warn entry68af88b6-bff6-488b-9472-8d75c481e68b. Recent non-connected Devvit logs showedenforcement.submit.duplicatewithexistingEntryId:"68af88b6-bff6-488b-9472-8d75c481e68b"and no newenforcement.submit.createdfor that retry. This confirms duplicate blocking for a new form by the same moderator, but not the exact same consumed-form idempotent retry path. - Narrow/mobile rendering was partially checked from the live dashboard History view for
u/FeelingAd9932. At the desktop viewport, History showed the wide table,.compact-entry-cardelements existed in the DOM, and.compact-entry-listwas hidden. Increasing Chrome zoom did not trigger themax-width: 720pxmedia query, so the compact mobile card layout was not directly observed live. - User notices opt-out was checked by disabling native
Send private user notices, submitting Rule 2Warnon postt3_1u4rwrpwith moderator noteLive playtest user notice opt-out 2026-06-19, and confirming logs entry2317867b-d741-4188-9aff-e985d8b000edhaduserNotice:"skipped"whilepublicCommentandmodNotesucceeded. - Native
Send private user noticeswas restored to enabled and confirmed checked after reloading the Reddit for Developers settings page. - Non-moderator session was confirmed as
u/FeelingAd9932; the account menu showed noMod Modeentry. - Opening the dashboard post as
u/FeelingAd9932loaded the limited non-moderator view:Total pointswas9, and History showed only compact rows with dates, rule labels, and point values (Rule 21,Rule 22,Rule 11,Rule 13,Rule 11, andRule 11). The dashboard did not show Admin, Profile, Reverse, Recalculate, Run cleanup, or Rules JSON controls, and it did not showRequest failed with 403. - Recent non-connected Devvit logs confirmed the non-moderator dashboard path:
api.bootstrap.limitedandapi.self_summary.okforusername:"FeelingAd9932",entryCount:6, andactiveTotal:9. - Non-moderator enforcement rejection was checked on
https://www.reddit.com/r/strikeledger_dev/comments/1u4rwrp/my_first_post/. Asu/FeelingAd9932, the page showed no moderation actions menu and noStrikeLedger:post actions. - Direct protected GET route probes from the non-moderator webview URL were blocked by the browser with
net::ERR_BLOCKED_BY_CLIENTbefore reaching Devvit, so they were not counted as app-level protected API evidence. - The affected user's Reddit inbox showed public
from strikeledger[M]app replies with target permalinks for recent test posts, but private notice messages were not visible on/message/messages/,/message/inbox/,/message/unread/, or/notifications;/message/messages/reported that private messages are archived and showedNo messages found. - Follow-up private notice inspection found the missing notices under Reddit Chat requests at
https://www.reddit.com/chat/requests. - The Jun 19 3:07 PM private notice said
Your content in r/strikeledger_dev violated Rule 1. This action added 1 warning point(s). Your current active warning total is 2. Target: /r/strikeledger_dev/comments/1u4tmuy/my_next_post/. Please review the community rules before participating again. - The Jun 19 6:08 PM private notice said
Your content in r/strikeledger_dev violated Rule 1. This action added 1 warning point(s). Your current active warning total is 6. Target: /r/strikeledger_dev/comments/1u4tmuy/my_next_post/. Please review the community rules before participating again. - Recent logs correlate the Jun 19 6:08 PM notice with
Warn and mark NSFWentry455e2456-f5c3-4341-9a2e-607c7c9ec1eb(activeTotal:6,markNsfw:"succeeded",userNotice:"succeeded"). The private notice did not include the expected action outcome text such asThe post was marked NSFW. - Follow-up Chrome control could list the open Reddit Chat room tab, but tab claiming/page reads and screenshots timed out, so no additional private-notice result was marked from that browser-control attempt.
- Non-connected Devvit logs showed repeated