Skip to content

[documentation-writing-alignment] State module reference rules with precise technical prose #556

Description

Context and request

Contributors need precise reference text that separates required module and test rules from general advice. This delivery owns six files under docs/content/reference/: dependencies.md, framework-test-ids.md, guidance-scripts.md, module-development-foundations.md, module-types.md, and test-specification.md.

Evidence and expected result

module-types.md says modules of the same kind should "feel the same to use", calls integration modules the "PowerShell face" of a service, and says conversions "go through" a "pivot". test-specification.md says "The goal is to ensure consistency" and "This ensures our tests are structured, maintainable, and adhere to best practices." These phrases conceal the concrete model or describe an intent rather than the rule. Use direct technical descriptions without changing required behavior or the intended no-mocks policy.

Apply MSX Documentation Model, Natural Language, Writing Guide, and its applicable reference/standard templates. Use official STEMG guidance and Issue 9 where rule or dictionary details matter.

Acceptance criteria

  • Every assigned file has a manual changed/no-change/blocked result tied to actual text.
  • Prose uses clear, present-tense en-US descriptions and direct instructions, without metaphors, vague assurances, or obsolete status.
  • Exact framework IDs, dependency/version constraints, paths, names, samples, test hierarchy, technical contracts, and normative force remain unchanged.
  • Normative rules do not become claims of existing CI enforcement without evidence. Substantive contradictions remain explicit and do not trigger runtime changes.
  • Existing headings and anchors remain stable where possible; necessary link repairs are complete.
  • The focused draft PR carries before/after evidence, small commits, and relevant existing Markdown/link/site check results. No new tooling or dependency is introduced.

Technical decisions

Other reference files and all framework specification pages remain with existing release, repository, and trigger proposal owners. Test fixture documentation is functional input and is excluded. #551 owns no documentation. This change is prose-only and does not add or modify tests or claim a framework upgrade.

Pre-edit review, source criteria, checks, and exclusions: #556 (comment). The no-mocks prohibition conflicts with the reserved PowerShell module standard's unit-test mocking rule. This delivery preserves both passages' normative force and leaves that policy decision unresolved.

The first coherent commit is 8d148a49fa24915dc6bbb5b5acd92bd93e27c2f9 in draft PSModule/Process-PSModule#566. The non-closing policy exception is PSModule/Process-PSModule#563.

Final delivery evidence: #556 (comment). The pushed head is 5ee3e9393c6bd47f78def6b5841cf22ecacad86f. All six pages have a final manual review: five changed, and dependencies.md remains unchanged. Local checks pass; all 132 baseline HTML IDs remain and all 41 rendered local links resolve. Final-head GitHub checks report 22 passed and the expected Docs Publish skip. The requested final-head review is approved with no inline comments. The PR remains in draft; #563 remains an unresolved, non-closing policy exception.

Implementation plan

  • Read all six files, relevant source rules, and repository evidence; record acceptance expectations before editing.
  • Establish existing checks and identify any pre-existing failures.
  • Replace confirmed module-type metaphors, preserve the conversion anchor, push the first coherent commit, and open the focused draft PR.
  • Clarify test-specification.md while preserving the sample, hierarchy, recommendations, and requirements; push the focused commit.
  • Clarify confirmed prose in framework-test-ids.md, guidance-scripts.md, and module-development-foundations.md in a small commit.
  • Compare required rules, examples, identifiers, and links before and after the edit.
  • Run the applicable existing checks and record all acceptance evidence and limitations in the issue and draft PR; leave the PR in draft.

Activity

  1. MariusStorhaug commented on Nov 4, 2026

    @MariusStorhaug
    MemberAuthor

    Pre-edit review and acceptance evidence

    The six assigned reference pages were read in full at PSModule/Process-PSModule@64ffb1d87f86bd5d487891fdb140b78385a00531. The worktree was clean. The open-PR check inspected 10 PRs and found no overlap with the six assigned paths.

    Assigned path under docs/content/reference/ Actual baseline text Decision and acceptance expectation
    dependencies.md "Each is versioned independently, and the main workflow pins versions explicitly." No prose change is needed. The dependency table states concrete roles. Preserve every dependency, URL, and version statement.
    framework-test-ids.md "Run by the ... job"; "Verifies that the built module imports cleanly." Name the jobs as the actors. Describe import validation as an import without errors. Preserve all IDs, skip examples, category names, paths, and requirement strength.
    guidance-scripts.md "They are framework learning assets"; "import the complete current file from its Git blob into this directory" State that these are reference scripts, not module source. Name guidance/ as the script destination instead of the ambiguous "this directory". Preserve the complete-file import instruction and every script name.
    module-development-foundations.md "conventions that the framework supports and validates"; "framework wiring" Describe the conventions without claiming that the framework validates every rule. Replace "wiring" with workflow configuration. Preserve the five linked reference pages and their purpose.
    module-types.md "feel the same to use"; "PowerShell face"; "common pivot" State the shared conventions, service interface, and intermediate PowerShell object model directly. Preserve the transport choices, Context requirements, conversion directions, command patterns, and examples. Replace the metaphorical conversion heading but retain its legacy anchor.
    test-specification.md "The goal is to ensure consistency"; "This ensures our tests are structured, maintainable, and adhere to best practices." State the hierarchy, inputs, and coverage requirements directly. Use active descriptions or direct instructions. Preserve the complete sample, examples, nesting, real-input recommendation, complete-coverage requirement, and no-mocks prohibition. Do not claim CI enforcement.

    Source-based criteria

    • MSX Documentation Model at the pinned revision: present-tense, declarative resource documentation; delivery evidence belongs in the issue and PR; a contract does not prove CI enforcement.
    • Natural Language: en-US, concrete nouns, active verbs, precise obligations, and no idioms or change-history prose.
    • Writing Guide: preserve technical meaning, identifiers, native syntax, and normative requirements; do not infer full STE conformance from automated checks.
    • Markdown, Documentation, and the reference and standard templates: preserve lookup and rule purposes, native syntax, and valid links. Do not add empty template sections.
    • Official STE description, FAQ, and Issue 9: distinguish descriptive text from instructions; use active voice and direct instructions; preserve technical terms. The local Issue 9 PDF has MD5 9c720341c350ed77943b2c73d01c716f, which matches the official Zenodo record. Rules 1.1-1.3, 3.2, 3.6, 5.1-5.4, 6.1-6.5, and 9.1-9.4 were consulted in the local extraction, together with relevant dictionary material. The PDF and extraction stay local.

    Checks established before editing

    • npx --no-install markdownlint-cli2 --config .github\linters\.markdown-lint.yml docs\content\reference\dependencies.md docs\content\reference\framework-test-ids.md docs\content\reference\guidance-scripts.md docs\content\reference\module-development-foundations.md docs\content\reference\module-types.md docs\content\reference\test-specification.md: passed; six files, zero issues; markdownlint-cli2 0.24.0, markdownlint 0.42.0.
    • From docs\, zensical build --clean: passed; "No issues found". An initial attempt to redirect output with --site-dir failed because this Zensical CLI does not support that option. The unmodified repository command passed. No tool was installed.
    • A whitespace-normalized text assertion confirmed all five quoted acceptance failures in module-types.md and test-specification.md before editing.
    • No repository-local Test-DocumentationLink.ps1 or Test-CrossRepositoryLink.ps1 exists. The site build and manual link review are applicable; they do not prove external URL availability.

    Policy gap and scope exclusions

    The baseline test specification says: "No Mocks: We do not use mocks in tests."

    The reserved PowerShell module standard says: "Unit tests mock boundaries owned by the module, not third-party APIs or SDKs directly."

    These policies conflict. This prose delivery preserves the no-mocks prohibition and does not change the reserved page, select a testing policy, or claim runtime enforcement.

    All unassigned reference pages remain read-only, including powershell-module-standard.md, repository-standard.md, versioning.md, workflow-inputs.md, pipeline-stages.md, settings.md, and scenario-matrix.md. All specification pages, guides, indexes, skills, source code, native help, tests, test-fixture Markdown, configuration, and site design remain excluded. No cross-owner link edit is expected; the conversion heading's legacy anchor is retained.

    This delivery follows the pinned Task and PR formats. The PR stays in draft. It does not merge, enable auto-merge or Agent merge, introduce tools or dependencies, or delegate work.

  2. MariusStorhaug commented on Nov 4, 2026

    @MariusStorhaug
    MemberAuthor

    The first coherent prose commit is pushed in draft #566. Module-type metaphors are replaced, and the previous conversion anchor remains valid. Markdownlint, the site build, and the six-page HTML-ID comparison pass. The remaining assigned prose edits stay in the same draft. The mock-policy conflict is tracked as the non-closing exception #563.

  3. MariusStorhaug commented on Nov 4, 2026

    @MariusStorhaug
    MemberAuthor

    Commit b158a5312295ec0271c6d967aca24bd81b3d6772 is pushed to the draft. The Pester hierarchy uses direct instructions, and vague coverage assurances are removed. A baseline comparison confirms that the complete Pester sample and hierarchy headings are unchanged. The no-mocks prohibition, real-input recommendation, and full-coverage requirement retain their force. Markdownlint and whitespace checks pass. The contradiction remains open in #563.

  4. MariusStorhaug commented on Nov 4, 2026

    @MariusStorhaug
    MemberAuthor

    Commit 5ee3e9393c6bd47f78def6b5841cf22ecacad86f is pushed to the draft. The last slice names test jobs as actors, states the module-import assertion as a no-throw check, identifies guidance/ as the script destination, and separates reference conventions from enforcement claims. All six pages have a final manual review. Five pages changed; dependencies.md remains unchanged. All baseline-generated HTML IDs remain, and 41 rendered local links and fragments resolve. Source-code test rows, IDs, skip examples, dependency text, script table, REST mapping, command patterns, Pester sample, hierarchy, and link targets retain their checked baseline content. Local checks pass; the final-head GitHub checks and explicitly requested review are in progress. #563 remains a non-closing policy exception.

  5. MariusStorhaug commented on Nov 4, 2026

    @MariusStorhaug
    MemberAuthor

    Module reference prose delivery

    The focused draft PSModule/Process-PSModule#566 is pushed at 5ee3e9393c6bd47f78def6b5841cf22ecacad86f. It delivers the prose scope of PSModule/Process-PSModule#556. The PR remains open and in draft. No merge, auto-merge, or Agent merge action was taken.

    The immutable comparison is 64ffb1d87f86bd5d487891fdb140b78385a00531 to 5ee3e9393c6bd47f78def6b5841cf22ecacad86f. The remote branch and PR head both match the delivered SHA. The branch has three small commits:

    Commit Result
    8d148a49fa24915dc6bbb5b5acd92bd93e27c2f9 Module-type conventions use concrete technical descriptions. The draft PR was opened after this first coherent commit.
    b158a5312295ec0271c6d967aca24bd81b3d6772 The test specification states its hierarchy and rules without vague assurances.
    5ee3e9393c6bd47f78def6b5841cf22ecacad86f Reference text names test jobs, explains the import check, and identifies the script maintenance destination.

    Open-PR ownership was rechecked immediately before each commit. Those checks inspected 11, 14, and 16 open PRs, respectively. No other PR owned an assigned path.

    Complete reviewed scope

    All six assigned pages were read in full before editing and after the final edits.

    Exact path Result Manual review evidence
    docs\content\reference\dependencies.md Reviewed; no change Dependency roles, links, and the independent-version statement are direct descriptions. The baseline and final Git blob are both 04e3e15b239a7e9390bed9d91e043d70ed2ce5bf.
    docs\content\reference\framework-test-ids.md Reviewed; changed Jobs are the actors. The module-import description states the existing no-throw assertion. Source-code test rows, IDs, categories, skip examples, paths, and module-test names are unchanged.
    docs\content\reference\guidance-scripts.md Reviewed; changed Scripts are reference scripts, not module source. The complete-file import instruction names guidance/ as the destination. The script table and environment caution remain.
    docs\content\reference\module-development-foundations.md Reviewed; changed The page describes the conventions without a blanket enforcement claim. The five linked reference pages remain.
    docs\content\reference\module-types.md Reviewed; changed Service commands, transport choices, Context requirements, and the intermediate object model replace metaphors. Public names, examples, verb patterns, settings obligations, and both conversion directions remain.
    docs\content\reference\test-specification.md Reviewed; changed The hierarchy uses direct instructions. The no-mocks prohibition, real-input recommendation, complete-coverage requirement, hierarchy, naming examples, and complete Pester sample retain their meaning.

    The exact changed-path set is the five rows marked "changed". There are no other repository changes.

    Excluded scope

    The complete machine-readable inventory is the session artifact reference-path-scope.json. It lists all five reviewed/changed paths, the one reviewed/no-change path, and every one of the 330 excluded tracked paths. No excluded tracked path changed.

    The complete excluded reference-page list is:

    • docs\content\reference\pipeline-stages.md
    • docs\content\reference\powershell-module-standard.md
    • docs\content\reference\repository-standard.md
    • docs\content\reference\scenario-matrix.md
    • docs\content\reference\settings.md
    • docs\content\reference\versioning.md
    • docs\content\reference\workflow-inputs.md

    All specification pages remain excluded:

    • docs\content\specification\design.md
    • docs\content\specification\index.md
    • docs\content\specification\principles-and-practices.md
    • docs\content\specification\spec.md

    All other tracked paths are excluded. This includes guides, getting-started pages, indexes, glossary and module pages, plugin skills, source code, native help, tests, test-fixture Markdown, configuration, site design, README files, and guidance-script source. The functional fixture Markdown is not a writing target. #551 remains outside this delivery.

    Acceptance evidence

    The pre-edit evidence records actual text and acceptance expectations before any reference edit.

    Before Delivered text or result Acceptance basis
    "feel the same to use" "This page defines additional conventions for each module type." A direct, present-tense statement replaces subjective intent.
    "PowerShell face" "Integration modules provide PowerShell commands for an external service." A concrete interface replaces a metaphor.
    "common pivot" The neutral object model is the "intermediate representation"; two direct instructions explain conversion between formats. The object model, conversion commands, and both directions remain explicit.
    "The goal is to ensure consistency" "This specification defines the Pester test hierarchy, input guidance, and coverage requirements for PowerShell functions." The page states its contract instead of a desired quality.
    "This ensures our tests are structured, maintainable, and adhere to best practices." "The example groups Get-Uri tests under the Uri module and uses separate contexts for direct and pipeline input." An observable description replaces an unsupported assurance.
    "Run by the ... job"; "imports cleanly" The named jobs run the tests. Import validation checks that an import "does not throw an error". Active descriptions match the existing Should -Not -Throw assertion rather than claiming more enforcement.
    "conventions that the framework supports and validates"; "framework wiring" The pages "define repository, source, test, and release conventions"; the table says "workflow configuration". Guidance is distinct from proof of implementation or enforcement.
    "framework learning assets"; "into this directory" "These scripts are not Process-PSModule module source"; the import destination is guidance/. The role and destination are explicit. The published-set condition, complete-file import, and content-preservation instructions remain.

    The conversion heading is "Conversions use the neutral object model". An explicit HTML anchor preserves #the-neutral-object-is-the-pivot. Both that anchor and #conversions-use-the-neutral-object-model resolve in the generated site. No cross-owner link change is required.

    Authoritative writing sources

    The MSX source revision is fixed at 1b0d4893c8fefabe604d04393068a8ff6f848082:

    • Documentation Model: evergreen resource documentation, one fact in one place, and delivery evidence in issues and PRs.
    • Natural Language: en-US, concrete nouns, active verbs, precise obligations, and no idioms or change-history prose.
    • Writing Guide: preserve technical meaning, identifiers, native syntax, and normative requirements.
    • Markdown and Documentation: preserve valid links, native samples, and the purpose of each page.
    • Reference and standard templates: retain lookup and rule content without empty template sections.
    • Task format and PR format: keep the executable plan in the delivery leaf and supporting evidence in the PR's Technical details.

    The official STE description, FAQ, and ASD-STE100 Issue 9 were available. The review consulted rules 1.1-1.3, 3.2, 3.6, 5.1-5.4, 6.1-6.5, and 9.1-9.4 and relevant dictionary material. The applicable practices include approved technical terminology, active voice, imperative instructions, short sentences, one topic per paragraph, and consistent wording.

    The supplied PDF's MD5 is 9c720341c350ed77943b2c73d01c716f, which matches the official Zenodo record. The PDF and extraction stay local and read-only. This delivery does not claim complete STE conformance or certification. Lint and sentence lengths are not substitutes for the full rules and dictionary.

    Validation commands and results

    npx --no-install markdownlint-cli2 --config .github\linters\.markdown-lint.yml docs\content\reference\dependencies.md docs\content\reference\framework-test-ids.md docs\content\reference\guidance-scripts.md docs\content\reference\module-development-foundations.md docs\content\reference\module-types.md docs\content\reference\test-specification.md
    git --no-pager diff 64ffb1d87f86bd5d487891fdb140b78385a00531 HEAD --check
    Push-Location -LiteralPath docs
    zensical build --clean
    Pop-Location
    gh pr checks 566 --repo PSModule/Process-PSModule
    Check Result
    Six-file Markdown lint Passed before editing and at the final head: six files, zero issues. markdownlint-cli2 0.24.0; markdownlint 0.42.0.
    Whitespace check Passed against the immutable baseline and final head.
    Existing Zensical site build Passed before editing and after the final edit: "No issues found". The exact final import-validation text is present in the generated HTML.
    Technical invariant review with inline Python standard-library checks Passed. Front matter, link targets, source-code test rows, IDs, skip comments, module-test names, guidance table, REST mapping, command patterns, identifiers, Pester sample, hierarchy, and test naming examples retain their checked baseline content. All five original prose acceptance failures are absent.
    Rendered local link and anchor review with HTMLParser Passed. All 132 baseline HTML IDs remain across the six pages. All 41 rendered local article links and fragments resolve. Both conversion anchors resolve.
    Complete tracked-path scope check Passed. Five changed paths, one reviewed/no-change path, 330 excluded paths, zero excluded changes.
    Final-head GitHub checks 22 passed; one skipped. The Docs Publish job is skipped for a PR, as specified by the existing workflow. No checks are pending or failing.
    Explicit final-head review Approved at 5ee3e9393c6bd47f78def6b5841cf22ecacad86f; no inline comments.

    An initial site-build attempt with --site-dir failed because the installed CLI does not support that option. The unmodified repository command passed. No tool or dependency was installed or added. No repository-local Test-DocumentationLink.ps1 or Test-CrossRepositoryLink.ps1 exists. External URL availability is not asserted. Runtime Pester tests were not run because no executable source or sample changed.

    Policy exception and blockers

    PSModule/Process-PSModule#563 owns the unresolved testing-policy contradiction:

    • The baseline test specification says: "No Mocks: We do not use mocks in tests."
    • The reserved powershell-module-standard.md#tests says: "Unit tests mock boundaries owned by the module, not third-party APIs or SDKs directly."

    The delivered test specification says: "No Mocks: Do not use mocks in tests." The prohibition is not weakened. The reserved page is unchanged. This PR does not select a testing policy, resolve the Bug, or claim runtime enforcement.

    There is no blocker to this focused prose draft. The policy exception remains open. No cross-owner link change is required.

    The scoped issue-convergence search covered the documentation-writing delivery leaves and open issues whose bodies name module-types or test-specification. #479 requires data-module audits, #483 requires a resilience contract, #338 requires DSC support, and #471 requires dependency-versioning guidance. This prose diff does not deliver those outcomes. Only #556 is a closing reference; #563 is a non-closing exception.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions