|
1 | 1 | name: mcode-trajectory-studio |
2 | 2 |
|
3 | | -# This Plugin carries three review rounds of confidentiality, containment and |
4 | | -# bounding fixes, and each round ended with the same finding from the reviewer: |
5 | | -# "current tests do not cover the reproduced cases". The three fixtures that should |
6 | | -# have caught them existed and were green. |
7 | | -# |
8 | | -# So this workflow does not re-run the repository's own `npm run check`, which |
9 | | -# already covers `scripts/validate.mjs` and the whole test tree on ubuntu. It adds |
10 | | -# the evidence that has been *claimed* rather than checked for this Plugin: |
11 | | -# |
12 | | -# contract The plugin-scoped gates: the release gates, then the egress contract |
13 | | -# suite that drives every tool and every route against the real |
14 | | -# projection instead of a stub store. The `/api/overview` 500 survived |
15 | | -# two rounds precisely because only stub stores exercised that path, so |
16 | | -# the stub-free suite is run as its own named step rather than folded |
17 | | -# into a count. |
18 | | -# suite The full Plugin suite on ubuntu, macos and windows. Cross-platform |
19 | | -# evidence was previously a hand-run claim; the previous hand-run had |
20 | | -# not covered three platform assumptions in the tests themselves. |
21 | | -# engines `tools/compat-matrix.mjs` under the documented Node floor, the lowest |
22 | | -# verified release and the current line, so the manifest's floor and |
23 | | -# verified range are asserted rather than described. On a release |
24 | | -# outside the verified range the only permitted skip is the FTS5 search |
25 | | -# test, and the tool fails if anything else is skipped. |
26 | | -# |
27 | | -# Scope is deliberately narrow: `paths:` filters this workflow to the Plugin plus |
28 | | -# this file, so it can never block an unrelated PR. See the note in ci.yml about |
29 | | -# why an unscoped "validate everything" job was removed there. |
30 | | - |
31 | 3 | on: |
32 | 4 | pull_request: |
33 | | - paths: |
34 | | - - 'plugins/weekbin/mcode-trajectory-studio/**' |
35 | | - - '.github/workflows/mcode-trajectory-studio.yml' |
36 | | - push: |
37 | | - branches: [main] |
38 | | - paths: |
39 | | - - 'plugins/weekbin/mcode-trajectory-studio/**' |
40 | | - - '.github/workflows/mcode-trajectory-studio.yml' |
41 | | - # Lets a maintainer, or this Plugin's author, run the same jobs outside a PR — |
42 | | - # which is how a github-hosted green check is captured on a fork whose |
43 | | - # fork-to-upstream PR cannot start Actions without maintainer approval. |
44 | 5 | workflow_dispatch: |
45 | 6 |
|
46 | 7 | permissions: |
47 | 8 | contents: read |
48 | 9 |
|
49 | 10 | jobs: |
50 | | - contract: |
51 | | - name: contract gates (ubuntu-latest, node 22) |
52 | | - runs-on: ubuntu-latest |
53 | | - timeout-minutes: 20 |
54 | | - defaults: |
55 | | - run: |
56 | | - working-directory: plugins/weekbin/mcode-trajectory-studio |
57 | | - steps: |
58 | | - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b18 # v7.0.1 |
59 | | - persist-credentials: false |
60 | | - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 |
61 | | - with: |
62 | | - node-version: 22 |
63 | | - # No `npm ci`: the Plugin ships zero dependencies and no build step, which is |
64 | | - # itself part of what the release gates check. |
65 | | - - name: release gates (version, engine claims, byte units, doc anchors, egress bounds) |
66 | | - run: node tools/release-gates.mjs |
67 | | - - name: every tool and route, driven against the real projection |
68 | | - run: node --test test/egress-contract.test.mjs |
69 | | - # The browser half of this harness is manual by nature and stays out of CI. |
70 | | - # `--smoke` is the part a machine can judge, over a real loopback socket: the |
71 | | - # panel binds, the document is served hardened, the capability is required and |
72 | | - # sufficient, and the planted credential does not reach the wire. Removing the |
73 | | - # capability check makes this step fail, which is how it was verified. |
74 | | - - name: panel smoke over a real socket |
75 | | - run: node tools/panel-e2e.mjs --smoke |
76 | | - |
77 | | - suite: |
78 | | - name: suite (${{ matrix.os }}, node 22) |
79 | | - runs-on: ${{ matrix.os }} |
80 | | - timeout-minutes: 25 |
81 | | - strategy: |
82 | | - fail-fast: false |
83 | | - matrix: |
84 | | - os: [ubuntu-latest, macos-latest, windows-latest] |
85 | | - defaults: |
86 | | - run: |
87 | | - working-directory: plugins/weekbin/mcode-trajectory-studio |
88 | | - steps: |
89 | | - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b18 # v7.0.1 |
90 | | - persist-credentials: false |
91 | | - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 |
92 | | - with: |
93 | | - node-version: 22 |
94 | | - # The Plugin suite creates and removes real temporary directories and opens |
95 | | - # real SQLite projections, so it is serialised: the Windows jobs fail with |
96 | | - # EBUSY when a fixture is unlinked while SQLite still holds the file. |
97 | | - - name: plugin suite |
98 | | - shell: bash |
99 | | - run: node --test --test-concurrency=1 'test/*.test.mjs' 2>&1 | tee trajectory-suite.tap |
100 | | - - name: preserve suite output, including failures |
101 | | - if: always() |
102 | | - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 |
103 | | - with: |
104 | | - name: trajectory-suite-${{ matrix.os }} |
105 | | - path: plugins/weekbin/mcode-trajectory-studio/trajectory-suite.tap |
106 | | - if-no-files-found: warn |
107 | | - retention-days: 7 |
108 | | - |
109 | | - engines: |
110 | | - name: engines (node ${{ matrix.node }}) |
| 11 | + probe: |
111 | 12 | runs-on: ubuntu-latest |
112 | | - timeout-minutes: 25 |
113 | | - strategy: |
114 | | - fail-fast: false |
115 | | - matrix: |
116 | | - # 22.13.0 is the floor: node:sqlite exists, FTS5 does not. The tool requires |
117 | | - # that the FTS5 search test is the *only* skip there. |
118 | | - # 22.19.0 is the lowest release in the verified range, where FTS5 is present. |
119 | | - # 24.x is the line mcode's own engines allow today. |
120 | | - node: ['22.13.0', '22.19.0', '24'] |
121 | | - defaults: |
122 | | - run: |
123 | | - working-directory: plugins/weekbin/mcode-trajectory-studio |
124 | 13 | steps: |
125 | 14 | - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b18 # v7.0.1 |
126 | | - persist-credentials: false |
127 | | - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 |
128 | | - with: |
129 | | - node-version: ${{ matrix.node }} |
130 | | - - name: assert the suite behaves as the manifest claims for this release |
131 | | - run: node tools/compat-matrix.mjs |
| 15 | + - run: node --version |
0 commit comments