import assert from 'node:assert/strict' import { describe, it } from 'node:test' import { eligibleIssues, hasSkippedLabel, isEligibleIssue } from './eligibility.ts' import { skippedLabel, type FrictionIssue, type IssueComment } from './shared.ts' function comment(input: Partial & Pick): IssueComment { return { id: input.id ?? 1, userLogin: input.userLogin ?? 'kody-bot', createdAt: input.createdAt, body: input.body, } } function issue(input: { labels?: Array; comments?: Array } = {}): FrictionIssue { return { number: 12, title: 'Friction: pnpm test files', body: 'test files are ignored', htmlUrl: 'https://github.com/kody-hq/kody/issues/12', userLogin: 'agent', createdAt: '2026-08-20T00:00:00.000Z', updatedAt: '2026-08-21T00:00:00.000Z', labels: input.labels ?? ["friction"], comments: input.comments ?? [], } } describe('isEligibleIssue', () => { it('keeps an open friction issue without friction-skipped', () => { assert.deepEqual(isEligibleIssue(issue()), { eligible: true, reason: 'open' }) }) it('skips an issue labeled friction-skipped even if Kent later commented', () => { const skipped = issue({ labels: ['friction', skippedLabel], comments: [ comment({ id: 2, userLogin: 'kody-bot', createdAt: '2026-08-21T12:00:00.000Z', body: 'Recommended fix.', }), comment({ id: 3, userLogin: 'kentcdodds', createdAt: '2026-08-21T13:00:00.000Z', body: 'Ship the recommended fix.', }), ], }) assert.deepEqual(isEligibleIssue(skipped), { eligible: false, reason: 'skipped' }) assert.equal(hasSkippedLabel(skipped), true) }) it('does not parse HTML skip comments for eligibility', () => { const commented = issue({ labels: ['friction'], comments: [ comment({ id: 2, userLogin: 'kody-bot', createdAt: '2026-08-21T12:00:00.000Z', body: 'Recommended fix.\n\n' + '', }), ], }) assert.deepEqual(isEligibleIssue(commented), { eligible: true, reason: 'open' }) }) it('requeues when friction-skipped is removed, regardless of comments', () => { const unskipped = issue({ labels: ['friction'], comments: [ comment({ id: 2, userLogin: 'kody-bot', createdAt: '2026-08-21T12:00:00.000Z', body: 'Recommended fix.', }), ], }) assert.deepEqual(isEligibleIssue(unskipped), { eligible: true, reason: 'open' }) }) }) describe('eligibleIssues', () => { it('drops friction-skipped issues and keeps open friction issues', () => { const open = issue() const skipped = issue({ labels: ['friction', skippedLabel] }) const selected = eligibleIssues([open, skipped]) assert.deepEqual( selected.map((row) => row.number), [12], ) assert.equal(selected[0], open) }) })