Thank you for your interest in contributing to SCE! This project welcomes contributions from researchers, developers, and AI safety practitioners.
Found a bug? Open an issue with:
- Clear description of the issue
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, browser, Node version)
- Screenshots/logs if applicable
Have an idea? Start a discussion or open a feature request.
- Benchmark results comparing SCE to RAG or other memory systems
- Parameter sensitivity analyses
- Scalability test results
- AI safety case studies
- Theoretical improvements
- Performance optimizations
- New algorithms or pruning strategies
- UI/UX improvements
- Test coverage
- Documentation
- Node.js 18+ and npm
- Git
- For desktop builds: Rust + platform dependencies
- Windows: C++ Build Tools
- macOS: Xcode Command Line Tools
- Linux:
webkit2gtkdevelopment packages
# 1. Fork the repository on GitHub
# 2. Clone your fork
git clone https://github.com/YOUR_USERNAME/synapse-context-engine.git
cd synapse-context-engine
# 3. Install dependencies
npm install
# 4. Run web version
npm run dev
# 5. Run desktop version (requires Rust)
npm run tauri devfeature/- New features (feature/goal-directed-activation)fix/- Bug fixes (fix/traversal-depth-limit)docs/- Documentation (docs/update-architecture-guide)perf/- Performance improvements (perf/optimize-graph-traversal)test/- Test additions (test/hebbian-learning-suite)
Follow Conventional Commits:
feat: add contradiction resolution UI
fix: prevent infinite loop in recursive traversal
docs: update spreading activation documentation
perf: optimize hyperedge lookups with indexing
test: add integration tests for MMR pruning
-
Create a feature branch from
maingit checkout -b feature/your-feature-name
-
Make your changes with clear, atomic commits
-
Test thoroughly
npm test # Run test suite npm run lint # Check code style npm run type-check # TypeScript validation
-
Update documentation if needed
- README.md for user-facing changes
- Code comments for complex logic
- docs/ for architectural changes
-
Open a Pull Request with:
- Clear title describing the change
- Detailed description of what and why
- Screenshots/videos for UI changes
- Reference related issues (
Fixes #123) - Test results if applicable
-
Respond to review feedback promptly
// tests/engine/spreading-activation.test.ts
describe('Spreading Activation', () => {
it('should propagate energy with decay', () => {
// Arrange
const graph = createTestGraph();
const seedNode = 'node-a';
// Act
const results = spreadActivation(graph, seedNode, { gamma: 0.8 });
// Assert
expect(results.get('node-b').energy).toBeLessThan(1.0);
});
});npm test # All tests
npm test -- --watch # Watch mode
npm test spreading # Specific test file
npm run test:coverage # Coverage report- Use TypeScript strict mode
- Prefer explicit types over
any - Use functional programming patterns where appropriate
- Keep functions small and focused
// ✅ Good
interface NodeProps {
id: string;
energy: number;
onActivate: (id: string) => void;
}
export const Node: React.FC<NodeProps> = ({ id, energy, onActivate }) => {
return (
<div className="node" onClick={() => onActivate(id)}>
<span>{id}</span>
<span>{energy.toFixed(2)}</span>
</div>
);
};
// ❌ Avoid
export const Node = (props: any) => {
// ...
};- Components: PascalCase (
NodeVisualizer,GraphExplorer) - Functions: camelCase (
spreadActivation,calculateMMR) - Constants: UPPER_SNAKE_CASE (
DEFAULT_DECAY,MAX_DEPTH) - Types/Interfaces: PascalCase (
HypergraphNode,ActivationResult)
- Use
React.memofor expensive components - Debounce frequent user interactions
- Implement pagination for large node lists
- Profile before optimizing (use Chrome DevTools)
- Document performance-critical code sections
// Example: Memoized graph calculation
const activatedNodes = useMemo(
() => spreadActivation(graph, focusNode, config),
[graph, focusNode, config]
);Include:
- Methodology description
- Dataset characteristics
- Hardware specs
- Full result tables
- Statistical significance tests
- Comparison with baselines
- Mathematical derivation
- Complexity analysis
- Connection to existing literature
- Implementation sketch
/**
* Propagates activation energy through the hypergraph using spreading activation.
*
* @param graph - The hypergraph structure
* @param seedNodes - Initial activation points
* @param config - Activation parameters (decay, threshold, depth)
* @returns Map of node IDs to activation energies
*
* @example
* ```typescript
* const results = spreadActivation(graph, ['node-1'], {
* gamma: 0.85,
* theta: 0.3,
* maxDepth: 3
* });
* ```
*/
export function spreadActivation(
graph: Hypergraph,
seedNodes: string[],
config: ActivationConfig
): Map<string, number> {
// Implementation
}Document significant architectural choices in docs/architecture/decisions/:
# ADR 001: Use Hypergraphs Over Knowledge Graphs
## Context
Traditional knowledge graphs use binary relations...
## Decision
We will use directed hypergraphs to model memory...
## Consequences
- Preserves semantic atomicity
- Requires custom traversal algorithms
- Higher memory overhead- Be respectful and inclusive
- Welcome newcomers warmly
- Provide constructive feedback
- Focus on the problem, not the person
- Respect different viewpoints and experiences
- Harassment or discriminatory language
- Personal attacks or trolling
- Publishing others' private information
- Unethical or illegal activity
Violations should be reported to the project maintainer. All complaints will be reviewed and investigated.
New to the project? Start here:
- Architecture Paper - Theoretical foundation
- Open Questions - Research opportunities
- Latest Updates - Recent changes
- Code Structure - Codebase overview
- Questions: GitHub Discussions
- Bugs: Issue Tracker
- Security: See SECURITY.md
Contributors are recognized in:
- Repository README
- Release notes
- Academic publications (for significant research contributions)
Thank you for contributing to advancing transparent AI memory systems! 🧠✨