Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
f133c43
docs: close out dp-20 audit — remove resolved TODOs, update PROGRESS.md
Jordanmuss99 Apr 28, 2026
a979596
fix(resources): batch location availability reads
Jordanmuss99 Aug 17, 2026
35ac195
test: support standalone Paymenter checkouts
Jordanmuss99 Aug 17, 2026
f652667
docs: refresh availability security wiki
Jordanmuss99 Aug 17, 2026
b978393
test: harden standalone database isolation
Jordanmuss99 Aug 17, 2026
ae33b46
docs: reconcile wiki with batched location reads
Jordanmuss99 Aug 17, 2026
6347021
docs: remove residual per-node wiki flow
Jordanmuss99 Aug 17, 2026
1d8ce1a
fix: harden test isolation and availability errors
Jordanmuss99 Aug 17, 2026
c34192e
docs: remove final per-node availability remnants
Jordanmuss99 Aug 17, 2026
77c9807
test: atomically claim standalone sqlite database
Jordanmuss99 Aug 17, 2026
2a9c3a4
fix: fail closed on malformed availability payloads
Jordanmuss99 Aug 17, 2026
d21bcfc
test: generate isolated standalone sqlite database
Jordanmuss99 Aug 17, 2026
6ebc7ce
fix: reject incomplete capacity payloads
Jordanmuss99 Aug 17, 2026
ec7ba5e
docs: align wiki and reconciliation status
Jordanmuss99 Aug 17, 2026
2f75665
test: isolate sqlite without filesystem paths
Jordanmuss99 Aug 17, 2026
d97a0ac
fix: use one validated availability snapshot
Jordanmuss99 Aug 17, 2026
a7f77f5
docs: document single snapshot and cpu policy gate
Jordanmuss99 Aug 17, 2026
975105c
fix: reject truncated capacity snapshots
Jordanmuss99 Aug 17, 2026
d65c73d
docs: align strict snapshot contracts
Jordanmuss99 Aug 17, 2026
a349b2a
fix: reject duplicate capacity records
Jordanmuss99 Aug 17, 2026
b078be9
docs: record strict identity validation
Jordanmuss99 Aug 17, 2026
1382e83
fix: verify complete capacity pages
Jordanmuss99 Aug 17, 2026
0afff90
docs: define strict capacity boundaries
Jordanmuss99 Aug 17, 2026
6b7f83b
fix: distinguish missing relationships
Jordanmuss99 Aug 17, 2026
64c04ea
docs: refresh strict boundary anchors
Jordanmuss99 Aug 17, 2026
b8b0f2d
docs: name strict relationship parser
Jordanmuss99 Aug 17, 2026
87f21b8
docs: require full safety rebase
Jordanmuss99 Aug 17, 2026
3202e2c
docs: repair qoder source anchors
Jordanmuss99 Aug 17, 2026
fcc3df9
docs: align qoder anchor labels
Jordanmuss99 Aug 17, 2026
a9e5b25
docs: normalize qoder whitespace
Jordanmuss99 Aug 17, 2026
2f62b3b
fix(reservations): enforce server-owned provisioning lifecycle
Jordanmuss99 Jul 25, 2026
5690837
ci: run cross-repository extension matrix
Jordanmuss99 Jul 25, 2026
3f1b156
ci: isolate integration test services
Jordanmuss99 Jul 25, 2026
0ba3e5c
fix(migrations): preserve active cart uniqueness on MariaDB
Jordanmuss99 Jul 25, 2026
a45d575
test: align extension suite with Paymenter 1.5.6
Jordanmuss99 Jul 25, 2026
930d284
feat(stock): add authoritative dynamic resource lifecycle
Jordanmuss99 Jul 25, 2026
f7dde56
test(ci): run core provisioning seams with extension
Jordanmuss99 Jul 25, 2026
cb8d7c7
fix(stock): harden lazy inventory and integration fixtures
Jordanmuss99 Jul 25, 2026
accb964
test: exercise guarded fulfillment contracts
Jordanmuss99 Jul 25, 2026
c8439a2
fix: persist authoritative upgrade placement
Jordanmuss99 Jul 25, 2026
2c05d46
fix: preserve reservation fingerprint round trips
Jordanmuss99 Jul 25, 2026
a53c46e
test: change non-resource upgrade selection
Jordanmuss99 Jul 25, 2026
0998825
fix: close stock inventory and fulfillment races
Jordanmuss99 Jul 26, 2026
9777611
fix: complete extension stock integrity manifest
Jordanmuss99 Jul 26, 2026
005a98e
fix: close cross-repository lifecycle gaps
Jordanmuss99 Jul 26, 2026
5f36e60
fix: scope paid upgrade transition proof
Jordanmuss99 Jul 26, 2026
59fd806
fix: normalize durable readiness proofs
Jordanmuss99 Jul 26, 2026
c4e5525
fix: close dynamic stock release blockers
Jordanmuss99 Jul 27, 2026
e59b734
chore: preserve branch metadata
Jordanmuss99 Jul 27, 2026
7267576
test: repair cross-repository lifecycle gate
Jordanmuss99 Jul 27, 2026
99bcf27
test: align lifecycle fixtures with core guards
Jordanmuss99 Jul 27, 2026
06f8076
test: preserve upgrade integrity regressions
Jordanmuss99 Jul 27, 2026
7c85720
fix: decouple local cancellation from panel credentials
Jordanmuss99 Jul 27, 2026
020c463
ci: stabilize cross-repository integration
Jordanmuss99 Aug 17, 2026
69c9f01
test: isolate sqlite child processes
Jordanmuss99 Aug 17, 2026
0d0b616
ci: pin audited companion dependencies
Jordanmuss99 Aug 17, 2026
32eeb8e
docs: reconcile preserved qoder wiki
Jordanmuss99 Aug 17, 2026
7ff4d47
ci: pin workflow actions to verified commits
Jordanmuss99 Aug 17, 2026
c33704f
docs: close successor reconciliation checkpoint
Jordanmuss99 Aug 17, 2026
a6fd5fe
docs: refresh reconciled source pins
Jordanmuss99 Aug 17, 2026
7040d45
ci: pin patched companion assets
Jordanmuss99 Aug 17, 2026
17322c6
docs: archive superseded progress details
Jordanmuss99 Aug 17, 2026
2253bae
docs: mark preserved wiki pages historical
Jordanmuss99 Aug 17, 2026
0c6d301
fix: restrict alert webhooks to public endpoints
Jordanmuss99 Aug 17, 2026
37c4a45
docs: record staging lifecycle release gate
Jordanmuss99 Aug 17, 2026
5ff9fd9
ci: pin hardened companion and database images
Jordanmuss99 Aug 17, 2026
d027fa6
docs: refresh hardened Qoder source pins
Jordanmuss99 Aug 17, 2026
2afc0e9
ci: pin immutable companion database matrix
Jordanmuss99 Aug 17, 2026
ae36516
docs: repin final Qoder checkpoint
Jordanmuss99 Aug 17, 2026
31f5b66
fix: reject noncanonical webhook hosts
Jordanmuss99 Aug 17, 2026
cb677dd
docs: refresh contributor knowledge base
Jordanmuss99 Aug 17, 2026
7843e2a
docs: repin corrected Qoder checkpoint
Jordanmuss99 Aug 17, 2026
dbea10d
fix: protect alert webhook credentials
Jordanmuss99 Aug 17, 2026
4880828
test: restrict shared database guard to loopback
Jordanmuss99 Aug 17, 2026
f7f0a8c
ci: pin refreshed companion checkout
Jordanmuss99 Aug 17, 2026
b758b4b
docs: align release baseline and source pins
Jordanmuss99 Aug 17, 2026
cff5a89
ci: pin collision-safe companion checkout
Jordanmuss99 Aug 17, 2026
a3918a5
docs: repin final Qoder checkpoint
Jordanmuss99 Aug 17, 2026
d187052
fix: decrypt scheduled webhook configuration
Jordanmuss99 Aug 17, 2026
a9153bb
docs: align contributor baseline
Jordanmuss99 Aug 17, 2026
45e984c
docs: refresh Qoder metadata and source pins
Jordanmuss99 Aug 17, 2026
39a161a
fix: redact webhook transport failures
Jordanmuss99 Aug 17, 2026
5809c59
docs: repin reviewed Qoder checkpoint
Jordanmuss99 Aug 17, 2026
21901de
fix: reject deprecated IPv6 site-local webhooks
Jordanmuss99 Aug 17, 2026
9ee4801
docs: repin IPv6 boundary checkpoint
Jordanmuss99 Aug 17, 2026
872897b
fix: reject IPv4-compatible IPv6 webhooks
Jordanmuss99 Aug 17, 2026
027b9b5
docs: repin compatible IPv6 checkpoint
Jordanmuss99 Aug 17, 2026
8b95295
fix: reject IANA dummy IPv6 webhooks
Jordanmuss99 Aug 17, 2026
caa0ead
docs: repin IANA registry checkpoint
Jordanmuss99 Aug 17, 2026
2c921a8
test: cover ORCHID webhook rejection
Jordanmuss99 Aug 17, 2026
fe20627
fix: redact inventory response bodies
Jordanmuss99 Aug 17, 2026
4bb4edd
docs: repin sanitized inventory checkpoint
Jordanmuss99 Aug 17, 2026
6ef0bb8
ci: pin sanitized Paymenter companion
Jordanmuss99 Aug 17, 2026
c8dcbb6
chore: remove tracked session cache
Jordanmuss99 Aug 17, 2026
3aee81b
style: format standalone test bootstrap
Jordanmuss99 Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
276 changes: 276 additions & 0 deletions .github/workflows/cross-repository-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,276 @@
name: Cross-repository integration

on:
pull_request:
push:
branches:
- dynamic-slider
workflow_dispatch:

permissions:
contents: read

env:
COMPOSER_MAX_PARALLEL_HTTP: 1
COMPOSER_PROCESS_TIMEOUT: 900

concurrency:
group: dynamic-pterodactyl-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
quality:
name: Extension quality
runs-on: ubuntu-latest

steps:
- name: Check out Dynamic Pterodactyl
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
path: dynamic-pterodactyl
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Check out companion Paymenter
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: ObsidianNetwork/Paymenter-Obsidian-Network
ref: d58ab220998947cbb05b3806484a69ed7a419def
path: paymenter

- name: Set up PHP
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2
with:
php-version: '8.3'
extensions: bcmath, curl, gd, mbstring, mysql, openssl, pdo, tokenizer, xml, zip
tools: composer:v2
coverage: none

- name: Install Paymenter dependencies
working-directory: paymenter
run: |
for attempt in 1 2 3 4; do
composer install --no-interaction --no-ansi --prefer-dist --no-progress && exit 0
test "$attempt" -eq 4 && exit 1
sleep $((attempt * 20))
done

- name: Audit Composer dependencies
working-directory: paymenter
run: composer audit --locked --no-interaction

- name: Run Pint on the complete extension branch diff
working-directory: dynamic-pterodactyl
env:
BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
run: |
if [[ -z "$BASE_SHA" || "$BASE_SHA" =~ ^0+$ ]]; then
BASE_SHA="$(git rev-parse HEAD^)"
fi
mapfile -d '' files < <(
git diff --diff-filter=ACMR --name-only -z \
"$BASE_SHA"...HEAD -- '*.php'
)
if ((${#files[@]})); then
../paymenter/vendor/bin/pint --test "${files[@]}"
fi

extension-sqlite:
name: PHP ${{ matrix.php }} / SQLite
runs-on: ubuntu-latest
strategy:
fail-fast: false
max-parallel: 1
matrix:
php:
- '8.3'
- '8.4'

steps:
- name: Check out Dynamic Pterodactyl
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
path: dynamic-pterodactyl

- name: Check out companion Paymenter
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: ObsidianNetwork/Paymenter-Obsidian-Network
ref: d58ab220998947cbb05b3806484a69ed7a419def
path: paymenter

- name: Set up PHP
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2
with:
php-version: ${{ matrix.php }}
extensions: bcmath, curl, gd, mbstring, mysql, openssl, pdo, pdo_sqlite, sqlite3, tokenizer, xml, zip
tools: composer:v2
coverage: none

- name: Install Paymenter dependencies
working-directory: paymenter
run: |
for attempt in 1 2 3 4; do
composer install --no-interaction --prefer-dist --no-progress && exit 0
test "$attempt" -eq 4 && exit 1
sleep $((attempt * 20))
done

- name: Assemble extension checkout
run: |
mkdir -p paymenter/extensions/Others/DynamicPterodactyl
rsync -a \
--exclude=.git \
--exclude=.github \
dynamic-pterodactyl/ \
paymenter/extensions/Others/DynamicPterodactyl/

- name: Prepare SQLite test database
working-directory: paymenter
env:
APP_ENV: testing
CACHE_STORE: array
DB_CONNECTION: sqlite
DB_DATABASE: database/paymenter_test.sqlite
MAIL_MAILER: array
QUEUE_CONNECTION: sync
SESSION_DRIVER: array
run: |
cp .env.example .env
touch database/paymenter_test.sqlite
php artisan key:generate --force
php artisan migrate --force
php artisan migrate \
--path=extensions/Others/DynamicPterodactyl/database/migrations \
--force

- name: Run Dynamic Pterodactyl tests on SQLite
working-directory: paymenter
env:
APP_ENV: testing
DB_CONNECTION: sqlite
DB_DATABASE: ':temporary:'
run: vendor/bin/phpunit -c extensions/Others/DynamicPterodactyl/phpunit.xml

- name: Run Paymenter provisioning seam tests on SQLite
working-directory: paymenter
env:
APP_ENV: testing
DB_CONNECTION: sqlite
DB_DATABASE: database/paymenter_test.sqlite
run: vendor/bin/phpunit tests/Unit/PterodactylReservationIntegrationTest.php

extension:
name: PHP ${{ matrix.php }} / MariaDB ${{ matrix.mariadb.version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
max-parallel: 1
matrix:
php:
- '8.3'
- '8.4'
mariadb:
- version: '11'
image: mariadb@sha256:d9f7eb2637296652f24b484afd5d246f759f49f5babcadc6a9e344c9acb75fbf # 11
- version: '12'
image: mariadb@sha256:759869cb6f003234a95c6384cdee245b4bce7de26913fe607a8110362c0c007d # 12

services:
mariadb:
image: ${{ matrix.mariadb.image }}
env:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: paymenter_test
ports:
- 3306:3306
options: >-
--health-cmd="healthcheck.sh --connect --innodb_initialized"
--health-interval=10s
--health-timeout=5s
--health-retries=3

steps:
- name: Check out Dynamic Pterodactyl
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
path: dynamic-pterodactyl

- name: Check out companion Paymenter
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: ObsidianNetwork/Paymenter-Obsidian-Network
ref: d58ab220998947cbb05b3806484a69ed7a419def
path: paymenter

- name: Set up PHP
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2
with:
php-version: ${{ matrix.php }}
extensions: bcmath, curl, gd, mbstring, mysql, openssl, pdo, tokenizer, xml, zip
tools: composer:v2
coverage: none

- name: Install Paymenter dependencies
working-directory: paymenter
run: |
for attempt in 1 2 3 4; do
composer install --no-interaction --prefer-dist --no-progress && exit 0
test "$attempt" -eq 4 && exit 1
sleep $((attempt * 20))
done

- name: Assemble extension checkout
run: |
mkdir -p paymenter/extensions/Others/DynamicPterodactyl
rsync -a \
--exclude=.git \
--exclude=.github \
dynamic-pterodactyl/ \
paymenter/extensions/Others/DynamicPterodactyl/

- name: Prepare test database
working-directory: paymenter
env:
APP_ENV: testing
CACHE_STORE: array
DB_CONNECTION: mariadb
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_DATABASE: paymenter_test
DB_USERNAME: root
DB_PASSWORD: password
MAIL_MAILER: array
QUEUE_CONNECTION: sync
SESSION_DRIVER: array
run: |
cp .env.example .env
php artisan key:generate --force
php artisan migrate --force
php artisan migrate \
--path=extensions/Others/DynamicPterodactyl/database/migrations \
--force

- name: Run Dynamic Pterodactyl tests
working-directory: paymenter
env:
APP_ENV: testing
DB_CONNECTION: mariadb
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_DATABASE: paymenter_test
DB_USERNAME: root
DB_PASSWORD: password
run: vendor/bin/phpunit -c extensions/Others/DynamicPterodactyl/phpunit.xml

- name: Run Paymenter provisioning seam tests
working-directory: paymenter
env:
APP_ENV: testing
DB_CONNECTION: mariadb
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_DATABASE: paymenter_test
DB_USERNAME: root
DB_PASSWORD: password
run: vendor/bin/phpunit tests/Unit/PterodactylReservationIntegrationTest.php
Loading