Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions bounty-notes/issue-12-functionality-smoke.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Functionality smoke fixture for issue #12

Fixes #12.

Issue #12 is a CodeBounty test-functionality issue. This contribution adds a small deterministic fixture plus a dependency-free validator so the issue can be verified locally without relying on a live platform instance.

## Coverage

- Repository: `CodeBountyOrg/BountyTestRepository`
- Issue: `#12`
- Intent: functionality smoke test
- Visible bounty amount: `$100 USD`
- Required PR syntax: `fixes #12`
- Required checks: issue linkage, bounty amount, local validation

## Validation commands

```bash
node --check scripts/validate-codebounty-issue-12-functionality.mjs
node scripts/validate-codebounty-issue-12-functionality.mjs test-fixtures/codebounty-issue-12-functionality.json
python3 - <<'PY'
import json
from pathlib import Path
fixture = json.loads(Path('test-fixtures/codebounty-issue-12-functionality.json').read_text())
note = Path('bounty-notes/issue-12-functionality-smoke.md').read_text()
assert fixture['issue']['number'] == 12
assert fixture['bounty']['amount_usd'] == 100
assert fixture['pr']['required_syntax'] == 'fixes #12'
assert 'fixes #12' in note.lower()
PY
git diff --check
```

## Payout note

This is submitted-visible only until CodeBounty application eligibility and maintainer/platform acceptance are verified.
48 changes: 48 additions & 0 deletions scripts/validate-codebounty-issue-12-functionality.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env node
import { readFileSync } from 'node:fs';

const fail = (message) => {
throw new Error(message);
};

const payloadPath = process.argv[2] ?? 'test-fixtures/codebounty-issue-12-functionality.json';
const payload = JSON.parse(readFileSync(payloadPath, 'utf8'));

if (payload.repository?.full_name !== 'CodeBountyOrg/BountyTestRepository') {
fail('repository.full_name mismatch');
}
if (payload.issue?.number !== 12) {
fail('issue.number must be 12');
}
if (payload.issue?.intent !== 'functionality_smoke_test') {
fail('issue intent must be functionality_smoke_test');
}
if (payload.bounty?.amount_usd !== 100) {
fail('bounty amount must match the announced $100');
}
if (!Array.isArray(payload.checks) || payload.checks.length < 3) {
fail('fixture must define at least three functionality checks');
}

const requiredChecks = new Set(['issue_linkage', 'bounty_amount', 'local_validation']);
for (const check of payload.checks) {
if (check.required === true) {
requiredChecks.delete(check.id);
}
}
if (requiredChecks.size > 0) {
fail(`missing required checks: ${[...requiredChecks].join(', ')}`);
}

const normalized = {
issue: payload.issue.number,
amount_usd: payload.bounty.amount_usd,
required_checks: payload.checks.filter((check) => check.required).map((check) => check.id),
pr_syntax: payload.pr.required_syntax,
};

if (normalized.pr_syntax !== 'fixes #12') {
fail('PR syntax must be fixes #12');
}

console.log(JSON.stringify(normalized, null, 2));
35 changes: 35 additions & 0 deletions test-fixtures/codebounty-issue-12-functionality.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"repository": {
"full_name": "CodeBountyOrg/BountyTestRepository"
},
"issue": {
"number": 12,
"title": "this is a test issue 21325",
"intent": "functionality_smoke_test"
},
"bounty": {
"amount_usd": 100,
"currency": "USD",
"provider": "CodeBounty"
},
"pr": {
"required_syntax": "fixes #12"
},
"checks": [
{
"id": "issue_linkage",
"required": true,
"description": "The contribution must explicitly link back to issue #12."
},
{
"id": "bounty_amount",
"required": true,
"description": "The fixture must preserve the visible $100 bounty amount."
},
{
"id": "local_validation",
"required": true,
"description": "The fixture must be validated by a dependency-free local script."
}
]
}