Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
353 commits
Select commit Hold shift + click to select a range
f703b4e
docs(windsurf): plan bounded protected-config comparison
777genius Oct 27, 2026
370be21
test(windsurf): diagnose protected config without accepting mutation
777genius Oct 27, 2026
443fa8d
docs(project): record owner deferral of VS Code completion
777genius Oct 27, 2026
015ee1b
docs(gemini): plan exact observed refresh diagnostic
777genius Oct 27, 2026
20ad47b
test(gemini): admit exact measured skills refresh diagnostic
777genius Oct 27, 2026
ee1bbcf
docs(gemini): plan measured call signature and wire identity
777genius Oct 27, 2026
c887f66
test(gemini): bind measured call signature to exact wire identity
777genius Oct 27, 2026
9dba4d0
docs(qoder): plan exact preserved original log link
777genius Oct 27, 2026
ccd9dc9
test(qoder): preserve exact contained original log link
777genius Oct 27, 2026
5a3ab87
docs: plan genuine Kimi observer host marker handoff
777genius Oct 27, 2026
705fa42
test: forward genuine hosted markers to Kimi observer
777genius Oct 27, 2026
1a74648
docs: plan exact Gemini native terminal diagnostic tuple
777genius Oct 27, 2026
9f81687
test: admit exact measured Gemini terminal diagnostic
777genius Oct 27, 2026
52e297e
docs(grok): plan bounded documented custom-provider observation
777genius Oct 27, 2026
005e5b8
test(grok): capture documented custom-provider startup boundary
777genius Oct 27, 2026
6f00186
test(grok): close escaped JSONL credential capture and validate provider
777genius Oct 27, 2026
cef30c1
docs: plan nonmutating Kimi installed profile context
777genius Oct 27, 2026
b7235fb
test: reuse held existing profile for Kimi observers
777genius Oct 27, 2026
ae8a113
docs(windsurf): plan finite documented config field diagnostic
777genius Oct 27, 2026
4e7c3e2
test(windsurf): classify documented added config fields privately
777genius Oct 27, 2026
a618657
docs(copilot): plan bounded native config prefix diagnosis
777genius Oct 27, 2026
9cd2e49
test(copilot): observe bounded config comment prefix without adoption
777genius Oct 27, 2026
6d419a2
docs: plan exact Kimi observer identity role parity
777genius Oct 27, 2026
499a694
test: preserve Kimi observer identity role parity
777genius Oct 27, 2026
5a0eab3
docs: plan strict Gemini MCP stderr inventory channel
777genius Oct 27, 2026
d94270c
test: retain strict Gemini MCP stderr inventory channel
777genius Oct 27, 2026
02e645b
docs: plan actual Kimi snapshot seam and finite refusal
777genius Oct 27, 2026
1c0dcd1
test: exercise Kimi snapshot adapter and finite context refusal
777genius Oct 27, 2026
26402b6
docs: freeze reviewed complete Cline lifecycle capture plan
777genius Oct 27, 2026
2c12430
docs: ground Cline repeated removal in strict runner exit normalization
777genius Oct 27, 2026
52ebd09
test: capture complete source-bound Cline project lifecycle
777genius Oct 27, 2026
6dedead
docs: record verified Cline lifecycle capture candidate
777genius Oct 27, 2026
083928a
docs(qoder): plan bounded original profile delta diagnostic
777genius Oct 27, 2026
94e0c6b
test(qoder): diagnose exact original profile delta
777genius Oct 27, 2026
13135dc
docs: plan pinned Gemini explicit env fact expectations
777genius Oct 27, 2026
aaf2156
test: match pinned Gemini explicit env probe facts
777genius Oct 27, 2026
47d6032
docs(copilot): plan finite config suffix member diagnostics
777genius Oct 27, 2026
e9f4173
test(copilot): observe bounded private config suffix member deltas
777genius Oct 27, 2026
8b2989d
docs(copilot): record exact suffix diagnostic verification
777genius Oct 27, 2026
cf0e9ac
docs: recover approved Cline complete JSON privacy plan
777genius Oct 27, 2026
1bea34d
fix: distinguish complete numeric JSON in Cline privacy scans
777genius Oct 27, 2026
0f56d71
docs: record recovered Cline privacy validation
777genius Oct 27, 2026
e725917
docs: plan exact Cline owned skill absence fault
777genius Oct 27, 2026
7e9653a
test: inject absence of the exact owned Cline skill directory
777genius Oct 27, 2026
e5ec161
docs: record exact Cline absence fixture validation
777genius Oct 27, 2026
ccb529d
docs: restore reviewed private Kimi fixture root plan
777genius Oct 27, 2026
91a3c54
test: author exact private Kimi fixture root before baselines
777genius Oct 27, 2026
628bfcd
docs: restore exact Gemini untrusted skills plan
777genius Oct 27, 2026
5c6f7a7
test: restore exact Gemini untrusted skills diagnostic
777genius Oct 27, 2026
cbdf8a3
docs: restore exact Gemini startup metrics plan
777genius Oct 27, 2026
2ff752a
test: admit only exact measured Gemini startup metrics tuple
777genius Oct 27, 2026
52afa89
docs(windsurf): recover approved unknown config observation plan
777genius Oct 27, 2026
7a15910
test(windsurf): recover reviewed unknown config hash observation
777genius Oct 27, 2026
ed70a87
docs(qoder): recover reviewed other profile detail priority plan
777genius Oct 27, 2026
faf2fef
test(qoder): prioritize measured other profile changes
777genius Oct 27, 2026
c316dd4
docs: recover Grok observation and config diagnostic plans
777genius Oct 27, 2026
84d7ec3
test: recover bounded Grok route and nested privacy observations
777genius Oct 27, 2026
e4e08e2
docs: plan source-derived Copilot first launch metadata
codex Oct 27, 2026
f60236f
docs(windsurf): plan bounded component listing first capture
Oct 27, 2026
9b8ddc5
test(copilot): author held first-launch metadata before native startup
codex Oct 27, 2026
c9967fc
docs: plan measured Cline complete-cycle qualification
codex Oct 27, 2026
3f9b270
test: qualify the measured complete Cline native cycle
codex Oct 27, 2026
e199b45
docs: record reviewed Cline complete-cycle validation
codex Oct 27, 2026
20a4c05
docs(windsurf): bind preauthored native writer locks
Oct 27, 2026
c01f207
test(windsurf): capture strict isolated component listings
Oct 27, 2026
ae452ad
docs(windsurf): record exact first-capture validation
Oct 27, 2026
cb0fd25
docs: plan exact Kimi native skill and turn expectations
codex Oct 27, 2026
33b5d73
test: bind Kimi native user skills to exact plugin namespace
codex Oct 27, 2026
659278e
test: require the Kimi fresh-session first turn identity
codex Oct 27, 2026
03d7c24
docs: record exact Kimi expectation source and check closure
codex Oct 27, 2026
35ce606
test(grok): observe bounded original TOML mutation
codex Oct 27, 2026
70c7ddc
docs: plan the full Gemini native user and project cycle
codex Oct 27, 2026
88db6fc
docs: correct the finite Gemini subprocess count
codex Oct 27, 2026
4943368
docs: bind Gemini cycle to pinned builtin skill catalog
codex Oct 27, 2026
2bc2ec8
docs: bound Gemini local containment capability control
codex Oct 27, 2026
0894613
test: capture complete Gemini user and project lifecycle
codex Oct 27, 2026
fa7b9db
docs: record reviewed Gemini cycle first-capture checks
codex Oct 27, 2026
753936d
docs(grok): record exact mutation diagnostic validation
codex Oct 27, 2026
9c8c747
test(windsurf): preserve selectable legacy startup capture
codex Oct 27, 2026
090b2ec
docs(windsurf): record legacy startup entry validation
codex Oct 27, 2026
81bb84d
docs(qoder): plan held file delta detail priority
codex Oct 27, 2026
9b2f546
test(qoder): prioritize held file profile delta details
codex Oct 27, 2026
1973a95
docs(qoder): record exact held-file priority validation
codex Oct 27, 2026
a412ba5
Merge pull request #525 from 777genius/feat/project-native-cline-2026…
777genius Oct 27, 2026
b5f2fc9
test(grok): author empty-profile migration sentinel
codex Oct 27, 2026
b695591
test(gemini): resolve reviewed native fixture lint findings
codex Oct 27, 2026
dcae254
test(gemini): prove exact installer temporary parent closure
codex Oct 27, 2026
4b42010
test(kimi): validate the exact repeated-add direct result
codex Oct 27, 2026
c6c5857
merge: align Grok E2E with qualified Cline program base
codex Oct 27, 2026
e74f11f
merge: align Gemini E2E with qualified Cline program base
codex Oct 27, 2026
a58aba7
test(kimi): retain finite facts at approval refusal
codex Oct 27, 2026
29f93ab
Merge commit 'a412ba5e137fdcb7e004393229b323211ed746e1' into fix/kimi…
codex Oct 27, 2026
c0b25d9
docs: normalize Gemini diagnostic plan ending
codex Oct 27, 2026
b2bb2b7
docs(kimi): record current-base inert validation
codex Oct 27, 2026
6629857
test(copilot): preserve native fixture contracts under root lint
codex Oct 27, 2026
ad568a5
test(copilot): validate measured installed-tool readiness without lif…
codex Oct 27, 2026
42f003b
docs(copilot): plan exact native message role membership
codex Oct 27, 2026
0889967
test(copilot): require exact native message role labels
codex Oct 27, 2026
52314ed
docs(copilot): record exact role regression and review gates
codex Oct 27, 2026
cde66af
docs(copilot): correct exact role review provenance during reconcilia…
codex Oct 27, 2026
2ab933c
Merge current project base after Cline lifecycle qualification
codex Oct 27, 2026
5aec457
test(copilot): bind readiness source and installed identities exactly
codex Oct 27, 2026
ca88f79
Merge commit 'a412ba5e137fdcb7e004393229b323211ed746e1' into fix/qode…
codex Oct 27, 2026
189e00d
docs(copilot): remove inherited suffix-plan trailing blank line
codex Oct 27, 2026
ff5c144
test(qoder): author bounded anonymous fixture metadata
codex Oct 27, 2026
39f1267
docs(qoder): record anonymous metadata fixture validation
codex Oct 27, 2026
2b63d44
docs(qoder): approve exact auth membership correction
codex Oct 27, 2026
b42ff69
test(qoder): reject unknown auth members before baseline
codex Oct 27, 2026
83dd06d
test(qoder): simplify exact member refusal predicate
codex Oct 27, 2026
89321cb
docs(qoder): record verified auth membership regression
codex Oct 27, 2026
24ffbce
docs(copilot): record approved user registration observation plan
codex Oct 27, 2026
d0d0e2c
docs(grok): approve bounded origin route observation
codex Oct 27, 2026
be852ae
test(grok): retain exact origin route refusal evidence
codex Oct 27, 2026
a1af0da
docs(grok): record origin diagnostic reviews and validation
codex Oct 27, 2026
970b8d6
docs(kimi): approve explicit scoped repair selection plan
codex Oct 27, 2026
e113f00
test(kimi): reproduce intact project repair selection loss
codex Oct 27, 2026
f4aa9ad
docs(kimi): approve finite approval polling refusal diagnostic
codex Oct 27, 2026
8311c8e
test(kimi): retain finite approval polling refusal cause
codex Oct 27, 2026
ef8c42b
test(gemini): bind lifecycle assessment cache to held sources
codex Oct 27, 2026
7389fc6
docs(qoder): approve exact empty telemetry directory recipe
codex Oct 27, 2026
a2f312e
test(copilot): capture one bounded public user registration
codex Oct 27, 2026
25673dc
docs(kimi): record reviewed poll refusal diagnostic validation
codex Oct 27, 2026
922b705
docs(copilot): record bounded user capture verification
codex Oct 27, 2026
7e5e562
docs(grok): record reviewed shared HTTP client fixture plan
codex Oct 27, 2026
74f7249
test(grok): opt out of shared client only for held provider
codex Oct 27, 2026
a87dd94
docs(kimi): record reviewed session cache metadata plan
777genius Oct 27, 2026
f09fbb1
fix(kimi): retain explicitly scoped MCP selection during repair
777genius Oct 27, 2026
20921c0
test(kimi): admit canonical session cache metadata without widening t…
777genius Oct 27, 2026
30f5dfe
test(kimi): keep inert cache request helper compatible with Go 1.22
777genius Oct 27, 2026
9b2a946
test(qoder): retain exact empty telemetry directories
777genius Oct 27, 2026
4f034eb
docs(qoder): record reviewed directory fixture gates
777genius Oct 27, 2026
c1a3720
merge(kimi): compose reviewed scoped selection and provider capture f…
777genius Oct 27, 2026
611f7dd
docs(grok): record exact reviewed shared client validation
777genius Oct 27, 2026
9e9779f
docs(kimi): record reviewed composed corrections and actual validation
777genius Oct 27, 2026
239067e
test(gemini): recognize scoped MCP listing diagnostics
777genius Oct 27, 2026
66d4ee9
docs(qoder): freeze four-detail diagnostic amendment
777genius Oct 27, 2026
e06ec60
docs(qoder): correct pre-code preservation control claim
777genius Oct 27, 2026
393bd1c
test(qoder): retain the fourth bounded profile delta detail
777genius Oct 27, 2026
1050bbb
docs(qoder): record reviewed four-detail gates
777genius Oct 27, 2026
d154698
docs(copilot): freeze empty registry diagnostic plan
777genius Oct 27, 2026
96b4135
docs(gemini): freeze measured missing-start-mark amendment
777genius Oct 27, 2026
1a000fe
docs(grok): freeze isolated title fixture amendment
777genius Oct 27, 2026
2f67eac
test(gemini): admit exact measured missing-start-mark tuple
777genius Oct 27, 2026
22aa3e4
docs(kimi): freeze finite native completion amendment
777genius Oct 27, 2026
7b5b5a6
docs(gemini): record missing-start-mark reviews and gates
777genius Oct 27, 2026
7e19375
test(copilot): capture fixed empty registry before public mutation
777genius Oct 27, 2026
0f9bfb0
test(grok): isolate the bounded native title fixture
777genius Oct 27, 2026
d82b7ab
docs(copilot): freeze hosted inert process gate amendment
777genius Oct 27, 2026
c80e34b
test(copilot): gate native capture on hosted inert process contracts
777genius Oct 27, 2026
3edd581
test(grok): carry fixture context into title write-failure request
777genius Oct 27, 2026
3c38d0d
test(grok): keep inert request construction compatible with Go 1.22
777genius Oct 27, 2026
348e2ce
docs(grok): record title fixture reviews and executed gates
777genius Oct 27, 2026
19f64f9
test(kimi): verify finite native history and completion evidence
777genius Oct 27, 2026
2c2ac7f
docs(copilot): record local gates and required hosted process proof
777genius Oct 27, 2026
0dd08a3
docs: accept reviewed Gemini complete-cycle success plan
777genius Oct 27, 2026
9a642d1
test(kimi): close native completion reader parity gaps
777genius Oct 27, 2026
2ab397b
docs(copilot): accept exact disabled-builtin registry plan
777genius Oct 27, 2026
4eba242
fix(copilot): recognize exact disabled builtin in empty user registry
777genius Oct 27, 2026
5781ef4
docs(copilot): record exact registry reviews and measured gates
777genius Oct 27, 2026
569d252
test(kimi): enforce exact byte and numeric completion bounds
777genius Oct 27, 2026
bb94f00
docs(grok): accept bounded refused duplicate capture plan
777genius Oct 27, 2026
5d8229b
test(kimi): use tagged metadata contract dispatch
777genius Oct 27, 2026
eb69a29
docs(kimi): record finite completion reviews and measured gates
777genius Oct 27, 2026
1fd36e1
test(grok): capture one refused duplicate request
777genius Oct 28, 2026
7d3ddaa
test(grok): reject invalid scalars in duplicate capture
777genius Oct 28, 2026
888ef9f
Merge pull request #524 from 777genius/feat/project-native-kimi-20261025
777genius Oct 28, 2026
221f4a6
test(grok): satisfy diagnostic contract lint gates
777genius Oct 28, 2026
ca46743
docs(copilot): freeze reviewed post-add registry observation plan
777genius Oct 28, 2026
b40da64
docs(grok): record refused duplicate gates and reviews
777genius Oct 28, 2026
81d94fb
test: admit fully proven Gemini native lifecycle completion
777genius Oct 28, 2026
e57e7fd
test: satisfy Gemini completion contract lint gates
777genius Oct 28, 2026
0d31b77
docs: record reviewed Gemini completion gates
777genius Oct 28, 2026
b05262f
test: capture bounded Copilot post-add native registry listing
777genius Oct 28, 2026
15a2ca3
docs(e2e): accept measured Grok turn-summary suppression plan
777genius Oct 28, 2026
85dfdae
docs(e2e): record reviewed Copilot post-add capture gates
777genius Oct 28, 2026
752016c
Merge qualified Kimi parent into Gemini native E2E branch
777genius Oct 28, 2026
a922e32
test(e2e): disable observed Grok dashboard summary in original fixtur…
777genius Oct 28, 2026
91402cd
docs(e2e): record exact Grok summary-suppression gates
777genius Oct 28, 2026
a544214
docs(e2e): record qualified Gemini and Kimi composition gates
777genius Oct 28, 2026
d95b6bb
docs: accept Copilot exact user live listing repair plan
777genius Oct 28, 2026
73208da
Merge pull request #526 from 777genius/feat/project-native-gemini-202…
777genius Oct 28, 2026
9145d04
fix(copilot): recognize exact managed user live listing
777genius Oct 28, 2026
d389a74
test(copilot): make live registry fixtures independent and portable
777genius Oct 28, 2026
143d447
merge: compose Copilot registry fix with qualified native lanes
777genius Oct 28, 2026
c02de25
fix(copilot): satisfy registry recognition lint contracts
777genius Oct 28, 2026
838c3e1
docs(copilot): record reviewed live registry repair validation
777genius Oct 28, 2026
13ffa85
docs(grok): plan exact project trust and skill observation
777genius Oct 28, 2026
1df1089
fix(copilot): keep native listing policy in client adapter
777genius Oct 28, 2026
f794d6d
test(grok): verify trusted project skill selection
777genius Oct 28, 2026
25ea0f0
test(qoder): capture exact native log-run identity
777genius Oct 28, 2026
d32d8fd
test: cover complete Copilot project lifecycle
777genius Oct 28, 2026
24dcb5f
test: cover complete Grok project skills lifecycle
777genius Oct 28, 2026
9a76282
test: capture complete bounded Windsurf profile delta
777genius Oct 28, 2026
cf8d542
Merge qualified native program into complete Grok lifecycle
777genius Oct 28, 2026
59c1cf2
test: require measured Copilot User plugin command name
777genius Oct 28, 2026
e7b9e7e
test(qoder): complete supported project skills lifecycle
777genius Oct 28, 2026
1efe050
Merge qualified native project base into Qoder lifecycle
777genius Oct 28, 2026
d0ac8b3
test(windsurf): capture the sixteenth profile delta detail
777genius Oct 28, 2026
5317da5
merge: reconcile native project E2E with current main
777genius Oct 29, 2026
058df65
test(qoder): admit exact pinned Bun manifest argv
777genius Oct 29, 2026
e9ef0ae
test(copilot): match native startup order and public lifecycle results
777genius Oct 29, 2026
7c9c500
test(grok): match measured native paths and lifecycle results
777genius Oct 29, 2026
28ca77b
test(windsurf): preserve originals around exact native startup logs
777genius Oct 29, 2026
e854df2
test(gemini): use private native fixture binary transport
777genius Oct 29, 2026
40ad366
test(grok): preserve native boundary and remove obsolete helper
777genius Oct 29, 2026
5b95c64
test(qoder): align project native fixture transport boundary
777genius Oct 29, 2026
1f01bdd
test(copilot): align project native fixture transport boundary
777genius Oct 29, 2026
70bc46c
test(windsurf): align project native fixture transport boundary
777genius Oct 29, 2026
fd1df49
test(cursor): pin official archive and bound publisher curl acquisition
777genius Oct 29, 2026
1eb5be7
test(cursor): capture bounded native help and empty MCP lists
777genius Oct 29, 2026
07756a6
test(windsurf): permit only exact telemetry timestamp rewrites
777genius Oct 29, 2026
1d40c18
test(grok): match provisional trust for empty outside inspection
777genius Oct 29, 2026
e231c9e
feat(cursor): select the actual Agent for project components
777genius Oct 29, 2026
67de307
test(copilot): admit the measured repeated tools-list sequence
777genius Oct 29, 2026
e9448dd
test(windsurf): seed only empty native MCP storage directories
777genius Oct 29, 2026
233a734
test(grok): bind skill sources to each held producer
777genius Oct 29, 2026
bd2a837
test: capture Cursor public project MCP installation
777genius Oct 29, 2026
17b1322
test: validate bounded Copilot discovery sequences semantically
777genius Oct 29, 2026
cd91f24
test: seed exact empty Devin plugin lock before baseline
777genius Oct 29, 2026
fcde007
test(grok): validate the direct repeated-add result
777genius Oct 29, 2026
0db149a
Merge pull request #523 from 777genius/feat/project-native-qoder-2026…
777genius Oct 29, 2026
b8ae9c2
test(cursor): bind runtime closure to materialized archive members
777genius Oct 29, 2026
69a2a19
Bound Devin empty-registry replacement and compose qualified parent
777genius Oct 29, 2026
0a47b08
Merge pull request #527 from 777genius/feat/project-native-copilot-20…
777genius Oct 29, 2026
cf496fe
Identify Windsurf frozen-tree refusals on the qualified parent
777genius Oct 29, 2026
db13ecd
Capture scoped Cursor MCP approval and tool discovery on the qualifie…
777genius Oct 29, 2026
63eb232
Merge pull request #522 from 777genius/feat/project-native-grok-20261025
777genius Oct 29, 2026
ad8b1d3
fix(cursor): preserve opaque managed stdio argv through Agent
777genius Oct 29, 2026
16283a4
test(windsurf): prepare source-defined Git excludes before freeze
777genius Oct 29, 2026
1c821c2
test: validate repeated Copilot startup tool notifications
777genius Oct 29, 2026
cded02a
test(windsurf): preserve Git template permissions with reviewed paren…
777genius Oct 30, 2026
cbbcd32
test(cursor): complete bounded project MCP lifecycle
777genius Oct 30, 2026
45f5621
test(cursor): expect encoded managed stdio arguments
777genius Oct 30, 2026
70048a6
test(cursor): preserve native writer locks and exact public DTOs
777genius Oct 30, 2026
afd2133
test(windsurf): preserve exact public snapshot scratch authority
777genius Oct 30, 2026
af54902
test(cursor): report bounded native admission refusal site
777genius Oct 30, 2026
3a1a12a
test(cursor): distinguish approval proofs from embedded byte streams
777genius Oct 30, 2026
80f6788
Merge pull request #521 from 777genius/feat/project-native-cursor-202…
777genius Oct 30, 2026
8c4f6b3
test: bind Windsurf public cache mutations to exact source proofs
777genius Oct 30, 2026
0d55004
test: cover Windsurf complete native project lifecycle
777genius Oct 30, 2026
d39a432
test: preserve selected Windsurf state parent ctime-only changes
777genius Oct 31, 2026
412d0d3
style: format Windsurf selected-parent regression fixture
777genius Oct 31, 2026
e861686
test: accept overlayfs cache file device while retaining identity guards
777genius Oct 31, 2026
e110546
Merge qualified Windsurf native project E2E (#528)
777genius Oct 31, 2026
bfe8e7e
Merge current main into native project E2E program
777genius Oct 31, 2026
1a69132
test: align combined native E2E fixtures with current contracts
777genius Oct 31, 2026
a316ea6
test: retain selected Copilot user profile in native inert fixture
777genius Oct 31, 2026
9d58529
test: defer unqualified Windsurf cache-frame admission to follow-up
777genius Oct 31, 2026
cd6d305
fix: align Copilot native admission with selected user profile ownership
777genius Oct 31, 2026
4368de6
ci: requalify combined project E2E on GitHub-hosted runners
777genius Oct 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
98 changes: 98 additions & 0 deletions .github/workflows/project-native-research.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Remaining Project Native Research
on:
pull_request:
paths:
- '.github/workflows/project-native-research.yml'
- 'scripts/project_native_research.py'
- 'scripts/project_native_cursor_acquisition.py'
- 'scripts/project_native_service.py'
- 'scripts/project_native_collectors/**'
- 'scripts/test_project_native_*.py'
- 'scripts/native_client_research.py'
- 'scripts/native_client_project_artifacts.py'
- 'scripts/research-grok-native.py'
- 'scripts/run-native-client-matrix.py'
- 'repotests/testdata/agentplugins_native_probe/**'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: project-native-research-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
contracts:
name: Inert contracts and explicit research selection
runs-on: ubuntu-24.04
timeout-minutes: 5
outputs:
matrix: ${{ steps.selection.outputs.matrix }}
count: ${{ steps.selection.outputs.count }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Test capture, pins, admission and leaf parsers without vendor execution
run: python3 -m unittest discover -s scripts -p 'test_project_native_*.py'
- name: Select only declared research phases
id: selection
run: |
python3 - <<'PYTHON'
import json, os, subprocess
result = subprocess.check_output(['python3', 'scripts/project_native_research.py', '--matrix'], text=True).strip()
matrix = json.loads(result)
with open(os.environ['GITHUB_OUTPUT'], 'a') as output:
output.write('matrix=' + result + '\n')
output.write('count=' + str(len(matrix['include'])) + '\n')
print(result)
print('Research selection does not qualify lifecycle, MCP, model use or a release.')
PYTHON
research:
name: ${{ matrix.client }} / ${{ matrix.phase }} / current source
needs: contracts
if: ${{ needs.contracts.outputs.count != '0' }}
strategy:
fail-fast: false
max-parallel: 5
matrix: ${{ fromJSON(needs.contracts.outputs.matrix) }}
runs-on: ${{ matrix.host }}
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
if: ${{ matrix.client == 'kimi' && matrix.phase == 'observe' }}
with:
go-version: '1.26.10'
cache: false
- name: Acquire or observe exact native bytes in a fresh original profile
env:
AGENTPLUGINS_NATIVE_DISPOSABLE_HOSTED: '1'
EXPECTED_COMMIT: ${{ github.event.pull_request.head.sha || github.sha }}
run: python3 scripts/project_native_research.py --client '${{ matrix.client }}' --phase '${{ matrix.phase }}' --output '${{ runner.temp }}/project-native-${{ matrix.client }}'
- name: Admit the exact bounded evidence ZIP
id: admission
if: ${{ always() }}
env:
EVIDENCE: ${{ runner.temp }}/project-native-${{ matrix.client }}/upload/research.zip
run: |
/usr/bin/python3 -I - <<'PYTHON'
import os, stat
from pathlib import Path
path = Path(os.environ['EVIDENCE'])
info = path.lstat()
if path.resolve() != path or not stat.S_ISREG(info.st_mode) or info.st_nlink != 1 or info.st_uid != os.getuid() or info.st_size > 32 * 1024 * 1024:
raise SystemExit('refusing nonregular or unbounded research ZIP')
with open(os.environ['GITHUB_OUTPUT'], 'a') as output:
output.write('valid=true\n')
PYTHON
- name: Upload closed research evidence
if: ${{ always() && steps.admission.outputs.valid == 'true' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.0
with:
name: project-native-${{ matrix.client }}-${{ matrix.phase }}-linux-amd64
path: ${{ runner.temp }}/project-native-${{ matrix.client }}/upload/research.zip
if-no-files-found: error
retention-days: 14
134 changes: 134 additions & 0 deletions .github/workflows/project-native-runtime.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: Project Native Runtime
on:
pull_request:
paths:
- '.github/workflows/project-native-runtime.yml'
- 'scripts/project_native_runtime.py'
- 'scripts/project_native_research.py'
- 'scripts/project_native_service.py'
- 'scripts/project_native_collectors/**'
- 'scripts/test_project_native_runtime.py'
- 'repotests/agentplugins_*project_native_*test.go'
- 'repotests/testdata/agentplugins_native_probe/**'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: project-native-runtime-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
contracts:
name: Runtime admission contracts and exact selection
runs-on: ubuntu-24.04
timeout-minutes: 5
outputs:
matrix: ${{ steps.selection.outputs.matrix }}
count: ${{ steps.selection.outputs.count }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Verify inert envelope and selection contracts
run: python3 -m unittest discover -s scripts -p 'test_project_native_runtime.py'
- name: Select only implemented exact native tests
id: selection
run: |
python3 - <<'PYTHON'
import json, os, subprocess
value = subprocess.check_output(['python3', 'scripts/project_native_runtime.py', '--matrix'], text=True).strip()
matrix = json.loads(value)
with open(os.environ['GITHUB_OUTPUT'], 'a') as output:
output.write('matrix=' + value + '\n')
output.write('count=' + str(len(matrix['include'])) + '\n')
print(value)
PYTHON
- name: Prepare pinned Go for selected Copilot inert process contracts
if: ${{ contains(fromJSON(steps.selection.outputs.matrix).include.*.client, 'copilot') }}
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: '1.26.10'
cache: false
- name: Verify selected Copilot inert process contracts before native execution
if: ${{ contains(fromJSON(steps.selection.outputs.matrix).include.*.client, 'copilot') }}
run: go test -json -p=1 -count=1 -timeout=120s ./repotests -run '^(TestCopilot|TestProjectNativeRuntime)'
native:
name: ${{ matrix.client }} / ${{ matrix.phase }} / installed public CLI
needs: contracts
if: ${{ needs.contracts.outputs.count != '0' }}
strategy:
fail-fast: false
max-parallel: 3
matrix: ${{ fromJSON(needs.contracts.outputs.matrix) }}
runs-on: ubuntu-24.04
timeout-minutes: 26
env:
AGENTPLUGINS_NATIVE_DISPOSABLE_HOSTED: '1'
EXPECTED_COMMIT: ${{ github.event.pull_request.head.sha || github.sha }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Admit actual hosted environment and clean source before toolchain setup
run: |
python3 - <<'PYTHON'
import os, platform, re, sys
from pathlib import Path
sys.path.insert(0, str(Path.cwd() / 'scripts'))
from native_client_research import run_probe
required = {'GITHUB_ACTIONS': 'true', 'RUNNER_ENVIRONMENT': 'github-hosted', 'AGENTPLUGINS_NATIVE_DISPOSABLE_HOSTED': '1'}
if any(os.environ.get(key) != value for key, value in required.items()) or platform.system() != 'Linux' or platform.machine() != 'x86_64':
raise SystemExit('actual opted-in GitHub-hosted Linux x64 required')
expected = os.environ['EXPECTED_COMMIT']
env = {'PATH': '/usr/bin:/bin', 'LC_ALL': 'C', 'GIT_CONFIG_NOSYSTEM': '1', 'GIT_CONFIG_GLOBAL': '/dev/null', 'GIT_TERMINAL_PROMPT': '0'}
def git(*args):
record, stdout, stderr = run_probe(['/usr/bin/git', *args], Path.cwd(), env, Path('/tmp'), 'source-guard', timeout=10, limit=65536, memory_only=True)
if record['error'] is not None or record['exit'] != 0 or stderr:
raise SystemExit('bounded source identity query failed')
return stdout.decode('ascii', errors='strict').strip()
if not re.fullmatch('[0-9a-f]{40}', expected) or git('rev-parse', 'HEAD') != expected or not re.fullmatch('[0-9a-f]{40}', git('rev-parse', 'HEAD^{tree}')) or git('status', '--porcelain', '--untracked-files=normal'):
raise SystemExit('exact clean current-source checkout required')
PYTHON
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: '1.26.10'
cache: false
- name: Run the selected bounded current-source native test
run: python3 scripts/project_native_runtime.py --client '${{ matrix.client }}' --output '${{ runner.temp }}/project-runtime-${{ matrix.client }}'
- name: Admit exact closed output files
id: admission
if: ${{ always() }}
env:
EVIDENCE: ${{ runner.temp }}/project-runtime-${{ matrix.client }}/upload
run: |
/usr/bin/python3 -I - <<'PYTHON'
import os, stat
from pathlib import Path
root = Path(os.environ['EVIDENCE'])
for label in ('frontend', 'runtime'):
path = root / (label + '.zip')
if not path.exists():
continue
info = path.lstat()
if path.resolve() != path or not stat.S_ISREG(info.st_mode) or info.st_nlink != 1 or info.st_uid != os.getuid() or info.st_size > 32 * 1024 * 1024:
raise SystemExit('refusing aliased or unbounded closed evidence')
with open(os.environ['GITHUB_OUTPUT'], 'a') as output:
output.write(label + '=true\n')
PYTHON
- name: Upload source, build and test receipt
if: ${{ always() && steps.admission.outputs.frontend == 'true' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.0
with:
name: project-runtime-${{ matrix.client }}-${{ matrix.phase }}-frontend
path: ${{ runner.temp }}/project-runtime-${{ matrix.client }}/upload/frontend.zip
if-no-files-found: error
retention-days: 14
- name: Upload admitted native runtime evidence
if: ${{ always() && steps.admission.outputs.runtime == 'true' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.0
with:
name: project-runtime-${{ matrix.client }}-${{ matrix.phase }}-native
path: ${{ runner.temp }}/project-runtime-${{ matrix.client }}/upload/runtime.zip
if-no-files-found: error
retention-days: 14
110 changes: 110 additions & 0 deletions cli/cmd/agentplugins/cursor_project_cycle_contract_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package main

import (
"bytes"
"encoding/json"
"os"
"path/filepath"
"reflect"
"strings"
"testing"

"github.com/777genius/plugin-kit-ai/cli/internal/agentpluginscli"
)

// Real public Cobra/installer/filesystem composition with inert host discovery
// and assessment. No Cursor process or authored MCP process is executed.
func TestProjectCursorDirectMCPCyclePublicContracts(t *testing.T) {
f := newCursorProjectJourney(t, newProjectJourneyTransport(t, "zip"))
projectJourneyWrite(t, filepath.Join(f.a, ".cursor", "mcp.json"), "{\"mcpServers\":{}}\n")
source := projectJourneyTemp(t)
write := func(version string) {
t.Helper()
projectJourneyWrite(t, filepath.Join(source, "plugin.json"), `{"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","name":"native-proof","version":"`+version+`"}`+"\n")
projectJourneyWrite(t, filepath.Join(source, "mcp.json"), `{"$schema":"https://agent-plugins.org/schemas/1.0.0/mcp.schema.json","mcpServers":{"uapcursora":{"type":"stdio","command":"./bin/probe","args":["cursor-component"],"cwd":"${PLUGIN_ROOT}"}}}`+"\n")
projectJourneyWrite(t, filepath.Join(source, "bin", "probe"), "inert fixture bytes; never executed\n")
if err := os.Chmod(filepath.Join(source, "bin", "probe"), 0700); err != nil {
t.Fatal(err)
}
}
write("1.0.0")
var iid, oldState string
run := func(stage, verb, selector string, changed bool) {
t.Helper()
var stdout, stderr bytes.Buffer
app := f.app
app.Input, app.Output, app.ErrorOutput, app.Terminal = strings.NewReader(""), &stdout, &stderr, false
root := agentpluginscli.NewRoot(app)
args := []string{verb, selector, "--scope", "project", "--project-root", f.a, "--target", "cursor", "--format", "json"}
if verb == "add" {
args = append(args, "--no-save")
}
root.SetArgs(args)
if err := root.Execute(); err != nil {
t.Fatalf("%s: %v\n%s\n%s", stage, err, stdout.String(), stderr.String())
}
var row map[string]any
if err := json.Unmarshal(stdout.Bytes(), &row); err != nil {
t.Fatal(err)
}
data := row["data"].(map[string]any)
output := data
if stage == "repeat-add-a" {
if _, present := data["targets"]; present || data["operation_id"] != nil {
t.Fatal("repeat add is not the exact singleton")
}
} else {
if data["batch"] != true || data["succeeded"] != float64(1) || data["failed"] != float64(0) {
t.Fatal("public batch differs", row)
}
output = data["targets"].([]any)[0].(map[string]any)["output"].(map[string]any)
}
outcome := output["result"].(map[string]any)
if iid == "" {
iid = outcome["installation_id"].(string)
}
if outcome["installation_id"] != iid || outcome["mutated"] != changed || outcome["requires_confirmation"] != false {
t.Fatal("held public outcome differs", row)
}
label := "direct local source"
if verb == "repair" || verb == "remove" {
label = "local"
}
if output["source"] != label {
t.Fatal("source label differs", row)
}
if verb != "remove" {
plan, activation := outcome["plan"].(map[string]any), outcome["activation"].(map[string]any)
if plan["verification"] != "package_validated" || activation["verification"] != "installation_verified" || !reflect.DeepEqual(plan["components"], []any{map[string]any{"kind": "mcp_server", "name": "uapcursora", "support": "native"}}) {
t.Fatal("Prepared MCP-only DTO differs", row)
}
}
if stage == "unchanged-update-a" && outcome["no_change"] != true {
t.Fatal("unchanged update flag differs", row)
}
state := projectJourneyRead(t, filepath.Join(f.a, ".uap", "state-v2.json"))
if !changed && state != oldState {
t.Fatal("public no-op rewrote exact state")
}
oldState = state
}
run("add-a", "add", source, true)
run("repeat-add-a", "add", source, false)
run("unchanged-update-a", "update", iid, false)
run("intact-repair-a", "repair", iid, true)
write("1.1.0")
run("update-a", "update", iid, true)
// Remove only the sole owned native document, leaving the package intact.
config := filepath.Join(f.a, ".cursor", "mcp.json")
if err := os.Remove(config); err != nil {
t.Fatal(err)
}
run("missing-repair-a", "repair", iid, true)
run("remove-a", "remove", iid, true)
if _, err := f.execute(f.a, "remove", iid, "--target", "cursor"); err == nil || err.Error() != `plugin is not installed for target "cursor" in project scope; no target was changed` {
t.Fatal("repeated removal refusal differs", err)
}
if projectJourneyRead(t, filepath.Join(f.a, ".uap", "state-v2.json")) != oldState {
t.Fatal("repeated removal changed state")
}
}
Loading
Loading