{
  "uid": "cogitave.learn.open-your-first-pull-request.introduction",
  "kind": "moduleUnit",
  "href": "/modules/open-your-first-pull-request/introduction/",
  "title": "Introduction",
  "summary": "",
  "type": null,
  "products": [],
  "roles": [],
  "levels": [],
  "subjects": [],
  "headings": [
    "What a passing first contribution looks like",
    "What you will do"
  ],
  "source": "The earlier modules gave you the rules. This one is where you use them. You will\ntake a small change all the way to an open pull request that a reviewer - or an\nauditor - can trust, and you will do it the way every Cogitave contributor and\nagent does it.\n\nNothing here is new policy. It is the floor from\n[AGENTS.md](../../../../../AGENTS.md), the ruleset a repository inherits from the\nproject baseline, and the propose-only request lifecycle you already worked -\napplied to one concrete commit.\n\n## What a passing first contribution looks like\n\nFour things have to be true before your pull request is ready for review. None of\nthem is optional, and each is checked mechanically:\n\n| Requirement | Enforced by |\n| --- | --- |\n| The commit message is a Conventional Commit | commitlint, in the hook **and** in CI |\n| The commit is SSH-signed and shows as Verified | the org branch ruleset |\n| No secret is committed; files are formatted | pre-commit hooks, then CI |\n| Code changes ship with doc changes | the `docs-required` CI gate |\n\n> [!IMPORTANT]\n> You author and open the PR. You do **not** merge it. In this estate agents\n> propose and humans enact - merge, apply, and release are human gates\n> ([AGENTS.md](../../../../../AGENTS.md), non-negotiable rules 6-7). Opening the\n> PR is the finish line for this module.\n\n## What you will do\n\nThe next two units walk the two halves of the job. First you will write and sign\na single Conventional Commit. Then you will let the gates run, satisfy docs-as-code,\nand open the pull request. By the end you will be able to make a contribution that\npasses every gate on the first try, and know exactly which check is speaking when\none does not.\n",
  "partOf": "cogitave.learn.open-your-first-pull-request",
  "durationInMinutes": 3,
  "quiz": null
}