Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
a618779
Implement open source project intake system
michaeloboyle Mar 5, 2026
bfb19ca
fix(security): SEC-003 add access control to voting and scoring workf…
michaeloboyle Mar 17, 2026
09ecfa3
fix(security): SEC-001/002 replace core.exportVariable with core.setO…
michaeloboyle Mar 17, 2026
8092372
fix(security): SEC-007/009 add input sanitization and schema validation
michaeloboyle Mar 17, 2026
10feafa
fix(security): SEC-006 pin actions to SHA hashes, add dependabot
michaeloboyle Mar 17, 2026
02f3b3e
fix(security): SEC-008 add concurrency groups and rate limiting
michaeloboyle Mar 17, 2026
1f0d8bf
fix(security): SEC-010/011 strict majority tie-breaking, add no-retra…
michaeloboyle Mar 17, 2026
a5e2101
fix(security): SEC-012/013/014 filter bots, exclude submitter, fix re…
michaeloboyle Mar 17, 2026
db0d56a
feat: governance agent RFC with BDD features, specs, and RVF seed data
michaeloboyle Apr 18, 2026
942f127
feat: add test harness, state machine engine, RVF lib, and simulation…
michaeloboyle Apr 18, 2026
323c756
Attestation: case brief for issue #1
github-actions[bot] Apr 18, 2026
4411922
Attestation: case brief for issue #2
github-actions[bot] Apr 18, 2026
b8f0105
fix: add retry logic for concurrent attestation commits
michaeloboyle Apr 18, 2026
1c30603
Merge branch 'feature/governance-agent'
michaeloboyle Apr 18, 2026
072886f
Attestation: command processed on issue #2
github-actions[bot] Apr 18, 2026
0a4a2b6
Attestation: command processed on issue #1
github-actions[bot] Apr 18, 2026
be8f3af
Attestation: command processed on issue #3
github-actions[bot] Apr 18, 2026
bdf4f4c
Attestation: command processed on issue #1
github-actions[bot] Apr 18, 2026
07bc071
fix: reduce rate limit window from 60s to 10s for command responses
michaeloboyle Apr 18, 2026
3d7270c
Merge branch 'feature/governance-agent'
michaeloboyle Apr 18, 2026
09cbb83
Attestation: command processed on issue #4
github-actions[bot] Apr 18, 2026
ce1fd50
Attestation: command processed on issue #4
github-actions[bot] Apr 18, 2026
30de7ae
docs: add simulation test report from fork testing
michaeloboyle Apr 18, 2026
9a3eb10
docs: add simulation test report from fork testing
michaeloboyle Apr 18, 2026
07d56ce
Merge branch 'feature/governance-agent'
michaeloboyle Apr 18, 2026
988e079
fix: update graph integrity test to handle dynamic recusal edges
michaeloboyle Apr 18, 2026
d5b717c
Merge branch 'feature/governance-agent'
michaeloboyle Apr 18, 2026
f970309
Add GOVERNANCE_TEST_MODE bypass for SEC-012 on fork testing
michaeloboyle Apr 18, 2026
f27d95f
Merge branch 'feature/governance-agent'
michaeloboyle Apr 18, 2026
aa6cacd
Attestation: case brief for issue #5
github-actions[bot] Apr 18, 2026
90489f0
Attestation: case brief for issue #6
github-actions[bot] Apr 18, 2026
80a7bea
Attestation: case brief for issue #7
github-actions[bot] Apr 18, 2026
606c381
Attestation: case brief for issue #8
github-actions[bot] Apr 18, 2026
eb489a2
Attestation: command processed on issue #5
github-actions[bot] Apr 18, 2026
5e6b0c6
Attestation: command processed on issue #6
github-actions[bot] Apr 18, 2026
ca4275c
Attestation: command processed on issue #7
github-actions[bot] Apr 18, 2026
c6e47c7
Attestation: command processed on issue #8
github-actions[bot] Apr 18, 2026
f1081fc
Fix test mode to count each comment as separate voter
michaeloboyle Apr 18, 2026
cf70c56
Attestation: command processed on issue #5
github-actions[bot] Apr 18, 2026
ccc73c4
Attestation: command processed on issue #5
github-actions[bot] Apr 18, 2026
b38db10
Attestation: command processed on issue #6
github-actions[bot] Apr 18, 2026
d38d46a
Attestation: command processed on issue #7
github-actions[bot] Apr 18, 2026
7f353fa
Attestation: command processed on issue #6
github-actions[bot] Apr 18, 2026
4b24909
Attestation: command processed on issue #7
github-actions[bot] Apr 18, 2026
2420fdd
Attestation: command processed on issue #8
github-actions[bot] Apr 18, 2026
29d3300
Attestation: command processed on issue #8
github-actions[bot] Apr 18, 2026
3c6ddad
Attestation: command processed on issue #6
github-actions[bot] Apr 18, 2026
cb5b786
Attestation: command processed on issue #6
github-actions[bot] Apr 18, 2026
5b14945
Attestation: command processed on issue #7
github-actions[bot] Apr 18, 2026
f4813c1
Attestation: command processed on issue #7
github-actions[bot] Apr 18, 2026
dda4ebe
Attestation: command processed on issue #8
github-actions[bot] Apr 18, 2026
b4fe3a2
Attestation: command processed on issue #8
github-actions[bot] Apr 18, 2026
6f30e42
Attestation: command processed on issue #5
github-actions[bot] Apr 18, 2026
5ff61d0
Update simulation report with full lifecycle results (Batch 2)
michaeloboyle Apr 18, 2026
c27ccf1
Prepare adversarial governance simulation (Batch 3-5)
michaeloboyle Apr 18, 2026
fe2d8dc
Attestation: command processed on issue #9
github-actions[bot] Apr 18, 2026
3e322ca
Attestation: command processed on issue #9
github-actions[bot] Apr 18, 2026
7d646b1
Attestation: command processed on issue #9
github-actions[bot] Apr 18, 2026
db071c7
Attestation: command processed on issue #10
github-actions[bot] Apr 18, 2026
13d3257
Attestation: command processed on issue #10
github-actions[bot] Apr 18, 2026
d0a8ce7
Attestation: command processed on issue #10
github-actions[bot] Apr 18, 2026
5c040bd
Attestation: command processed on issue #10
github-actions[bot] Apr 18, 2026
9d57970
Attestation: command processed on issue #10
github-actions[bot] Apr 18, 2026
b8964da
Attestation: command processed on issue #11
github-actions[bot] Apr 18, 2026
495d363
Attestation: command processed on issue #11
github-actions[bot] Apr 18, 2026
e08a0be
Attestation: command processed on issue #11
github-actions[bot] Apr 18, 2026
1477a1e
Attestation: command processed on issue #11
github-actions[bot] Apr 18, 2026
6699913
Attestation: command processed on issue #11
github-actions[bot] Apr 18, 2026
a8efdef
Attestation: command processed on issue #11
github-actions[bot] Apr 18, 2026
9c3f7f3
Attestation: command processed on issue #12
github-actions[bot] Apr 18, 2026
3accce1
Attestation: command processed on issue #12
github-actions[bot] Apr 18, 2026
9d779a9
Attestation: command processed on issue #12
github-actions[bot] Apr 18, 2026
0790f23
Attestation: command processed on issue #12
github-actions[bot] Apr 18, 2026
7145067
Attestation: command processed on issue #12
github-actions[bot] Apr 18, 2026
17af932
Attestation: command processed on issue #13
github-actions[bot] Apr 18, 2026
305185a
Attestation: command processed on issue #13
github-actions[bot] Apr 18, 2026
5730741
Attestation: command processed on issue #13
github-actions[bot] Apr 18, 2026
6c675f8
Merge pull request #14 from michaeloboyle/feature/adversarial-governa…
michaeloboyle Apr 18, 2026
43ae59d
Attestation: command processed on issue #15
github-actions[bot] Apr 18, 2026
0212700
Attestation: command processed on issue #15
github-actions[bot] Apr 18, 2026
93fc550
Attestation: command processed on issue #15
github-actions[bot] Apr 18, 2026
e6b8e7d
Attestation: command processed on issue #15
github-actions[bot] Apr 18, 2026
f3899d6
Attestation: command processed on issue #16
github-actions[bot] Apr 18, 2026
0860642
Attestation: command processed on issue #16
github-actions[bot] Apr 18, 2026
377a22e
Attestation: command processed on issue #16
github-actions[bot] Apr 18, 2026
8c8a357
Attestation: case brief for issue #17
github-actions[bot] Apr 18, 2026
8d67d4d
Attestation: command processed on issue #17
github-actions[bot] Apr 18, 2026
d9aa353
Attestation: command processed on issue #17
github-actions[bot] Apr 18, 2026
abf5526
Attestation: command processed on issue #17
github-actions[bot] Apr 18, 2026
6e38e22
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
fb6125a
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
cc7bb9b
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
4a60ea2
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
0baa672
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
d14f17b
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
c9f6e97
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
41eb636
Attestation: command processed on issue #18
github-actions[bot] Apr 18, 2026
a04ebd2
Attestation: command processed on issue #19
github-actions[bot] Apr 18, 2026
9092772
Attestation: command processed on issue #19
github-actions[bot] Apr 18, 2026
58c214a
Attestation: command processed on issue #19
github-actions[bot] Apr 18, 2026
c66bf02
Attestation: command processed on issue #19
github-actions[bot] Apr 18, 2026
b3de043
Attestation: command processed on issue #19
github-actions[bot] Apr 18, 2026
e310213
Attestation: command processed on issue #19
github-actions[bot] Apr 18, 2026
b8547a0
Attestation: command processed on issue #19
github-actions[bot] Apr 18, 2026
21d459b
Attestation: case brief for issue #21
github-actions[bot] Apr 18, 2026
55e55b1
Attestation: case brief for issue #22
github-actions[bot] Apr 18, 2026
263000a
Record Batch 3-5 simulation results: 12/12 scenarios pass
michaeloboyle Apr 18, 2026
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
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Agentics Foundation Website
url: https://agentics.org
about: Learn more about the Agentics Foundation and membership
94 changes: 94 additions & 0 deletions .github/ISSUE_TEMPLATE/project-submission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Open Source Project Submission
description: Submit an open source project for review by the Agentics Foundation Open Source Committee
title: "[Project Submission] "
labels: ["status:pending-review"]
body:
- type: markdown
attributes:
value: |
## Agentics Foundation — Open Source Project Submission

Only registered members of the Agentics Foundation may submit projects.
Submissions from non-members will not be reviewed.

Please complete all required fields below.

- type: input
id: full-name
attributes:
label: Full Name
placeholder: Jane Doe
validations:
required: true

- type: input
id: email
attributes:
label: Email Address
placeholder: jane@example.com
validations:
required: true

- type: input
id: linkedin
attributes:
label: LinkedIn Profile URL
placeholder: https://linkedin.com/in/janedoe
validations:
required: true

- type: input
id: github-profile
attributes:
label: GitHub Profile URL
placeholder: https://github.com/janedoe
validations:
required: true

- type: input
id: repo-url
attributes:
label: Repository URL
description: Must be a public repository with a declared license.
placeholder: https://github.com/janedoe/my-project
validations:
required: true

- type: dropdown
id: category
attributes:
label: Submission Category
options:
- Project Donation
- Website Listing
- Co-Founder Search
- Problem Support
- Contributor Engagement
validations:
required: true

- type: textarea
id: description
attributes:
label: Project Description & Request
description: Describe the project and your specific request (max 500 characters).
placeholder: |
Brief description of what the project does and what you're asking the Foundation to help with.
validations:
required: true

- type: checkboxes
id: acknowledgments
attributes:
label: Acknowledgments
options:
- label: I am a registered member of the Agentics Foundation in good standing
required: true
- label: The repository is public and has a clearly stated open source license
required: true
- label: The project is aligned with the Foundation's mission, values, and code of conduct
required: true
- label: There are no known IP infringements associated with this project
required: true
- label: I understand that submission does not guarantee approval
required: true
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
156 changes: 156 additions & 0 deletions .github/workflows/approve-project.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
name: Approve Project

on:
issues:
types: [labeled]

permissions:
contents: write
issues: write

jobs:
register-project:
runs-on: ubuntu-latest
if: github.event.label.name == 'status:approved'
concurrency:
group: registry-update
cancel-in-progress: false
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- name: Extract project data and update registry
id: extract
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
with:
script: |
const fs = require('fs');
const body = context.payload.issue.body || '';
const issueNumber = context.payload.issue.number;

// SEC-007: Sanitize user input before embedding in registry
function sanitize(input, maxLen = 500) {
return input
.replace(/[[\](){}|`*_~#>!\\]/g, '')
.substring(0, maxLen)
.trim();
}

// Parse fields from issue form
function extract(label) {
const re = new RegExp(`### ${label}\\s*\\n\\s*(.+)`, 'i');
const m = body.match(re);
return m ? m[1].trim() : '';
}

const name = extract('Full Name');
const repoUrl = extract('Repository URL');
const description = body.match(/### Project Description & Request\s*\n\s*([\s\S]*?)(?=\n###|\n---|\Z)/i);
const descText = description ? description[1].trim().split('\n')[0] : '';

// SEC-007: Validate repo URL format
const repoUrlPattern = /^https:\/\/github\.com\/[\w.-]+\/[\w.-]+\/?$/;
if (repoUrl && !repoUrlPattern.test(repoUrl)) {
core.warning(`Invalid repo URL format: ${repoUrl}`);
}

// Extract category
const categoryMap = {
'Project Donation': 'donation',
'Website Listing': 'website-listing',
'Co-Founder Search': 'cofounder',
'Problem Support': 'support',
'Contributor Engagement': 'contributors'
};
let category = 'unknown';
for (const [text, slug] of Object.entries(categoryMap)) {
if (body.includes(text)) { category = slug; break; }
}

// Calculate total score from score comments
const comments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber
});

let totalScore = 0;
let scoreCount = 0;
for (const c of comments) {
const match = c.body.match(/\*\*Total\*\*\s*\|\s*\*\*(\d+)\/25\*\*/);
if (match) {
totalScore += parseInt(match[1]);
scoreCount++;
}
}
const avgScore = scoreCount > 0 ? Math.round(totalScore / scoreCount) : 0;

// SEC-009: Validate registry schema
const registryPath = 'data/approved-projects.json';
let registry;
try {
registry = JSON.parse(fs.readFileSync(registryPath, 'utf8'));
if (!Array.isArray(registry)) {
throw new Error('Registry must be an array');
}
} catch (e) {
core.setFailed(`Registry validation failed: ${e.message}`);
return;
}

// Generate ID from issue number (avoids race condition with registry.length)
const id = `proj-${String(issueNumber).padStart(3, '0')}`;

// Add entry
registry.push({
id,
name: sanitize(descText, 80) || `Submission #${issueNumber}`,
repo_url: repoUrl,
category,
approved_date: new Date().toISOString().split('T')[0],
submitter: context.payload.issue.user.login,
description: sanitize(descText, 500),
total_score: avgScore,
issue_number: issueNumber,
status: 'active'
});

fs.writeFileSync(registryPath, JSON.stringify(registry, null, 2) + '\n');

// Set output for commit step
core.setOutput('project_id', id);
core.setOutput('issue_number', String(issueNumber));

- name: Commit and push
env:
PROJECT_ID: ${{ steps.extract.outputs.project_id }}
ISSUE_NUMBER: ${{ steps.extract.outputs.issue_number }}
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add data/approved-projects.json
git commit -m "Add approved project ${PROJECT_ID} from issue #${ISSUE_NUMBER}" || exit 0
git pull --rebase origin main
git push

- name: Post confirmation
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
env:
PROJECT_ID: ${{ steps.extract.outputs.project_id }}
with:
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: [
'### Project Registered',
'',
`This project has been added to the [approved projects registry](../blob/main/data/approved-projects.json) as \`${process.env.PROJECT_ID}\`.`,
'',
'The submitter will be contacted with next steps.',
'',
'---',
'*Automated registration.*'
].join('\n')
});
Loading