ã1ä»¶ã§ãç°åžžãªãå šäœåæ¢ãã13æ¥éã®ç¡é³æ»ãäœã£ã話
ååãComputer Useæ¿èªãã€ã¢ãã°ãèªåã§æŒãTerminalç£èŠããŒã¢ã³ã®è©±ãæžããŸãããä»åã¯åããç¡äººãžã§ããéãã«æ»ã¬ãç³»ã§ãããåå ã¯ç£èŠã®ç©Žã§ã¯ãªãèšèšãã®ãã®ã§ãããfounder-scoutã®DMèªåéä¿¡ã¬ãŒã³ãã1ä»¶ã®ç°åžžããŒã¿ã®ããã§13æ¥é0éã®ãŸãŸæ°ã¥ãããªãã£ã話ã§ãã
å°ãããšïŒexit codeã¯åºãŠããã®ã«èª°ãæ°ã¥ããªãã£ã
founder-scoutã«ã¯ã@bokuwalilyã®ãã©ãã¯ãŒãžååDMãéãfollowersã¬ãŒã³ããããŸãã2026-09-10ã«ç¢ºèªãããšãããçŽè¿ã®éä¿¡ã8/28 16:35ã§æ¢ãŸã£ãŠããããšãåãããŸããã13æ¥éã1éãéããŠããŸããã§ããã
ãã¥ãŒïŒstate/followers_queue.jsonlïŒã¯ run ã®ãã³ã«ç©ã¿äžããç¶ããŠããŠã336ä»¶ãã390ä»¶ãŸã§å¢ããŠããŸãããã€ãŸãäžæžãèªäœã¯æ¯æ¥çæãããŠããŠãéä¿¡ã¹ã¯ãªãããæ¯æ¥èµ·åããŠãããããã§ã0éããã°ã«ã¯process.exit(3)ã飿¥èšé²ãããŠããŸãããããã®abortçµè·¯ãDiscordã¢ã©ãŒããåŒã°ãªãå®è£
ã ã£ãããã誰ã®ç®ã«ãçãŸããŸããã§ããã
çå ïŒã1ä»¶ã¢ãŠããããå šäœã¢ãŠããã«ããŠãã
8/28ã«ãäžæžããžèªåã®ããŠã³ããŒãæ°ã売äžã®å®æ°ãçŽã蟌ãã®ãé²ãnumber-gateïŒcheckColdOutboundïŒãéä¿¡7çµè·¯ã«é
ç·ããŸããããã®ãšãfollowers_send.mjsãšdm.mjsãããããã®äžã«1ä»¶ã§ãæ°åæŒããããã°ãã®å Žã§process.exit(3)ããŠå
šäœãæ¢ããèšèšã«ããŠããŸããã
æŒããŠããäžæžãã¯@kouAI_workå®ãŠã®ãããŠã³ããŒãã8æ25âŠããšããæé¢ã§ããããã®1ä»¶ã¯å°åž³ã«äœãèšé²ãããªãã£ãã®ã§ãæ¯runåããã¥ãŒå é ã®6ä»¶ãéžã°ããæ¯runåããã®1ä»¶ã§æ¢ãŸããåŸãã«æ§ããŠããéä¿¡å¯èœãªäžæžãã¯ãäžåºŠãè©äŸ¡ãããããšãªããã¥ãŒã«ç©ã¿äžããç¶ããŸããã
åãæ¥ã
dm.mjsåŽã§ãååã®å¥ã®äºæ ãèµ·ããŠããŸãããåã3人ãžã®composer timeoutã3é£ç¶å€±æã«ãªã忢å€å®ã«åœãã£ãçµæãåŸãã®4人ã2runé£ç¶ã§éããŠããŸããã§ãããåå ã¯éãã©ãããã¥ãŒå é ãåºå®ãããâããã§æ¯åæ¢ãŸãããšããåã圢ãããŠããŸãã
fail-closedã¯ããã®1ä»¶ãæ¢ãããããã®ãã®
ãããä»åã®æèšã§ããnumber-gateãcomposeræ€èšŒã®ãããªéä¿¡åãã§ãã¯ã¯ãå±éºãª1éãåºããªãããã«ååšããŸãããããã1ä»¶ã§ãç°åžžãããã°å
šäœãexitããããšããå®è£
ã«ãããšããã®ç°åžžãèªå·±ä¿®åŸ©ããªãéãã¬ãŒã³å
šäœãæ°žä¹
忢ããŸããèšé²ãããªãç°åžžã¯ãã¥ãŒå
é ã«å±
座ãç¶ããã®ã§ãèªå·±ä¿®åŸ©ããã¯ãããããŸããã
ä¿®æ£ã¯2ç¹ã§ãã
1. èœãšããè¡ã¯å°åž³ã«èšé²ããŠexhaustedæ±ãã«ãã
src/followers_send.mjsã®è©²åœç®æã§ãã
// src/followers_send.mjs:84-97
// éä¿¡åã²ãŒã: èªåã®DLæ°ã»å£²äžã®å®æ°ãå
¥ã£ãŠããäžæžãã¯ããã®1ä»¶ã ããå€ããŠå°åž³ã«èšé²ããã
// 1ä»¶ã§å
šäœãæ¢ãããšããã®äžæžãããã¥ãŒå
é ã«æ®ãç¶ããŠã¬ãŒã³ããšæ¢ãŸã
// ïŒå®æž¬2026-08-28ã09-10: kouAI_work 1ä»¶ã§13æ¥é0éïŒã
{
const gateAt = new Date().toISOString();
const leaks = drafts
.map((t) => ({ who: t.handle || '?', bad: checkColdOutbound(t.dm || '') }))
.filter((x) => x.bad.length);
for (const l of leaks) {
console.error(`number gate: é€å€ @${l.who} â ${l.bad.map((b) => b.why).join('/')}`);
appendSync(SENT, { handle: l.who, ok: false, reason: 'number-gate: ' + l.bad.map((b) => `${b.why}(${b.hit})`).join('/'), follow: 'skipped', at: gateAt, lane: LANE });
exhausted.add(l.who);
}
}
const sendable = drafts.filter((d) => !exhausted.has(d.handle));
const batch = sendable.slice(0, Math.min(perRun, laneLeft, accountLeft));
process.exit(3)ã¯æ¶ããŸããã代ããã«SENTå°åž³ãžok:false, reason:'number-gate: âŠ'ãæžã蟌ã¿ããã®1ä»¶ã ããexhaustedæ±ãã«ããŠãæ®ãã¯éåžžã©ããããããžé²ã¿ãŸããdm.mjsåŽããŸã£ããåã圢ã§å
¥ã£ãŠããŸãã
// src/dm.mjs:82-94
// éä¿¡åã²ãŒã: æ°åæŒãã®äžæžãã¯ããã®1ä»¶ã ããå€ããŠå°åž³ã«èšé²ãããå
šäœãæ¢ãããš
// å
é ã«æ®ãç¶ããŠã¬ãŒã³ããšæ¢ãŸãïŒfollowers ã¬ãŒã³ã§13æ¥é0éã®å®æž¬ããïŒã
{
const gateAt = new Date().toISOString();
const leaks = queue
.map((t) => ({ who: t.handle || '?', bad: checkColdOutbound(t.dm || '') }))
.filter((x) => x.bad.length);
for (const l of leaks) {
console.error(`number gate: é€å€ @${l.who} â ${l.bad.map((b) => b.why).join('/')}`);
recordSent({ handle: l.who, ok: false, reason: 'number-gate: ' + l.bad.map((b) => `${b.why}(${b.hit})`).join('/'), follow: 'skipped', at: gateAt });
exhausted.add(l.who);
}
}
const sendable = queue.filter((r) => !exhausted.has(r.handle));
å°åž³ã«æžããããšã§ã次run以éã¯exhaustedéåã®æ§ç¯æç¹ã§ãã®1ä»¶ãæåããé€å€ãããŸãïŒfollowers_send.mjs:49-51ãdm.mjs:50-52ã§number-gateãšããæååãreasonããæŸã£ãŠexhaustedã«è¶³ããŠããç®æ)ãèšé²ããç¬éã«ããã®ç°åžžã¯ã次runã§èªåçã«æ¶ãããç°åžžã«ãªã£ãããã§ãã
2. å€±ææŽã®ããçžæã¯ãã¥ãŒã®åŸããž
ããäžã€ã®ä¿®æ£ãã3é£ç¶å€±æã¬ãŒãïŒconsecutiveFailures >= 3ã§breakïŒããã€ãåãé¡ã¶ãã«åœãããªãããã«ããäžŠã¹æ¿ãã§ãã
// src/followers_send.mjs:81-83
// äžåºŠå€±æããçžæã¯åŸããžåããå
é ã®åãæ°äººãæ¯run倱æãããšã3é£ç¶å€±æã§åæ¢ãã«
// åœãããåŸãã®éãã人ãŸã§éé£ãã«ãªãïŒå®æž¬2026-09-10: åã3人ã§2runé£ç¶0éïŒã
.sort((a, b) => (attempts.get(a.handle) || 0) - (attempts.get(b.handle) || 0));
attemptsïŒéå»ã®é信詊è¡åæ°ïŒãå°ãªãé ã«ãœãŒãããã ãã§ããããã§ãDMãéæŸãããŠããªãã»composerãã¿ã€ã ã¢ãŠããããšãã£ãæ§é çã«å€±æãç¶ããçžæããã¥ãŒå
é ãå æããªããªããåŸãã«äžŠã¶éä¿¡å¯èœãªçžæãæ¯runéé£ãã§æ¢ãŸãããšããªããªããŸãã
ç£èŠïŒexit codeãåºãŠããã ãã§ã¯ãåããŠããããšã¯èšããªã
ãã®äºæ
ããªã13æ¥ãæ°ã¥ãããªãã£ãããšãããšãå£ããabortçµè·¯ã®ãã°ã¯ããŒã«ã«ã«æ®ã£ãŠããããã§ããlaunchctl listãpm2 listã«ãããŒããããŠããããšåºãŠããŠããããã¯å®è¡ã¯ãããŠãããšããæå³ã§ãããªããææãåºããŠãããã©ããã¯å¥åé¡ã§ãã
å€å®ã¯3ç¹ã»ããã§èŠãå¿
èŠããããŸããâ ãžã§ããããŒããããŠããããâ¡çŽè¿ãã°ã®exit codeã®ååžãâ¢åªäœåŽã®å®ç©ïŒãã®å Žåã¯DMéä¿¡æžã¿ã®å®ä»¶æ°ïŒãä»åã®ã±ãŒã¹ã¯â â¡ãŸã§ã¯æ£åžžã«èŠããâ¢ãèŠãŠåããŠã13æ¥é0éãã«æ°ã¥ããŸãããå ããŠãlaneTodayïŒåœæ¥ã®ã¬ãŒã³éä¿¡æ°ïŒããã°ã«æ¯runåºåããããã«ãã3æ¥é£ç¶ã§0ã«ãªã£ããç°åžžãšããéŸå€ãéçšã«ãŒã«ã«è¶³ããŸãããfollowers_send.mjs:101ã®ãã°è¡ããã®ææã§ãã
console.log(`queue=${sendable.length} laneToday=${laneToday}/${perDay} accountToday=${sentToday.length}/${cfg.limits.dmPerDay} thisRun=${batch.length} held=${held}`);
èžãã èœãšã穎
- 1ä»¶ã®ç°åžžã§
process.exit(3)ããèšèš â èšé²ãããªãç°åžžã¯ãã¥ãŒå é ã«å± 座ãç¶ããã¬ãŒã³ãæ°žä¹ åæ¢ãã - abortçµè·¯ã«Discordã¢ã©ãŒããé ç·ãå¿ãã â exit codeããã°ã«åºãŠããŠã誰ãèŠãªãçµè·¯ã¯ãç¡é³ããšåã
- èœãšããè¡ãå°åž³ã«æžããã«ã¹ãããã ãããŠãã â æ¬¡runã§åãäžæžããåãé çªã§åè©äŸ¡ãããæ¯ååã1ä»¶ã§è©°ãŸã
- 3é£ç¶å€±æã¬ãŒããå é åºå®ã®çžæã«æ¯ååœãã â å€±ææŽã®ããçžæãåŸããžåãã ãã§ãåŸç¶ã®éä¿¡å¯èœãªçžæãéé£ãã«ãªããªããªã
launchctl listã®ããŒãç¶æ ã ãã§ã皌åäžããšå€æããŠãã â exit codeãšåªäœåŽã®å®ä»¶æ°ãŸã§èŠãŠåããŠå¥åº·ãšèšãã
ãŸãšã
- fail-closedãªã²ãŒãã¯ããã®1ä»¶ãæ¢ãããããã«æžããã®ã§ããã¬ãŒã³ãæ¢ãããããã«æžããã®ã§ã¯ãªã
- å šäœåæ¢ïŒæªèšé²ã®çµã¿åããã¯ã次runã§èªåçã«æ¶ããªãéãæ°žä¹ 忢ã«ãªããæ¢ããèšèšãæžããšãã¯å¿ ãããã®åæ¢åå ã¯æ¬¡runã§èªç¶ã«æ¶ãããããèªåãã
- ä¿®æ£ã¯2è¡ã§æžãåŠæ¹ç®ã ã£ããèœãšããè¡ãå°åž³ã«
ok:false, reasonã§èšé²ããŠexhaustedåããå€±ææŽã®ããçžæã¯attemptsæé ã§ãã¥ãŒæ«å°Ÿãž - ç£èŠã¯
launchctl listã®ããŒãç¶æ ãexit 0ã ãã§ã¯äžååãexit codeã®ååžïŒåªäœåŽã®å®ä»¶æ°ãŸã§èŠãŠåããŠãåããŠããããšèšãã
LilyïŒ@bokuwalilyïŒâ å人éçºè ãClaude Code ã§èªåååºç€ãçµã¿ãªãããiOSã¢ããªãWebãµãŒãã¹ãéç£ããŠããŸã
- AIã§ãå¯ãŠãŠãåãä»çµã¿ããäœã£ãŠæ120äžã«ãã話㯠noteã®ææèšäº ã«ð°
- OSS: github.com/bokuwalily ð
- ææ°æ å ±ã»ãåãåãã㯠X @bokuwalily ãžð
- AIå°å ¥ã»èªååã®çžè«ãšå®è£ ãã³ãã¬7æ¬ã®é åžã¯ å ¬åŒLINE ããð¬
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ