Skip to content

Add the S-CORE contributor training - #2

Merged
masc2023 merged 4 commits into
eclipse-score:mainfrom
qorix-group:vohae_initial_contribution
Oct 30, 2026
Merged

masc2023 merged 4 commits into
eclipse-score:mainfrom
qorix-group:vohae_initial_contribution

Conversation

@PandaeDo

@PandaeDo PandaeDo commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Why

Approved in the S-CORE process meeting on 2026-10-27: a self-paced, hands-on training for contributors, done in a private copy in the participant's own account. Completed trainings are recorded here, as evidence for wp__training_path. Repository requested in eclipse-score/.eclipsefdn#244.

What

  • TRAINING.md — start here. Self-organised: no tutor, no support; "When something breaks" says how to repair a copy. Three tracks: quality, safety, security. About five working days, stages 0–6.
  • training/ — setup.py (run by the participant in their own copy), defect patches, prepared pull requests, task issues, and SOLUTIONS.md, open on purpose. training/README.md explains how to change the training and add a track.
  • Issue forms in this repository: Feedback, Bug report, Training completed (the record of conducted trainings).
  • Certificate workflow: a certificate of completion once every issue in the copy is closed by a merged pull request. It states that it is no proof of competence and no Eclipse Foundation certification.
  • The module itself, Training_Module, is made from eclipse-score/module_template (b60778b; docs/ at the parent of 775aad3c, which task 5 updates), with one seeded defect per track.

Checked

In qorix-group/contributor_training_staging and a private copy made from it:

  • setup dry runs for all three tracks;
  • a real run for the safety track: 5 pull requests, each with green Build Documentation and Pre-Commit; review comments on a pull request of the participant's own account; 15 issues;
  • the Certificate workflow refuses an unfinished copy and lists what is open.

Locally, one build after the other: every defect branch shows exactly the messages SOLUTIONS.md records, and the stage 5 rebase conflicts in the release note, the module safety plan and the module security plan.

Size and IP review

About 15,000 added lines. About 12,800 are derived from module_template (already EPL/Apache in S-CORE; 5,000 of them MODULE.bazel.lock). About 2,200 are new (training/, of which 570 are patch files, TRAINING.md, README.md, the forms and the certificate). Above 1,000 lines, the Eclipse Project Handbook (IP due diligence) asks a committer to request an IP Team review before the merge. Content Review Request: IPLab #32847. Please do not merge before the IP Team has approved it.

AI assistance

The new material was written with Claude Code under my direction; I reviewed it and am responsible for it. Following the Eclipse Project Handbook ("Using Artificial Intelligence / Disclosure"), every largely AI-generated file carries the AI disclosure in its header, with SPDX-License-Identifier: Apache-2.0 AND CC0-1.0 and an Assisted-by line (training/reviews/r3.json through REUSE.toml); LICENSES/CC0-1.0.txt is added. Files taken from module_template keep their header. The commits carry an Assisted-by trailer.

After merging

🤖 Generated with Claude Code

A self-paced, hands-on training for contributors on the quality, safety
and security tracks. A participant copies this repository into their own
account with "Use this template" and runs training/setup.py there; it
creates the defect branches, five prepared pull requests, review comments
and about fifteen task issues in the copy. The training is
self-organised: no tutor, no support, and TRAINING.md says how to repair
a broken copy. The solutions (training/SOLUTIONS.md) are open.

The module, Training_Module, is made from eclipse-score/module_template
(b60778b, docs at the parent of 775aad3c for the template-update task),
with one seeded defect per track. New: training/, TRAINING.md, README.md,
the issue forms (Feedback, Bug report, Training completed) and the
Certificate workflow, which issues a certificate of completion once
every issue is closed by a merged pull request.

Checked in qorix-group/contributor_training_staging and a private copy
made from it: setup dry runs for all three tracks; a real run for safety
(5 pull requests with green Build Documentation and Pre-Commit, review
comments on a pull request of the participant's own account, 15
issues); the Certificate workflow refusing an unfinished copy. Locally:
every defect branch shows the messages SOLUTIONS.md records, and the
stage 5 rebase conflicts in the three track documents.

Assisted-by: Claude Code (claude-opus-5-5)
Follows the Eclipse Project Handbook, "Using Artificial Intelligence /
Disclosure": the files written with Claude Code (training/, TRAINING.md,
README.md, the issue forms and template, the certificate workflow and its
script, docs/participants/index.rst) carry the disclosure that their
AI-generated portions are made available under CC0-1.0, the SPDX
expression "Apache-2.0 AND CC0-1.0" and an Assisted-by line.
training/reviews/r3.json gets the same expression through REUSE.toml.
LICENSES/CC0-1.0.txt is the SPDX licence text.

The module files taken from module_template keep their header.

Checked: pre-commit passes on all files (copyright, reuse lint-file;
bazel mod hooks skipped); every task issue still renders without its
header.

Assisted-by: Claude Code (claude-opus-5-5)

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The gitlint action’s image lacks the required docker:// prefix, causing invocation to fail before gitlint runs.

7 open issues
What changed in this PR

Adds self-paced S-CORE contributor training with quality, safety, and security tracks, using a module-template-based practice repository and recorded completion.

Changes:

  • Adds staged tasks, seeded defects, prepared reviews, and training maintenance guidance.
  • Introduces the example module, documentation, tests, Bazel configuration, and development tooling.
  • Adds feedback and completion forms, validation workflows, certificate generation, and licensing metadata.

This pull request requires changes. Unresolved findings include 1 critical issue, 4 moderate issues, and 6 nits, detailed alongside the affected files below.

File Description
training/​reviews/​r3.json Supplies prepared comments for the review-response exercise.
training/​README.md Documents training maintenance and track extension.
training/​patches/​r5-security.patch Seeds the security cross-review exercise.
training/​patches/​r5-safety.patch Seeds the safety cross-review exercise.
training/​patches/​r4.patch Creates the template-update conflict exercise.
training/​patches/​r3.patch Prepares the review-response exercise.
training/​patches/​r2.patch Seeds content-review findings.
training/​patches/​r1.patch Seeds formatting and proofreading findings.
training/​patches/​build-3.patch Demonstrates stale incremental documentation output.
training/​patches/​build-2.patch Seeds documentation and pre-commit failures.
training/​patches/​build-1.patch Seeds reference and classification failures.
training/​issues/​16-continuous-improvement.md Collects ongoing participant observations.
training/​issues/​15-task-6.2-6.3.md Defines formal review and retrospective tasks. Moderate, 3 votes — L23: Quality-track documents lack the required FDR checklists; provide an appropriate checklist or explicitly identify an alternative.
training/​issues/​14-task-6.1.md Defines cross-track review.
training/​issues/​12-task-5.4.md Assigns completion of track-specific documents.
training/​issues/​11-task-5.1-5.3.md Defines template synchronization and rebasing. Moderate, 1 vote — L27: The safety/security update introduces a reference to doc__mod_temp_module_name_user_manual, while the manual retains doc__user_manual, failing the required build. Include the manual ID migration and dependent references in the instructions.
training/​issues/​10-task-4.3.md Defines responses to prepared review comments.
training/​issues/​09-task-4.2.md Defines content-review expectations.
training/​issues/​08-task-4.1.md Defines presentation-review expectations.
training/​issues/​07-task-3.2.md Defines project-decision research.
training/​issues/​06-task-3.1.md Defines process-traceability research.
training/​issues/​05-task-2.4.md Defines defect-branch repair exercises.
training/​issues/​04-task-2.1.md Defines clean-build and hook inspection.
training/​issues/​03-task-1.2.md Defines typo fixes and reasoned commits.
training/​issues/​02-task-1.1.md Defines upstream synchronization practice.
training/​issues/​01-task-0.1.md Defines environment setup and participant evidence.
score/​tests/​test_main.rs Adds a placeholder Rust module test.
score/​tests/​test_main.cpp Adds C++ module-level greeting tests.
score/​tests/​BUILD Registers module-level test targets.
score/​component_example/​tests/​component_example_test.cpp Adds component integration tests.
score/​component_example/​src/​lower_level_comp/​.gitkeep Preserves the lower-level component directory.
score/​component_example/​src/​component_example.hpp Declares the example greeting API.
score/​component_example/​src/​component_example.cpp Implements the example greeting API.
score/​component_example/​src/​component_example_test.cpp Adds a greeting unit test.
score/​component_example/​docs/​security_analysis/​aou_requirements.rst Provides component security-assumption templates.
score/​component_example/​docs/​safety_analysis/​fmea.rst Provides the component FMEA template.
score/​component_example/​docs/​safety_analysis/​component_classification.rst Provides component-classification guidance.
score/​component_example/​docs/​safety_analysis/​aou_requirements.rst Provides component safety-assumption templates.
score/​component_example/​docs/​requirements/​requirements.rst Provides component requirement examples.
score/​component_example/​docs/​requirements/​index.rst Organizes requirements documentation and inspection.
score/​component_example/​docs/​manuals/​.gitkeep Preserves the component manuals directory.
score/​component_example/​docs/​index.rst Introduces the component documentation structure.
score/​component_example/​docs/​detailed_design/​index.rst Organizes design documentation and implementation inspection.
score/​component_example/​docs/​detailed_design/​detailed_design_example.rst Provides detailed-design guidance.
score/​component_example/​docs/​detailed_design/​dd_example_ex_sta.puml Illustrates static unit relationships.
score/​component_example/​docs/​detailed_design/​dd_example_ex_dyn.puml Illustrates dynamic unit interactions.
score/​component_example/​docs/​detailed_design/​chklst_impl_inspection.rst Provides an implementation inspection checklist.
score/​component_example/​docs/​architecture/​index.rst Organizes component architecture documentation.
score/​component_example/​docs/​architecture/​component_architecture.rst Provides component architecture templates.
score/​component_example/​BUILD Registers the component library, tests, and documentation.
score/​BUILD Establishes the module package boundary.
score.bazelrc/​score_toolchain.bazelrc Defines platform-specific toolchain configurations.
REUSE.toml Supplies licensing annotations for metadata files.
README.md Introduces the training and entry points.
pyproject.toml Configures Python editor analysis.
project_config.bzl Defines module build metadata.
NOTICE Adds project notices and attribution.
LICENSES/​CC0-1.0.txt Adds the CC0 license text.
LICENSES/​Apache-2.0.txt Adds the Apache license text.
examples/​docs/​index.rst Links architecture-modeling examples.
examples/​Cargo.lock Supplies dependency metadata for license checking.
examples/​BUILD Registers example documentation and licensing inputs.
docs/​verification_report/​module_verification_report.rst Provides quality-track verification-report exercise material.
docs/​template/​index.rst Explains the inherited module structure.
docs/​release_notes/​index.rst Organizes template release notes.
docs/​participants/​index.rst Provides the participant evidence index.
docs/​module/​security_mgt/​module_security_plan_fdr.rst Provides the security-plan review checklist.
docs/​module/​security_mgt/​module_security_package_fdr.rst Provides the security-package review checklist.
docs/​module/​security_mgt/​index.rst Organizes security-management documents.
docs/​module/​safety_mgt/​module_safety_plan_fdr.rst Provides the safety-plan review checklist.
docs/​module/​safety_mgt/​module_safety_package_fdr.rst Provides the safety-package review checklist.
docs/​module/​safety_mgt/​module_safety_analysis_fdr.rst Provides safety-analysis review checklists.
docs/​module/​safety_mgt/​index.rst Organizes safety-management documents.
docs/​module/​release/​release_note.rst Provides release-note exercise material.
docs/​module/​manuals/​user_manual.rst Provides user and integration documentation. Nit, 1 vote — L112: The dependency example names nonexistent target :component; reference the exported component_example library instead.
docs/​module/​manuals/​security_manual.rst Provides the security-manual template.
docs/​module/​manuals/​safety_manual.rst Provides the safety-manual template.
docs/​module/​manuals/​performance/​.gitkeep Preserves the performance documentation directory.
docs/​module/​manuals/​index.rst Organizes module manuals.
docs/​module/​manuals/​examples/​.gitkeep Preserves the manual examples directory.
docs/​module/​manuals/​config/​.gitkeep Preserves the configuration manual directory.
docs/​module/​manuals/​api_description/​.gitkeep Preserves the API documentation directory.
docs/​module/​index.rst Organizes module-level documentation.
docs/​index.rst Introduces the module and quick-start commands.
Nit, 3 votes — L114: Build instructions reference nonexistent root src/; use the actual score/ package tree.
Nit, 3 votes — L126: Use unit-test target //score/component_example:component_example_unit_tests, not a root src/ path.
Nit, 3 votes — L132: Root tests/ does not exist; name the actual component and feature integration-test targets under //score/component_example and //score/tests.
docs/​features/​security_planning/​index.rst Provides feature security-planning templates.
docs/​features/​security_analysis/​aou_requirements.rst Provides feature security-assumption templates.
docs/​features/​safety_planning/​index.rst Provides feature safety-planning templates.
docs/​features/​safety_analysis/​fmea.rst Provides the feature FMEA template.
docs/​features/​safety_analysis/​aou_requirements.rst Provides feature safety-assumption templates.
docs/​features/​index.rst Organizes feature documentation.
docs/​features/​architecture/​index.rst Provides feature architecture guidance.
docs/​components/​index.rst Provides the component documentation mount point.
CONTRIBUTION.md Adds inherited S-CORE contribution guidance.
BUILD Registers root tooling and documentation targets.
.yamlfmt Configures YAML formatting.
.vscode/​settings.json Configures documentation and Python editing.
.vscode/​extensions.json Recommends development extensions.
.pre-commit-config.yaml Configures formatting, licensing, and dependency checks.
.gitignore Excludes generated and local artifacts.
.github/​workflows/​on-pr.yml Runs pre-commit checks on pull requests.
.github/​workflows/​docs.yml Runs shared documentation CI.
.github/​workflows/​certificate.yml Checks completion and uploads certificates.
.github/​templatesyncignore.txt Defines template synchronization exclusions.
.github/​PULL_REQUEST_TEMPLATE/​improvement.md Adds an improvement pull-request template. Nit, 1 vote — L32: ../ISSUE_TEMPLATE/new is a repository-relative file path, not an issue-creation endpoint; use the issue chooser or a correct /issues/new?template=improvement.md URL.
.github/​PULL_REQUEST_TEMPLATE/​bug_fix.md Adds a bugfix pull-request template. Nit, 1 vote — L32: The relative ISSUE_TEMPLATE/new URL cannot open the Bugfix form; use the issue chooser or a proper repository issue-creation URL.
.github/​ISSUE_TEMPLATE/​training_finding.md Structures participant findings.
.github/​ISSUE_TEMPLATE/​training_completed.yml Records completed trainings.
.github/​ISSUE_TEMPLATE/​improvement.md Adds an improvement issue template. Moderate, 3 votes — L16: The preceding license comment prevents recognition of YAML front matter, hiding the template from the issue chooser; put metadata first and retain the license comment in the body.
.github/​ISSUE_TEMPLATE/​feedback.yml Collects training feedback.
.github/​ISSUE_TEMPLATE/​config.yml Configures issue-chooser guidance.
.github/​ISSUE_TEMPLATE/​bug_report.yml Collects training defect reports.
.github/​ISSUE_TEMPLATE/​bug_fix.md Adds a bugfix issue template. Moderate, 3 votes — L16: The preceding license comment prevents recognition of YAML front matter, hiding the template from the issue chooser; move metadata ahead of the comment.
.github/​CODEOWNERS Defines default review ownership.
.github/​actions/​gitlint/​action.yml Adds a containerized commit-message checker. Critical, 3 votes — L26: The published image lacks the required docker:// prefix, so the runner treats it as a Dockerfile path and fails before gitlint runs; use the Docker image URI.
.devcontainer/​run-tool Selects local, container, or Bazel tooling.
.devcontainer/​Dockerfile Pins the development container image.
.devcontainer/​devcontainer.json Configures the development container.
.bazelversion Pins the training’s Bazel version.
.bazelrc Configures registries, Java, and toolchain imports.

Review effort: Balanced

Comment thread .github/actions/gitlint/action.yml Resolved
Comment thread .github/ISSUE_TEMPLATE/bug_fix.md Resolved
Comment thread .github/ISSUE_TEMPLATE/improvement.md Resolved
Comment thread training/issues/15-task-6.2-6.3.md Resolved
Comment thread docs/index.rst Resolved
Comment thread docs/index.rst Resolved
Comment thread docs/index.rst Resolved

@masc2023 masc2023 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comments from Co-Pilot, I am not able to review 166 lines w/o help

…tart commands

Task 5.1-5.3: bringing the safety or security plan to template commit #198
breaks the build, because #198 also renames the user manual id and the
plans it brings refer to the new id. Checked by a clean build of each
track's documents at module_template 775aad3c: quality green, safety and
security fail with "linked need doc__mod_temp_module_name_user_manual not
found". With the id change in user_manual.rst taken along, both build
green. The task now says a template commit can change more than the
participant's document; SOLUTIONS.md records the expected reaction.

Task 6.2: the module has FDR checklists only for the safety and security
plans. Each track now names its checklist (ROLE_CHECKLIST); quality uses
the process description's gd_chklst__review_checklist.

docs/index.rst: the quick-start commands named //src and //tests, which do
not exist. Taken over from module_template #218. user_manual.rst: the
example dependency named a non-existent target :component; the library is
component_example (reported upstream as module_template#226).

Checked: every patch applies to a first commit with these changes; the task
issues of all three tracks render without open placeholders; pre-commit
passes; rm -rf _build && bazel run //:docs is green.

Not changed here, because the files are unchanged from module_template and
are fixed there: gitlint image prefix (#223), issue template front matter
(#224), pull request template links (#225).

Assisted-by: Claude Code (claude-opus-5-5)
@PandaeDo

Copy link
Copy Markdown
Contributor Author

@masc2023 thanks. The Copilot findings are addressed in 263bbfe:

Copilot finding Resolution
Task 5.1-5.3 breaks the build for safety/security Real. Template commit #198 also renames the user manual id, which the updated plans refer to. Checked by a clean build of each track at module_template 775aad3c. The task now says a template commit can change more than one document; training/SOLUTIONS.md has the expected reaction, built green.
Quality track has no FDR checklist Real. Each track now names its checklist; quality uses gd_chklst__review_checklist from the process description.
Quick-start commands use //src, //tests Real. Taken over from module_template #218.
User manual example target :component Real. Fixed here, reported as eclipse-score/module_template#226.
gitlint image without docker:// Real, but inherited unchanged from module_template and not called by any workflow. eclipse-score/module_template#223.
Issue templates bug_fix.md / improvement.md not shown Real, inherited. eclipse-score/module_template#224.
PR template links to ../ISSUE_TEMPLATE/new Real, inherited. eclipse-score/module_template#225.

The three inherited ones are fixed in module_template and reach this repository with the next template update, so the training does not diverge from its template.

What to review. Of the 136 files, 87 are byte-identical to module_template at f9532a9d (the parent of #198, which is the state the training starts from on purpose: task 5 brings it forward). What is actually new:

  • TRAINING.md, README.md: the participant entry point.
  • training/: setup script, task issues, defect patches, prepared review, solution key (SOLUTIONS.md), maintainer notes (README.md).
  • .github/ISSUE_TEMPLATE/ forms (feedback, bug report, training completed, training finding), .github/workflows/certificate.yml + .github/certificate/certificate.py.
  • docs/participants/index.rst, and the planted defects in the module safety plan, module security plan and module verification report (listed in SOLUTIONS.md, stage 5).
  • Tooling kept at the current S-CORE state rather than the snapshot: devcontainer v1.11.2, .devcontainer/run-tool, MODULE.bazel(.lock), score.bazelrc/score_toolchain.bazelrc.
  • Licensing: LICENSES/CC0-1.0.txt, REUSE.toml; AI disclosure headers.
  • Removed from the template copy: dependabot.yml, docs-publish, on-daily, on-pr_target, sync-template workflows.

To see only the difference from the template:

git remote add module_template https://github.com/eclipse-score/module_template.git
git fetch module_template
git diff --stat f9532a9d8a6fd079cce60f525616a0303df9f252 HEAD

The IP review is filed as IPLab #32847 (more than 1,000 lines).

Comment thread .github/ISSUE_TEMPLATE/bug_fix.md Outdated

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So all Issues here are not the ones in S-CORE, defined here https://github.com/eclipse-score/.github/tree/main/.github/ISSUE_TEMPLATE, so the training does not teach them, only in general to work with that issues, correct? If yes, may explain, or state that somewhere

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct: the training taught working with issues in general, not the S-CORE forms. Changed in 244d1ed: the training now carries copies of the organisation's Bug and Task forms from eclipse-score/.github (5_Bug.yml, 4_Task.yml at 8001e21a), and the tasks name which one to use. Organisation forms and issue types do not reach a copy in a participant's personal account, so the copy carries them itself; the only deviations are "(S-CORE form)" in the name and the removed type:, stated in their header. TRAINING.md, rule 2, explains this. The inherited bug_fix.md/improvement.md are removed here; for module_template I proposed the same in eclipse-score/module_template#224, so that the organisation's forms apply there too.

@masc2023

Copy link
Copy Markdown

@masc2023 thanks. The Copilot findings are addressed in 263bbfe:

Thanks for providing the help, but what I still missing is like a Quick-Starter, Getting-Started, what and why, purpose goals, and from that link to the files?

…issue forms

Review feedback on eclipse-score#2 (masc2023): a reviewer misses what the training is
for, whom it is for and what one can do afterwards, with links into the
files; and the issue templates are not the ones S-CORE uses.

README.md gets a "Purpose" section: why, for whom (quality, safety and
security roles; further tracks are planned), and a table per stage with
the learning goal, the task issues, the material and the section of
SOLUTIONS.md. Each goal was checked against the "Done when" of its tasks.

The training now uses copies of the organisation forms Bug and Task from
eclipse-score/.github (8001e21a) instead of its own "Training finding".
Organisation forms and issue types do not reach a copy in a personal
account, so the copy carries them; only "(S-CORE form)" in the name and the
removed `type:` deviate, as their header says. TRAINING.md rule 2 says so,
and tasks 1.3, 2.2-2.4 and 4.2 (defects: Bug) and 3.2 and 5.1 (open point,
template update: Task) name the form. training/README.md asks maintainers
to re-copy the forms before a release.

bug_fix.md and improvement.md, inherited from module_template, are removed:
GitHub does not recognise them, and their folder hides the organisation
forms. Deleting them is proposed for module_template in #224.

Checked: pre-commit passes; every patch applies to a first commit with
these changes; the task issues of all three tracks render; every file the
README links exists. The certificate is unaffected: it tells tasks from own
findings by the title, not by the form.

Assisted-by: Claude Code (claude-opus-5-5)
@PandaeDo

Copy link
Copy Markdown
Contributor Author

Add chapters to readme and training.md

@masc2023 masc2023 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Initial version, fine for now

@masc2023
masc2023 merged commit f18ae49 into eclipse-score:main Oct 30, 2026
3 checks passed
@PandaeDo
PandaeDo deleted the vohae_initial_contribution branch October 30, 2026 08:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants