Create the Business Case, Stakeholder Analysis (S01 course participant, S02 Udemy coursists, S03 GitHub viewers), Project Plan and the milestone documents MIL-001 (project setup, 6 tasks) and MIL-002 (game implementation, 8 tasks) for the console Blackjack game. Register PP and MIL in the artifact registry, set the PO language to en, and link the synced Gitea milestones in the Gateway Schedule. Refs #1 Refs #2 Refs #3 Refs #4 Refs #5 Refs #6 Refs #7 Refs #8 Refs #9 Refs #10 Refs #11 Refs #12 Refs #13 Refs #14
5.1 KiB
name, description
| name | description |
|---|---|
| coding-conventions | Programming conventions for writing or reviewing source code — naming, layout, formatting and language idioms — for Python, C, C++, C# and Shell (bash). Use when writing, editing, reviewing or refactoring code in one of those languages, choosing names, setting up a formatter/linter config, or adding conventions for another language. Holds the rules shared by every language and points to a per-language sub-skill. |
Coding Conventions
One skill for all languages. This file holds what is true in every language; everything specific to one language is in a sub-skill that is read only when that language is in hand:
| Language | Sub-skill | QC checklist |
|---|---|---|
| Python | references/python.md |
framework/qc/qc-programming-python.md (QC-PY-001) |
| C | references/c.md |
framework/qc/qc-programming-c.md (QC-CL-001) |
| C++ | references/cpp.md |
framework/qc/qc-programming-cpp.md (QC-CPP-001) |
| C# | references/csharp.md |
framework/qc/qc-programming-csharp.md (QC-CS-001) |
| Shell (bash) | references/shell.md |
framework/qc/qc-programming-shell.md (QC-SH-001) |
Read the sub-skill for the language you are working in, then write or review
the code. To review, use the language's QC checklist and record the result as
an RC-* (see the artifact skill).
Precondition: a planned task
Before writing or editing code under src/ or tests/, name the task row
(MIL-NNN, task N) or the synced issue, and the use case or design artifact
it implements, or say it is a plain technical task. If you cannot, refuse and
use the project-planning skill instead (rule: framework/process/plan-first-gate.md).
Reviewing code needs no task.
Rules for every language
- The existing code wins. In a file or project that already has a convention, follow it, even if the sub-skill says otherwise. Do not mix styles within a file; do not reformat code you are not changing.
- Naming follows the language, not your habits. Casing differs per language (table below). Never carry one language's casing into another.
- A name says what, not how. Name by purpose in the domain's language
(IT Professional English, as the registry's
Languagessection says), not by type or implementation (customer_list, notarr2). - Length follows scope. Short names (
i,n) only for tiny scopes; wider scope, longer name. No abbreviations except ones the whole domain uses (id,url,http). - Booleans read as a question:
is_valid,has_items,can_retry(cased per language). No negated names (is_not_ready). - Functions are verbs, types are nouns. A function that returns a value
without side effects may be a noun (
total,Total) where the language community does so. - Formatting is done by the formatter, not by hand and not in review comments. Each sub-skill names the formatter and linter; commit its configuration file with the code.
- Comments say why, never what the code already says. Public APIs get the language's documentation-comment form.
- No dead or commented-out code, no unexplained magic numbers. Name the constant.
- Errors are handled or propagated, never swallowed. Each sub-skill says how its language does this.
Casing at a glance
| Element | Python | C | C++ | C# |
|---|---|---|---|---|
| Type / class | PascalCase |
snake_case_t |
PascalCase |
PascalCase |
| Function / method | snake_case |
snake_case |
snake_case |
PascalCase |
| Variable / parameter | snake_case |
snake_case |
snake_case |
camelCase |
| Constant | UPPER_SNAKE |
UPPER_SNAKE |
kPascalCase |
PascalCase |
| Private member | _leading |
file-scope static |
trailing_ |
_camelCase |
| Namespace / module | snake_case module |
mod_ prefix |
snake_case |
PascalCase |
| File | snake_case.py |
snake_case.c/.h |
snake_case.cpp/.h |
PascalCase.cs |
The table is a summary; the sub-skill is authoritative. Shell (bash) is not in
the table: functions and variables are snake_case, constants and environment
variables UPPER_SNAKE, files kebab-case.sh.
Governance boundary
Conventions are defined and governed here but not enforced by this
framework: writing a linter or CI job that enforces them is outside the
framework's scope. The formatter and linter names in each sub-skill are the
recommended tools, not a pipeline. A new or changed convention follows the
process in the project's Coding Standards Governance document and is recorded
in framework/CHANGELOG.md. No project data belongs in this skill.
Adding a language
- Add
references/<language>.mdwith these sections: Standard base, Naming, Formatting, Language rules, Errors, Tests, Tooling. - Add
framework/qc/qc-<language>.md(QC-<SHORT>-001) using theQCtype of theartifactskill, tagging every criterion with an ISO/IEC 25010:2023 characteristic and a Level. - Add the row to the table above, the casing table, and a row for the
language in
framework/registry/artifact-catalog.md; note it inframework/CHANGELOG.md; runbash framework/scripts/install-skills.sh.