Copyright (c) 2026 MindMesh Academy. All rights reserved. This content is proprietary and may not be reproduced or distributed without permission.

7.2. Quick Reference

Certification exams reward two kinds of knowledge, and only one of them is understanding. The other is a small set of arbitrary values — defaults, limits, precedence orders — that no amount of reasoning will recover if you never learned them. Everything below falls into that second category: the numbers GitHub chose, the order in which scopes win, and the pairs of features whose names suggest they are interchangeable when they are not. Each entry is developed properly somewhere in Phases 1 through 6; this is the compressed form for the last hour before the exam, when re-reading a phase is no longer practical and you simply need the values to be present in working memory.

🎯 Defaults and Numbers

FactValue
fail-fast defaulttrue (one failure cancels the matrix)
Matrix job cap256 jobs per workflow run
Job timeout default6 hours; workflow run max 35 days
Artifact/log retention default90 days (public repos; configurable)
Cache limit / eviction10 GB per repository; removed after 7 idle days
Secret size limit48 KB
Secret count limits1,000 org · 100 repo · 100 environment
workflow_dispatch inputsMaximum 25
Reusable workflow nesting10 levels; max 50 referenced
Composite action nesting10 levels
Required reviewersUp to 6; run waits up to 30 days
Scheduled workflow auto-disableAfter 60 days of repository inactivity
Minimum cron interval5 minutes (UTC, default branch only)
Passing score700 / 1000

🎯 Precedence and Scope

QuestionAnswer
Secret / variable precedenceEnvironment → Repository → Organization
env: precedenceStep → Job → Workflow
Policy layeringEnterprise → Organization → Repository (inner may only restrict)
Missing secret behaviorEmpty string, no error raised
Fork PR secretsNot delivered; token is read-only
Declaring permissions:Replaces defaults entirely — unlisted scopes are revoked

🎯 Confusable Pairs

ABDiscriminator
pull_requestpull_request_targetTarget runs in the base context with secrets and a write token
$GITHUB_ENV$GITHUB_OUTPUTEnv var for later steps vs. step output for steps.<id>.outputs
CacheArtifactEvictable speed-up vs. retained, downloadable, billed
Starter workflowReusable workflowCopied at creation (drifts) vs. resolved on every run
Composite actionReusable workflowSteps inside the caller's job (no runs-on) vs. its own jobs
DisableDeleteReversible state change vs. removing the file (history survives both)
GITHUB_TOKENPATEphemeral, repo-scoped, bot identity vs. long-lived, user-scoped
Runner labelsRunner groupsWhat matches the job vs. who may schedule on the fleet
GitHub-hostedSelf-hostedEphemeral VM vs. persistent machine (⚠️ not for public repos)
Tag pin @v1.2.3SHA pin @a1b2c3…Movable pointer vs. immutable bytes

🎯 Syntax You Must Recognize

on:
  workflow_dispatch:
    inputs:
      env: { type: choice, options: [dev, prod] }    # choice: dispatch only
  workflow_call:
    inputs:  { env: { type: string } }               # string/number/boolean only
    secrets: { token: { required: true } }

permissions: { contents: read, id-token: write }     # declaring ANY revokes the rest
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true                           # PRs yes, deploys no

jobs:
  call:
    uses: org/repo/.github/workflows/ci.yml@v2       # job-level, never a step
    secrets: inherit
  build:
    strategy:
      fail-fast: false
      matrix: { os: [ubuntu-latest], node: [20, 22] }
    steps:
      - run: echo "v=1.0" >> "$GITHUB_OUTPUT"        # NOT ::set-output (disabled 2023)
      - env:
          TITLE: ${{ github.event.pull_request.title }}
        run: echo "$TITLE"                           # injection-safe indirection

Remember: Event → workflow → job → fresh runner → steps. Nothing crosses a job boundary unless you send it deliberately.

Alvin Varughese
Written byAlvin Varughese
Founder18 professional certifications