hummbl-bibliography 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cascade/rules/hummbl-base120.md +107 -0
- package/.github/CODEOWNERS +17 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +24 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +10 -0
- package/.github/ISSUE_TEMPLATE/new-entry.md +79 -0
- package/.github/ISSUE_TEMPLATE/quality-improvement.md +71 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +15 -0
- package/.github/dependabot.yml +17 -0
- package/.github/workflows/ci.yml +98 -0
- package/.github/workflows/doi-enrichment.yml +77 -0
- package/.github/workflows/security-audit.yml +92 -0
- package/.github/workflows/stats-report.yml +59 -0
- package/.github/workflows/validate-models.yml +194 -0
- package/.github/workflows/validate.yml +152 -0
- package/.husky/pre-commit +15 -0
- package/.husky/validation-rules.json +11 -0
- package/CHANGELOG.md +228 -0
- package/CONTRIBUTING.md +110 -0
- package/CONTRIBUTORS.md +257 -0
- package/DEVELOPMENT.md +110 -0
- package/Day_1_Audit_Worksheet.md +64 -0
- package/LICENSE +21 -0
- package/README.md +213 -0
- package/SECURITY.md +16 -0
- package/SITREP.md +141 -0
- package/bibliography/T10_collaboration.bib +281 -0
- package/bibliography/T11_security.bib +311 -0
- package/bibliography/T12_complexity.bib +272 -0
- package/bibliography/T13_reasoning.bib +231 -0
- package/bibliography/T1_canonical.bib +236 -0
- package/bibliography/T2_empirical.bib +258 -0
- package/bibliography/T3_applied.bib +219 -0
- package/bibliography/T4_agentic.bib +281 -0
- package/bibliography/T5_engineering.bib +243 -0
- package/bibliography/T6_governance.bib +277 -0
- package/bibliography/T7_emerging.bib +228 -0
- package/bibliography/T8_cognition.bib +260 -0
- package/bibliography/T9_economics.bib +275 -0
- package/bibliography/hummbl-transformations.json +84 -0
- package/dist/unified-bibliography.json +5699 -0
- package/docs/CONTRIBUTING.md +240 -0
- package/docs/GAP_ANALYSIS.md +142 -0
- package/docs/MULTI_AGENT_COORDINATION_PROTOCOL.md +700 -0
- package/docs/QUALITY_AUDIT_REPORT.md +576 -0
- package/docs/QUALITY_STANDARDS.md +350 -0
- package/docs/TRANSFORMATION_GUIDE.md +337 -0
- package/docs/metrics/model-accuracy.md +150 -0
- package/governance/CAES_CANONICAL.sha256 +1 -0
- package/governance/CAES_SPEC.md +107 -0
- package/governance/CAES_VERSION +1 -0
- package/governance/lexicon/ALLOWLIST_POLICY.md +63 -0
- package/governance/lexicon/CANONICALIZATION.md +63 -0
- package/governance/lexicon/acronym.schema.json +153 -0
- package/governance/lexicon/acronym_allowlist.txt +237 -0
- package/governance/lexicon/acronyms.v0.2.json +2555 -0
- package/llms.txt +1105 -0
- package/mappings/arcana_citations.json +219 -0
- package/mappings/bki_evidence.json +384 -0
- package/package.json +25 -0
- package/reports/.gitkeep +0 -0
- package/reports/citation_graph.json +119335 -0
- package/scripts/add_nist_tags.py +437 -0
- package/scripts/annotate_dois.py +204 -0
- package/scripts/check_palace_aliases.py +200 -0
- package/scripts/ingest_to_open_brain.py +307 -0
- package/scripts/monthly-review.sh +166 -0
- package/scripts/setup-hooks.sh +107 -0
- package/scripts/test_check_palace_aliases.py +194 -0
- package/sources/bki.bib +57 -0
- package/sources/theoretical-foundations.bib +589 -0
- package/toolkit/README.md +360 -0
- package/toolkit/docs/generated/quick-reference.md +179 -0
- package/toolkit/package-lock.json +1140 -0
- package/toolkit/package.json +66 -0
- package/toolkit/scripts/check-memory-palace-aliases.js +230 -0
- package/toolkit/scripts/check-memory-palace-aliases.test.js +297 -0
- package/toolkit/scripts/generate-docs.js +223 -0
- package/toolkit/src/check-duplicates.js +225 -0
- package/toolkit/src/check-required-fields.js +138 -0
- package/toolkit/src/citation-graph.js +425 -0
- package/toolkit/src/extensions/beyondBase120Audit.ts +250 -0
- package/toolkit/src/extensions/memoryPalace.ts +438 -0
- package/toolkit/src/extract-keywords.js +190 -0
- package/toolkit/src/find-missing-dois.js +178 -0
- package/toolkit/src/fix-duplicates.js +140 -0
- package/toolkit/src/merge-entries.js +29 -0
- package/toolkit/src/query.js +281 -0
- package/toolkit/src/stats.js +244 -0
- package/toolkit/src/test-validation.js +117 -0
- package/toolkit/src/utils/modelRegistry.ts +193 -0
- package/toolkit/src/utils/monitorModels.ts +150 -0
- package/toolkit/src/utils/validateModelCode.ts +196 -0
- package/toolkit/src/validate.js +251 -0
- package/toolkit/src/watch.js +100 -0
- package/toolkit/tsconfig.json +25 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
name: Validate Mental Model References
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, develop ]
|
|
6
|
+
paths:
|
|
7
|
+
- '**/*.md'
|
|
8
|
+
- '**/*.ts'
|
|
9
|
+
- '**/*.tsx'
|
|
10
|
+
- '**/*.js'
|
|
11
|
+
- '**/*.jsx'
|
|
12
|
+
pull_request:
|
|
13
|
+
branches: [ main, develop ]
|
|
14
|
+
paths:
|
|
15
|
+
- '**/*.md'
|
|
16
|
+
- '**/*.ts'
|
|
17
|
+
- '**/*.tsx'
|
|
18
|
+
- '**/*.js'
|
|
19
|
+
- '**/*.jsx'
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
validate-models:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout code
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
|
|
29
|
+
- name: Setup Node.js
|
|
30
|
+
uses: actions/setup-node@v4
|
|
31
|
+
with:
|
|
32
|
+
node-version: '24'
|
|
33
|
+
cache: 'npm'
|
|
34
|
+
|
|
35
|
+
- name: Install dependencies
|
|
36
|
+
run: |
|
|
37
|
+
cd toolkit
|
|
38
|
+
npm ci
|
|
39
|
+
|
|
40
|
+
- name: Type check validation functions
|
|
41
|
+
run: |
|
|
42
|
+
cd toolkit
|
|
43
|
+
npm run type-check
|
|
44
|
+
|
|
45
|
+
- name: Build toolkit
|
|
46
|
+
run: |
|
|
47
|
+
cd toolkit
|
|
48
|
+
npm run build
|
|
49
|
+
|
|
50
|
+
- name: Run model validation script
|
|
51
|
+
run: |
|
|
52
|
+
cd toolkit
|
|
53
|
+
node --input-type=module << 'EOF'
|
|
54
|
+
import { auditText } from './dist/utils/monitorModels.js';
|
|
55
|
+
import { readFileSync, readdirSync, statSync } from 'fs';
|
|
56
|
+
import { join, extname } from 'path';
|
|
57
|
+
|
|
58
|
+
// Find all relevant files.
|
|
59
|
+
// Excluded: toolkit/src and toolkit/dist — those are the validator
|
|
60
|
+
// source files themselves and would cause self-referential false
|
|
61
|
+
// positives (test cases for invalid codes, hallucination term lists).
|
|
62
|
+
const EXCLUDED_DIRS = new Set(['node_modules', 'dist', 'src']);
|
|
63
|
+
const files = [];
|
|
64
|
+
const walk = (dir) => {
|
|
65
|
+
const items = readdirSync(dir);
|
|
66
|
+
items.forEach(item => {
|
|
67
|
+
const fullPath = join(dir, item);
|
|
68
|
+
const stat = statSync(fullPath);
|
|
69
|
+
if (stat.isDirectory() && !item.startsWith('.') && !EXCLUDED_DIRS.has(item)) {
|
|
70
|
+
walk(fullPath);
|
|
71
|
+
} else if (stat.isFile() && ['.md', '.ts', '.tsx', '.js', '.jsx'].includes(extname(item))) {
|
|
72
|
+
files.push(fullPath);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Walk from repo root (one level up from toolkit/) so content
|
|
78
|
+
// files in bibliography/, docs/, mappings/, governance/ are scanned
|
|
79
|
+
walk('..');
|
|
80
|
+
|
|
81
|
+
let totalValid = 0;
|
|
82
|
+
let totalInvalid = 0;
|
|
83
|
+
let totalHallucinations = 0;
|
|
84
|
+
const errors = [];
|
|
85
|
+
|
|
86
|
+
files.forEach(file => {
|
|
87
|
+
try {
|
|
88
|
+
const content = readFileSync(file, 'utf8');
|
|
89
|
+
const audit = auditText(content);
|
|
90
|
+
|
|
91
|
+
totalValid += audit.references.filter(r => r.isValid).length;
|
|
92
|
+
totalInvalid += audit.references.filter(r => !r.isValid).length;
|
|
93
|
+
totalHallucinations += audit.hallucinations.length;
|
|
94
|
+
|
|
95
|
+
if (audit.validationErrors.length > 0 || audit.hallucinations.length > 0) {
|
|
96
|
+
errors.push({
|
|
97
|
+
file,
|
|
98
|
+
errors: audit.validationErrors,
|
|
99
|
+
hallucinations: audit.hallucinations
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
} catch (err) {
|
|
103
|
+
console.warn(`Warning: Could not read ${file}: ${err.message}`);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
console.log(`Model Validation Results:`);
|
|
108
|
+
console.log(`Valid references: ${totalValid}`);
|
|
109
|
+
console.log(`Invalid references: ${totalInvalid}`);
|
|
110
|
+
console.log(`Hallucinations: ${totalHallucinations}`);
|
|
111
|
+
|
|
112
|
+
if (errors.length > 0) {
|
|
113
|
+
console.log(`\nErrors found:`);
|
|
114
|
+
errors.forEach(error => {
|
|
115
|
+
console.log(`File: ${error.file}`);
|
|
116
|
+
error.errors.forEach(err => console.log(` - ${err}`));
|
|
117
|
+
error.hallucinations.forEach(hall => console.log(` - Hallucination: ${hall}`));
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
if (totalInvalid > 0 || totalHallucinations > 0) {
|
|
121
|
+
console.log(`\n❌ Validation failed: Invalid references or hallucinations detected`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
console.log(`\n✅ Validation passed: No invalid references or hallucinations found`);
|
|
126
|
+
}
|
|
127
|
+
EOF
|
|
128
|
+
|
|
129
|
+
- name: Beyond-Base120 Memory Palace audit
|
|
130
|
+
run: |
|
|
131
|
+
cd toolkit
|
|
132
|
+
node --input-type=module << 'EOF'
|
|
133
|
+
import { readFileSync, readdirSync, statSync } from 'fs';
|
|
134
|
+
import { join, extname } from 'path';
|
|
135
|
+
import { auditBeyondBase120, formatBeyondReport } from './dist/extensions/beyondBase120Audit.js';
|
|
136
|
+
import { auditRegistry } from './dist/extensions/memoryPalace.js';
|
|
137
|
+
|
|
138
|
+
// Same exclusion logic as Base120 validation step
|
|
139
|
+
const EXCLUDED_DIRS = new Set(['node_modules', 'dist', 'src']);
|
|
140
|
+
const files = [];
|
|
141
|
+
const walk = (dir) => {
|
|
142
|
+
const items = readdirSync(dir);
|
|
143
|
+
items.forEach(item => {
|
|
144
|
+
const fullPath = join(dir, item);
|
|
145
|
+
const stat = statSync(fullPath);
|
|
146
|
+
if (stat.isDirectory() && !item.startsWith('.') && !EXCLUDED_DIRS.has(item)) {
|
|
147
|
+
walk(fullPath);
|
|
148
|
+
} else if (stat.isFile() && ['.md', '.ts', '.tsx', '.js', '.jsx'].includes(extname(item))) {
|
|
149
|
+
files.push(fullPath);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
walk('..');
|
|
154
|
+
|
|
155
|
+
// Registry health check first — fail fast on duplicate/broken registry
|
|
156
|
+
const registryHealth = auditRegistry();
|
|
157
|
+
if (registryHealth.duplicateSlugs.length > 0 || registryHealth.duplicateNames.length > 0 || registryHealth.missingFields.length > 0) {
|
|
158
|
+
console.log('❌ Memory Palace registry is unhealthy:');
|
|
159
|
+
registryHealth.duplicateSlugs.forEach(s => console.log(` Duplicate slug: ${s}`));
|
|
160
|
+
registryHealth.duplicateNames.forEach(n => console.log(` Duplicate name: ${n}`));
|
|
161
|
+
registryHealth.missingFields.forEach(({ slug, fields }) => console.log(` Missing fields in ${slug}: ${fields.join(', ')}`));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
console.log(`✅ Memory Palace registry healthy — ${registryHealth.totalEntries} entries`);
|
|
165
|
+
|
|
166
|
+
// Aggregate content for audit (concatenate all files)
|
|
167
|
+
let combinedContent = '';
|
|
168
|
+
files.forEach(file => {
|
|
169
|
+
try {
|
|
170
|
+
combinedContent += readFileSync(file, 'utf8') + '\n';
|
|
171
|
+
} catch (err) {
|
|
172
|
+
console.warn(`Warning: Could not read ${file}: ${err.message}`);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
const report = auditBeyondBase120(combinedContent);
|
|
177
|
+
console.log(formatBeyondReport(report));
|
|
178
|
+
|
|
179
|
+
// Only ERROR findings fail CI (WARN is advisory)
|
|
180
|
+
const errors = report.findings.filter(f => f.severity === 'ERROR');
|
|
181
|
+
if (errors.length > 0) {
|
|
182
|
+
console.log(`\n❌ Beyond-Base120 audit failed: ${errors.length} error(s)`);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
} else {
|
|
185
|
+
console.log(`\n✅ Beyond-Base120 audit passed`);
|
|
186
|
+
}
|
|
187
|
+
EOF
|
|
188
|
+
|
|
189
|
+
- name: Update metrics dashboard
|
|
190
|
+
if: github.ref == 'refs/heads/main'
|
|
191
|
+
run: |
|
|
192
|
+
# This would update the metrics dashboard with CI results
|
|
193
|
+
# For now, just log that we'd update it
|
|
194
|
+
echo "Would update docs/metrics/model-accuracy.md with CI results"
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
name: Validate Bibliography
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main, develop ]
|
|
8
|
+
paths:
|
|
9
|
+
- 'bibliography/**/*.bib'
|
|
10
|
+
- 'toolkit/**/*.js'
|
|
11
|
+
- '.github/workflows/validate.yml'
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
validate:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
# Add permissions to allow writing comments on PRs
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
pull-requests: write
|
|
21
|
+
issues: write
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout code
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Setup Node.js
|
|
28
|
+
uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: '24'
|
|
31
|
+
cache: 'npm'
|
|
32
|
+
cache-dependency-path: toolkit/package-lock.json
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: |
|
|
36
|
+
cd toolkit
|
|
37
|
+
npm ci
|
|
38
|
+
|
|
39
|
+
- name: Run validation
|
|
40
|
+
id: validate
|
|
41
|
+
run: |
|
|
42
|
+
cd toolkit
|
|
43
|
+
npm run validate:ci
|
|
44
|
+
|
|
45
|
+
- name: Check for duplicates
|
|
46
|
+
run: |
|
|
47
|
+
cd toolkit
|
|
48
|
+
npm run check-dups
|
|
49
|
+
|
|
50
|
+
- name: Install jq
|
|
51
|
+
run: sudo apt-get update && sudo apt-get install -y jq
|
|
52
|
+
|
|
53
|
+
- name: Generate statistics
|
|
54
|
+
id: stats
|
|
55
|
+
run: |
|
|
56
|
+
cd toolkit
|
|
57
|
+
# Ensure clean JSON output by redirecting stderr to /dev/null
|
|
58
|
+
node src/stats.js ../bibliography --json 2>error.log > ../stats-output.json || {
|
|
59
|
+
echo "::error::Failed to generate stats"
|
|
60
|
+
echo "Error output:"
|
|
61
|
+
cat error.log
|
|
62
|
+
exit 1
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Verify the JSON is valid
|
|
66
|
+
if ! jq empty ../stats-output.json 2>jq-error.log; then
|
|
67
|
+
echo "::error::Invalid JSON output from stats script"
|
|
68
|
+
echo "JSON validation error:"
|
|
69
|
+
cat jq-error.log
|
|
70
|
+
echo "\nRaw output (first 1000 chars):"
|
|
71
|
+
head -c 1000 ../stats-output.json
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
- name: Comment PR with results
|
|
76
|
+
if: always() && github.event_name == 'pull_request'
|
|
77
|
+
uses: actions/github-script@v7
|
|
78
|
+
env:
|
|
79
|
+
# Use the GITHUB_TOKEN with the correct permissions
|
|
80
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
81
|
+
with:
|
|
82
|
+
script: |
|
|
83
|
+
// Use require instead of import to avoid any module issues
|
|
84
|
+
const fs = require('fs').promises;
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
// Check if previous steps succeeded
|
|
88
|
+
const validationStatus = '${{ steps.validate.outcome }}';
|
|
89
|
+
const statsStatus = '${{ steps.stats.outcome }}';
|
|
90
|
+
const hasErrors = validationStatus !== 'success' || statsStatus !== 'success';
|
|
91
|
+
|
|
92
|
+
// Read and parse the stats file
|
|
93
|
+
let stats = null;
|
|
94
|
+
try {
|
|
95
|
+
const statsData = await fs.readFile('stats-output.json', 'utf8');
|
|
96
|
+
stats = JSON.parse(statsData);
|
|
97
|
+
} catch (parseError) {
|
|
98
|
+
console.error('Failed to parse stats JSON:', parseError);
|
|
99
|
+
// Continue with partial info if stats failed
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Generate the comment body using string concatenation to avoid YAML issues
|
|
103
|
+
const validationEmoji = hasErrors ? '❌' : '✅';
|
|
104
|
+
const validationStatusText = hasErrors ? 'Failed' : 'Passed';
|
|
105
|
+
const body = '## 📊 Bibliography Validation Results\n\n' +
|
|
106
|
+
`${validationEmoji} **Validation**: ${validationStatusText}\n\n` +
|
|
107
|
+
(stats ? '### Statistics\n' +
|
|
108
|
+
`- **Total Entries**: ${stats.total || 0}\n` +
|
|
109
|
+
`- **Entries with Abstracts**: ${stats.quality?.withAbstract || 0}/${stats.total || 0}\n` +
|
|
110
|
+
`- **Missing Abstracts**: ${(stats.total || 0) - (stats.quality?.withAbstract || 0)}\n\n` +
|
|
111
|
+
'### Transformation Coverage\n' +
|
|
112
|
+
`- P (Perspective): ${stats.transformations?.P || 0}\n` +
|
|
113
|
+
`- IN (Inversion): ${stats.transformations?.IN || 0}\n` +
|
|
114
|
+
`- CO (Composition): ${stats.transformations?.CO || 0}\n` +
|
|
115
|
+
`- DE (Decomposition): ${stats.transformations?.DE || 0}\n` +
|
|
116
|
+
`- RE (Recursion): ${stats.transformations?.RE || 0}\n` +
|
|
117
|
+
`- SY (Synthesis): ${stats.transformations?.SY || 0}\n\n` +
|
|
118
|
+
'### Quality Metrics\n' +
|
|
119
|
+
`- DOI Coverage: ${stats.total ? ((stats.quality?.withDOI || 0) / stats.total * 100).toFixed(1) : 0}% (${stats.quality?.withDOI || 0}/${stats.total || 0})\n` +
|
|
120
|
+
`- ISBN Coverage: ${stats.total ? ((stats.quality?.withISBN || 0) / stats.total * 100).toFixed(1) : 0}% (${stats.quality?.withISBN || 0}/${stats.total || 0})\n` +
|
|
121
|
+
`- Abstract Coverage: ${stats.total ? ((stats.quality?.withAbstract || 0) / stats.total * 100).toFixed(1) : 0}% (${stats.quality?.withAbstract || 0}/${stats.total || 0})\n` +
|
|
122
|
+
`- HUMMBL Keywords: ${stats.total ? ((stats.quality?.withKeywords || 0) / stats.total * 100).toFixed(1) : 0}% (${stats.quality?.withKeywords || 0}/${stats.total || 0})` :
|
|
123
|
+
'### Statistics\n\n⚠️ Unable to generate statistics. Please check the workflow logs.\n');
|
|
124
|
+
|
|
125
|
+
// Post the comment
|
|
126
|
+
await github.rest.issues.createComment({
|
|
127
|
+
issue_number: context.issue.number,
|
|
128
|
+
owner: context.repo.owner,
|
|
129
|
+
repo: context.repo.repo,
|
|
130
|
+
body: body
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
return 'Successfully posted PR comment';
|
|
134
|
+
|
|
135
|
+
} catch (error) {
|
|
136
|
+
console.error('Error in GitHub Script:', error);
|
|
137
|
+
|
|
138
|
+
// Post a fallback error comment
|
|
139
|
+
try {
|
|
140
|
+
await github.rest.issues.createComment({
|
|
141
|
+
issue_number: context.issue.number,
|
|
142
|
+
owner: context.repo.owner,
|
|
143
|
+
repo: context.repo.repo,
|
|
144
|
+
body: '❌ Failed to generate statistics. Please check the workflow logs for details.'
|
|
145
|
+
});
|
|
146
|
+
} catch (commentError) {
|
|
147
|
+
console.error('Failed to post error comment:', commentError);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// This will fail the step
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
. "$(dirname -- "$0")/_/husky.sh"
|
|
3
|
+
|
|
4
|
+
# Run validation in the toolkit directory
|
|
5
|
+
echo "🔍 Running pre-commit validation..."
|
|
6
|
+
cd toolkit && npm run validate
|
|
7
|
+
|
|
8
|
+
# Capture the exit code
|
|
9
|
+
VALIDATION_RESULT=$?
|
|
10
|
+
|
|
11
|
+
# Return to the root directory
|
|
12
|
+
cd ..
|
|
13
|
+
|
|
14
|
+
# Exit with the validation result
|
|
15
|
+
exit $VALIDATION_RESULT
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"requiredFields": ["title", "author", "year"],
|
|
3
|
+
"optionalFields": ["doi", "url", "abstract", "keywords"],
|
|
4
|
+
"entryTypes": {
|
|
5
|
+
"article": ["journal", "volume", "number", "pages"],
|
|
6
|
+
"book": ["publisher", "isbn"],
|
|
7
|
+
"inproceedings": ["booktitle", "pages"]
|
|
8
|
+
},
|
|
9
|
+
"doiFormat": "^10\\.\\d{4,9}/[-._;()/:A-Z0-9]+$",
|
|
10
|
+
"yearFormat": "^\\d{4}$"
|
|
11
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the HUMMBL Bibliography will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.3.0] - 2026-04-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
#### T13: Post-2024 Reasoning Models (new tier)
|
|
13
|
+
- `bibliography/T13_reasoning.bib` — 20 entries covering the o1/o3/R1-class reasoning model landscape
|
|
14
|
+
- Entries: `OpenAI2024o1SystemCard`, `OpenAI2025o3SystemCard`, `OpenAI2024o1Mini`, `OpenAI2024o1Tech`,
|
|
15
|
+
`DeepSeek2025R1`, `Guo2025DeepSeekR1Zero`, `Snell2024ScalingTestTime`, `Kumar2024ScalingInference`,
|
|
16
|
+
`Lightman2023PRM`, `Zelikman2022STAR`, `Madaan2023Selfrefine`, `Wang2023Selfconsistency`,
|
|
17
|
+
`Guo2024Critique`, `Yao2024ToT2`, `Ong2024RouteLLM`, `Anthropic2024Claude3`,
|
|
18
|
+
`Anthropic2025ClaudeModel`, `Gemini2024Team`, `Zheng2024JudgeBench`, `Chen2024AlphaCode2`
|
|
19
|
+
- 13/20 entries have arXiv DOIs (`10.48550/arXiv.*`); 7 are technical reports/blog posts with `% No DOI available`
|
|
20
|
+
- HUMMBL relevance: T13 grounds the "expensive reasoning" (pull engine) half of the push/pull architecture
|
|
21
|
+
|
|
22
|
+
#### NIST AI RMF + EU AI Act Crosswalk Tags
|
|
23
|
+
- 60 entries across T4 (20), T6 (20), T11 (20) tagged with `nist_functions` and `eu_ai_act_articles` fields
|
|
24
|
+
- `scripts/add_nist_tags.py` — crosswalk dict (60 entries) + `inject_tags()` function
|
|
25
|
+
- Enables queries like `node toolkit/src/query.js --nist-function GOVERN --format json`
|
|
26
|
+
|
|
27
|
+
#### ARCANA Citation Map
|
|
28
|
+
- `mappings/arcana_citations.json` — 28 ARCANA philosophical lens objects, each with `primary`, `secondary`, `gaps`
|
|
29
|
+
- Critical gaps documented: Weber, Bourdieu, Burnham, Chomsky, Marx, Nietzsche, Gramsci, McLuhan, Heidegger
|
|
30
|
+
|
|
31
|
+
#### BKI Evidence Audit
|
|
32
|
+
- `mappings/bki_evidence.json` — 4 BKI propositions + Biocognitive OS + Broccolilly Equation + HUMMBL governance failure thesis
|
|
33
|
+
- Coverage grades per proposition; 14 present entries; 9 missing entries documented
|
|
34
|
+
- Critical gap: `Edmondson1999PsychologicalSafety` absent from bibliography
|
|
35
|
+
|
|
36
|
+
#### Open Brain Ingest Script
|
|
37
|
+
- `scripts/ingest_to_open_brain.py` — stdlib-only POST to Open Brain `/ledger/post`
|
|
38
|
+
- `--dry-run` (default), `--post`, `--tier`, `--keyword`, `--limit`, `--verbose` flags
|
|
39
|
+
- Calls `node toolkit/src/query.js --format json` as subprocess; converts entries to `discovery` ledger payloads
|
|
40
|
+
|
|
41
|
+
#### llms.txt Updated (260 entries)
|
|
42
|
+
- Regenerated to include T13; 1,100+ lines
|
|
43
|
+
- Sections: Query API docs, HUMMBL keyword legend, 13 tier sections (T1–T13)
|
|
44
|
+
|
|
45
|
+
#### DOI Audit (40 entries, all pre-T13 tiers)
|
|
46
|
+
- `scripts/annotate_dois.py` — applies `% No DOI available` comments and verified `doi` fields
|
|
47
|
+
- 4 CrossRef-verified DOIs added: `Grasse1959Stigmergy`, `Sabater2005Trust`, `Bansal2019MentalModels`, `Piaget1952Origins`
|
|
48
|
+
- 41 `% No DOI available` annotations added across T1/T2/T4/T5/T6/T8/T9/T10/T11/T12
|
|
49
|
+
|
|
50
|
+
### Quality Metrics (v1.3.0)
|
|
51
|
+
|
|
52
|
+
- ✅ **260 total entries** (20 × 13 tiers)
|
|
53
|
+
- ✅ 100% entries have abstracts
|
|
54
|
+
- ✅ 100% entries have HUMMBL transformation keywords
|
|
55
|
+
- ✅ 0 validation errors
|
|
56
|
+
- ✅ 0 cross-tier duplicate keys
|
|
57
|
+
- ✅ T7: 100% DOI coverage (20/20)
|
|
58
|
+
- ✅ T13: 65% DOI coverage (13/20, arXiv papers)
|
|
59
|
+
- ✅ Overall: ~55% DOI coverage (~142/260 est.)
|
|
60
|
+
- ✅ 60 entries with NIST AI RMF function tags
|
|
61
|
+
- ✅ 60 entries with EU AI Act article tags
|
|
62
|
+
- ✅ 28/28 ARCANA lenses mapped
|
|
63
|
+
- ✅ 4/4 BKI propositions mapped with coverage grades
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## [1.2.0] - 2026-04-08
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
- `mappings/` directory with ARCANA citation map and BKI evidence audit (initial commits)
|
|
71
|
+
- `scripts/ingest_to_open_brain.py` — initial version
|
|
72
|
+
- `CONTRIBUTING.md` — DOI convention documentation
|
|
73
|
+
- `toolkit/src/query.js` — programmatic JSON query API
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## [1.1.0] - 2026-04-08
|
|
78
|
+
|
|
79
|
+
### Added
|
|
80
|
+
|
|
81
|
+
#### New Tiers (T4–T12)
|
|
82
|
+
- **T4 (Governance & Ethics)**: 20 entries on AI policy, fairness, accountability, and alignment
|
|
83
|
+
- **T5 (Engineering Patterns)**: 20 entries on distributed systems, DevOps, chaos engineering, and observability
|
|
84
|
+
- **T6 (Philosophy of Mind)**: 20 entries on phenomenology, embodied cognition, and consciousness
|
|
85
|
+
- **T7 (Emerging AI Research)**: 20 entries on LLM agents, tool use, RAG, benchmarks, and multi-agent systems — fully DOI-enriched (100%)
|
|
86
|
+
- **T8 (Cognition & Learning)**: 20 entries on learning theory, memory systems, and metacognition
|
|
87
|
+
- **T9 (Economics & Incentives)**: 20 entries on mechanism design, market design, and AI economics
|
|
88
|
+
- **T10 (Collaboration & Teams)**: 20 entries on organizational design, coordination theory, and team dynamics
|
|
89
|
+
- **T11 (Security & Trust)**: 20 entries on adversarial ML, threat modeling, and trust architectures
|
|
90
|
+
- **T12 (Complexity Science)**: 20 entries on complex adaptive systems, emergence, and network theory
|
|
91
|
+
|
|
92
|
+
#### New Entry
|
|
93
|
+
- `Zhuge2024GPTSwarm` — "GPTSwarm: Language Agents as Optimizable Graphs" (NeurIPS 2024, arXiv:2402.16823); replaces duplicate T7 entry
|
|
94
|
+
|
|
95
|
+
#### DOI Enrichment — T7 (10 entries)
|
|
96
|
+
Added `doi = {10.48550/arXiv.XXXX.XXXXX}` to: `Yao2023ReAct`, `Wei2022ChainOfThought`, `Lewis2020RAG`,
|
|
97
|
+
`Schick2023Toolformer`, `Liu2024AgentBench`, `Jimenez2024SWEBench`, `Shinn2023Reflexion`,
|
|
98
|
+
`Schulhoff2024PromptReport`, `Wang2023Voyager`, `Ong2024RouteLLM`.
|
|
99
|
+
T7 is now **100% DOI-covered** (20/20).
|
|
100
|
+
|
|
101
|
+
#### DOI Annotations — T1 and T3
|
|
102
|
+
- Added `% No DOI available` comments to 6 unannotated T1 entries:
|
|
103
|
+
`Newell1972Human`, `Csikszentmihalyi1990Flow`, `VonNeumann1944GameTheory`,
|
|
104
|
+
`Gladwell2000TippingPoint`, `Schon1983ReflectivePractitioner`, `Gibson1979EcologicalApproach`
|
|
105
|
+
- Added `% No DOI available` comments to all 20 T3 entries (all trade business books)
|
|
106
|
+
|
|
107
|
+
### Fixed
|
|
108
|
+
|
|
109
|
+
- **Cross-tier duplicate**: `Chen2023FrugalGPT` existed in both T7 (`@inproceedings`) and T9 (`@article`).
|
|
110
|
+
T7 instance removed and replaced with `Zhuge2024GPTSwarm`. T9 retains the canonical entry.
|
|
111
|
+
- **Wrong DOI**: `Yao2023TreeOfThoughts` had `doi = {10.48550/arXiv.2305.14325}` (Du2023Debate's DOI).
|
|
112
|
+
Corrected to `doi = {10.48550/arXiv.2305.10601}`.
|
|
113
|
+
- **Wrong URL and DOI**: `Patil2023Gorilla` had URL/DOI pointing to arXiv `2305.10601` (Tree of Thoughts).
|
|
114
|
+
Corrected to `2305.15324` (Gorilla's actual arXiv ID).
|
|
115
|
+
|
|
116
|
+
### Quality Metrics (v1.1.0)
|
|
117
|
+
|
|
118
|
+
- ✅ 240 total entries (20 × 12 tiers)
|
|
119
|
+
- ✅ 100% entries have abstracts
|
|
120
|
+
- ✅ 100% entries have HUMMBL transformation keywords
|
|
121
|
+
- ✅ 0 validation errors
|
|
122
|
+
- ✅ 0 cross-tier duplicate keys
|
|
123
|
+
- ✅ T7: 100% DOI coverage (20/20)
|
|
124
|
+
- ⚠️ Overall DOI coverage: ~51% (122/240 est.) — T2, T4, T6, T8–T12 audit pending
|
|
125
|
+
- ⚠️ T5 blog posts need `% No DOI available` annotation (4 entries)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## [1.0.0] - 2025-01-30
|
|
130
|
+
|
|
131
|
+
### Added
|
|
132
|
+
|
|
133
|
+
#### Bibliography
|
|
134
|
+
- Initial bibliography with 48 curated entries
|
|
135
|
+
- 17 canonical works (T1) covering foundational theories
|
|
136
|
+
- 16 empirical research papers (T2) with rigorous peer review
|
|
137
|
+
- 15 applied practitioner texts (T3) for industry applications
|
|
138
|
+
- Complete HUMMBL transformation mappings for all entries
|
|
139
|
+
- 100% abstract coverage across all entries
|
|
140
|
+
- 29% DOI coverage, 73% ISBN coverage
|
|
141
|
+
|
|
142
|
+
#### Toolkit
|
|
143
|
+
- `validate.js`: Comprehensive BibTeX validation with error/warning reports
|
|
144
|
+
- `check-duplicates.js`: Cross-file duplicate detection by title, DOI, and ISBN
|
|
145
|
+
- `fix-duplicates.js`: Automated duplicate removal with tier prioritization
|
|
146
|
+
- `find-missing-dois.js`: DOI enrichment via CrossRef API integration
|
|
147
|
+
- `stats.js`: Analytics dashboard with transformation coverage metrics
|
|
148
|
+
- `extract-keywords.js`: HUMMBL transformation keyword extraction and analysis
|
|
149
|
+
- `merge-entries.js`: Interactive entry consolidation tool
|
|
150
|
+
- NPM scripts for all toolkit operations
|
|
151
|
+
- CI mode for automated validation
|
|
152
|
+
|
|
153
|
+
#### Documentation
|
|
154
|
+
- Comprehensive README.md with quick start guide
|
|
155
|
+
- CONTRIBUTING.md with detailed contribution guidelines
|
|
156
|
+
- TRANSFORMATION_GUIDE.md explaining the six HUMMBL transformations
|
|
157
|
+
- QUALITY_STANDARDS.md defining entry requirements and formatting
|
|
158
|
+
- GAP_ANALYSIS.md tracking coverage gaps and priorities
|
|
159
|
+
- Toolkit README.md with tool documentation
|
|
160
|
+
|
|
161
|
+
#### Automation
|
|
162
|
+
- GitHub Actions workflow for PR validation
|
|
163
|
+
- Weekly statistics report generation workflow
|
|
164
|
+
- Manual DOI enrichment workflow
|
|
165
|
+
- Pre-commit hooks using Husky for validation
|
|
166
|
+
- Setup script for Git hook configuration
|
|
167
|
+
- Monthly review script for automated reporting
|
|
168
|
+
|
|
169
|
+
#### Project Infrastructure
|
|
170
|
+
- Issue templates for new entries and quality improvements
|
|
171
|
+
- Three-tier directory structure (T1/T2/T3)
|
|
172
|
+
- HUMMBL transformation mapping schema (JSON)
|
|
173
|
+
- Reports directory for generated statistics
|
|
174
|
+
- MIT License
|
|
175
|
+
|
|
176
|
+
### Transformation Coverage
|
|
177
|
+
|
|
178
|
+
Current distribution:
|
|
179
|
+
- **SY (Synthesis)**: 20 entries
|
|
180
|
+
- **CO (Composition)**: 18 entries
|
|
181
|
+
- **P (Perspective)**: 17 entries
|
|
182
|
+
- **RE (Recursion)**: 16 entries
|
|
183
|
+
- **IN (Inversion)**: 15 entries
|
|
184
|
+
- **DE (Decomposition)**: 12 entries
|
|
185
|
+
|
|
186
|
+
### Quality Metrics
|
|
187
|
+
|
|
188
|
+
- ✅ 100% entries have abstracts
|
|
189
|
+
- ✅ 100% entries have HUMMBL transformation keywords
|
|
190
|
+
- ✅ 0 validation errors
|
|
191
|
+
- ✅ 0 duplicate entries
|
|
192
|
+
- ⚠️ 29% DOI coverage (target: 40-50%)
|
|
193
|
+
- ⚠️ 73% ISBN coverage (target: 85-90%)
|
|
194
|
+
|
|
195
|
+
### Known Issues
|
|
196
|
+
|
|
197
|
+
- DOI coverage below target (planned improvement in Q1 2025)
|
|
198
|
+
- Decomposition (DE) transformation underrepresented (4-6 entries needed)
|
|
199
|
+
- Inversion (IN) transformation slightly below target (1-3 entries needed)
|
|
200
|
+
|
|
201
|
+
## [Unreleased]
|
|
202
|
+
|
|
203
|
+
### Planned for v1.2.0 (Q3 2026)
|
|
204
|
+
|
|
205
|
+
- Complete `% No DOI available` annotation for T2, T4, T6, T8–T12
|
|
206
|
+
- DOI enrichment for T5 academic entries (Grasse1959, Rao1995, Sabater2005)
|
|
207
|
+
- T5 blog post annotation cleanup (4 entries)
|
|
208
|
+
- Evaluate T13 for post-2024 reasoning model papers (DeepSeek-R1, o3, etc.)
|
|
209
|
+
- Implement watch mode for continuous validation
|
|
210
|
+
- Enhanced statistics visualization
|
|
211
|
+
|
|
212
|
+
### Future Considerations
|
|
213
|
+
|
|
214
|
+
- Integration with Zotero/Mendeley
|
|
215
|
+
- Citation relationship analysis
|
|
216
|
+
- Automated entry suggestions based on gaps
|
|
217
|
+
- Community contribution portal
|
|
218
|
+
- Multi-language support
|
|
219
|
+
- API for programmatic access
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
**Note**: This changelog follows semantic versioning. Given the nature of a bibliography:
|
|
224
|
+
- **MAJOR** versions indicate significant structural changes or complete reorganizations
|
|
225
|
+
- **MINOR** versions indicate new entries, new tools, or significant enhancements
|
|
226
|
+
- **PATCH** versions indicate fixes to existing entries or minor improvements
|
|
227
|
+
|
|
228
|
+
For detailed commit history, see: https://github.com/hummbl-dev/hummbl-bibliography/commits/main
|