Getting started as a contributor
|
Audience: anyone who wants to change SKaiNET itself โ from a first
|
SKaiNET has two contribution processes. They are not alternatives and they are not a hierarchy; they answer two different questions:
| DARC | SKEEP | |
|---|---|---|
The question it answers |
"Is this the right thing to build, and is it built to the documented design?" โ for one feature: an operator, a metric, a layer, a format reader, a kernel strategy. |
"What is the durable shape of this codebase going forward?" โ for one architectural decision: a public API, a DSL syntax, a storage model, a runtime/compiler integration point, a compatibility policy. |
Expansion |
Document ยท Assess ยท Research ยท Code. Cyclical; the prose is the deliverable that survives, the code follows. |
SKaiNET Evolution and Enhancement Process. Numbered, KEEP-style proposals with a fixed section set. |
Artefact |
A GitHub issue from the
DARC
Feature Proposal template, decomposed into lane sub-issues; for
operators, a doc partial plus the |
A file |
Lifecycle |
โ undocumented โ โ prose but unreviewed โ โ
|
|
Who signs off |
A reviewer who is not the implementer. |
A maintainer, by moving the |
Authoritative page |
DARC or SKEEP?
Most contributions need neither. A typo, an obvious one-line bug, a dependency bump, a missing test for shipped behaviour โ just open a PR (see when DARC applies).
For anything larger, run down this list in order:
-
Does the change trip a SKEEP trigger? Public Kotlin API shape, DSL syntax or semantics, tensor dtype/shape/storage/execution behaviour, compiler/graph-export/runtime integration, compatibility or migration policy, or the docs structure of a long-lived feature area. If yes, SKEEP first โ the proposal carries the "why this shape" argument, and every later DARC feature links to it instead of re-litigating the design.
-
Otherwise, would a maintainer six months from now want to know why the change is shaped the way it is? If yes, DARC: open a feature issue, decompose it into lanes, ship through the four phases.
-
Both? A new op that also needs a new architectural pattern to support it โ write the SKEEP, then have the DARC issue’s Document section link to it. Never fold a SKEEP-sized decision into a DARC sub-issue "as an afterthought"; that is precisely the drift SKEEP exists to prevent.
-
Precision,Recall,F1Scoremetrics โ additive classes behind the existingMetricinterface, no API/DSL/storage footprint: DARC only (see the worked example). -
Teaching the ground-truth harness to validate stateful metrics, not just stateless tensor ops โ a test-integration pattern every future metric inherits: SKEEP.
-
A new tensor-storage model, a new tensor literal syntax: SKEEP (SKEEP-003, SKEEP-001 respectively).
-
A new SIMD kernel for an existing op: DARC.
If you are still unsure, open a small draft SKEEP or ask on the issue before implementing the whole feature โ the project’s default is to lean toward writing the record, not skipping it.
How a feature is broken up: lanes
A DARC feature issue is one parent (the Document/Assess/Research artefact) plus one sub-issue per lane. Lanes split the work by the skill it needs, so an Android developer who has never seen the tensor internals, or a PyTorch person who does not write Kotlin, can each pick up something real.
| Lane | Skill | Produces | Size |
|---|---|---|---|
0 ยท Design (SKEEP) |
|
A numbered proposal under |
MโL |
1 ยท Numerics / Research |
|
Formula, citations, and an edge-case catalogue (zero-division, empty batch, dtype boundaries) from PyTorch / NumPy / scikit-learn. No Kotlin required. |
SโM |
2 ยท Kotlin core |
|
The |
MโL |
3 ยท Platform verification |
|
Confirmation the code builds and gives identical results on that target โ or, for ops needing a hand-written kernel, the kernel itself. |
XSโL (say which!) |
4 ยท Ground-truth / CI |
|
A wired ground-truth test case, or a scoped proposal when the op doesn’t fit the harness’s shape. |
SโM |
5 ยท Docs / DARC |
|
The doc partial ( |
S |
6 ยท Review |
|
DARC sign-off and the |
S |
Not every feature needs every lane. Whoever opens the parent issue says which lanes are substantive and which are trivial for this feature โ that is part of the Document artefact. Lane 3 in particular ranges from "run the existing test suite on iOS" (an hour) to "write a NEON JNI kernel" (days); the sub-issue must say which.
Finding something to do
The pinned issue ๐ New contributors: start here at the top of the issue list has the searches below as one-click links; it is the fastest route in.
Every sub-issue carries one skill:* label, one size:* label, and a
DARC phase label, so the whole backlog is filterable โ not just one
feature’s checklist. Useful searches on the
issue tracker:
|
No prior SKaiNET codebase knowledge assumed. |
|
Everything an Android developer can finish in under an hour, across all features. |
|
Research tasks โ reading PyTorch/sklearn, writing up conventions โ no Kotlin at all. |
|
The parent feature issues, to see the big picture. |
|
Design proposals looking for review. |
To claim a task, comment on the sub-issue. A maintainer assigns it; if a task has been claimed but idle for two weeks, it is fair to ask whether it is free again.
The full label reference, title conventions, and the gh commands
maintainers use to decompose a feature are in
Issue taxonomy.
Your first pull request
-
Build from source and run the module’s tests once before touching anything.
-
Branch from
developfollowing Gitflow (GITFLOW.adocin the repo root):feature/<issue-number>-short-title. -
Keep the PR scoped to its sub-issue. "While I was in there" changes go into their own sub-issue โ the lane decomposition only works if PRs stay small enough for a lane-specific reviewer.
-
Link the sub-issue in the PR description (
Closes #NNN) and say which DARC phase it delivers. For Code-lane PRs, state explicitly what was not validated (for example "unit tests only, ground-truth wiring is tracked in SKEEP-NNN") โ a reviewed, stated trade-off is fine; a silent gap is not. -
CI must be green: KtLint / Detekt, unit tests, and the binary compatibility validator for public API changes.
-
Report back on the parent issue when the sub-issue closes, so the parent’s lane rollup stays honest.
Where things live
| Location | Role |
|---|---|
Authoritative definition of the four phases, when they apply, the
operator-doc specialisation and |
|
Status values, proposal template, and the list of current proposals. |
|
Labels, title conventions, templates, and how to decompose a feature into sub-issues. |
|
One real feature taken through DARC end to end, including the point where it runs into a SKEEP trigger. |
|
|
SKEEP authoring procedure, branch policy, commit conventions. |
|
|
|
Source of truth for the label taxonomy and the script that applies it. |