Preflight command builder for a future controlled one-row draft-save test. This phase does not enable gates, submit the save route, or write schedule data.
| Table | hd_draft_shifts |
| Exists | Yes |
| Rows | 5 |
| Confidence | High |
| Before | 5 |
| After | 5 |
| Delta | 0 |
| Note | 26A-14 only reads row counts. It does not insert, update, delete, or change ENV values. |
| Manual confirmation |
| SAVE_ONE_DRAFT_SHIFT |
| For future controlled test only. Not used by 26A-14. |
| Command | Purpose | Copy Reference |
|---|---|---|
| Confirm current Laravel root | Make sure commands are only run inside hdsportszone.com. | pwd php artisan --version |
| Confirm route registration | Verify locked save and preflight routes exist. | php artisan route:list --columns=Method,URI,Action | grep -Ei "draft-shift-(locked-real-save|locked-save-smoke-test|manual-test-instructions|one-row-test-prep-packet|preflight-command-builder)" |
| Confirm gates are disabled | Read current gate values without changing .env. | php artisan tinker --execute='echo "HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_ENABLED=".(env("HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_ENABLED", false) ? "true" : "false").PHP_EOL; echo "HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_OWNER_APPROVED=".(env("HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_OWNER_APPROVED", false) ? "true" : "false").PHP_EOL;' |
| Read target table row count | Capture row count before any future real-save test. | php artisan tinker --execute='echo "hd_draft_shifts rows: ".\Illuminate\Support\Facades\DB::table("hd_draft_shifts")->count().PHP_EOL;' |
| Open locked save page | Browser-check the locked route before any future real test. | https://hdsportszone.com/hd/employee-schedules/builder/draft-shift-locked-real-save |
This is only for the later intentional one-row test.
python3 - <<'PY'
from pathlib import Path
p = Path('.env')
s = p.read_text(errors='ignore') if p.exists() else ''
keys = {
'HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_ENABLED': 'true',
'HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_OWNER_APPROVED': 'true',
}
for k, v in keys.items():
lines = s.splitlines()
found = False
for i, line in enumerate(lines):
if line.startswith(k + '='):
lines[i] = k + '=' + v
found = True
if not found:
lines.append(k + '=' + v)
s = '\n'.join(lines) + '\n'
p.write_text(s)
print('Future test gates set to true. Clear caches immediately.')
PY
php artisan optimize:clear
php artisan config:clear
php artisan cache:clear
This returns the system to locked/default state.
python3 - <<'PY'
from pathlib import Path
p = Path('.env')
s = p.read_text(errors='ignore') if p.exists() else ''
keys = {
'HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_ENABLED': 'false',
'HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_OWNER_APPROVED': 'false',
}
for k, v in keys.items():
lines = s.splitlines()
found = False
for i, line in enumerate(lines):
if line.startswith(k + '='):
lines[i] = k + '=' + v
found = True
if not found:
lines.append(k + '=' + v)
s = '\n'.join(lines) + '\n'
p.write_text(s)
print('Draft save gates set to false. Clear caches immediately.')
PY
php artisan optimize:clear
php artisan config:clear
php artisan cache:clear
Use these only after both gates are intentionally enabled.
URL: https://hdsportszone.com/hd/employee-schedules/builder/draft-shift-locked-real-save employee_id: 1 shift_date: 2026-06-05 start_time: 09:00 end_time: 10:00 period_id: blank or 1 role_position: Controlled Test Draft notes: 26A controlled one-row test manual_confirmation: SAVE_ONE_DRAFT_SHIFT
Confirm row delta is exactly 1 after the future one-row test.
Open the result page after submitting the locked save form. Confirm: - Inserted? Yes - Row delta: 1 - Inserted ID is shown - No publish action occurred - No employee notification occurred
Use after any future one-row test.
python3 - <<'PY'
from pathlib import Path
p = Path('.env')
s = p.read_text(errors='ignore') if p.exists() else ''
for k in ['HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_ENABLED','HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_OWNER_APPROVED']:
lines = s.splitlines()
found = False
for i, line in enumerate(lines):
if line.startswith(k + '='):
lines[i] = k + '=false'
found = True
if not found:
lines.append(k + '=false')
s = '\n'.join(lines) + '\n'
p.write_text(s)
print('Both gates are false.')
PY
php artisan optimize:clear
php artisan route:clear
php artisan view:clear
php artisan config:clear
php artisan cache:clear
Confirm locked/default state after rollback.
Open: https://hdsportszone.com/hd/employee-schedules/builder/draft-shift-locked-save-smoke-test Confirm both gates show disabled and row count is stable.
| Check | Status | Note |
|---|---|---|
| Preflight builder is GET-only | Passed | 26A-14 does not submit any save route. |
| No ENV changes | Passed | This phase only displays commands. It does not edit .env. |
| No insert/update/delete | Passed | Controller performs no database write statements. |
| Row count unchanged | Passed | Detected row delta: 0 |
| No publish action | Passed | Employee-facing schedules are not changed. |
| No employee notifications | Passed | No text/email behavior is introduced. |
| No production override | Passed | Production remains separate. |
| Screen | Expected | Status | Open |
|---|---|---|---|
| 26A-14 Preflight Command Builder hd/employee-schedules/builder/draft-shift-preflight-command-builder |
GET | Passed | Open |
| 26A-13 One-Row Test Prep Packet hd/employee-schedules/builder/draft-shift-one-row-test-prep-packet |
GET | Passed | Open |
| 26A-12 Manual Test Instructions hd/employee-schedules/builder/draft-shift-manual-test-instructions |
GET | Passed | Open |
| 26A-11 Locked Save Smoke Test hd/employee-schedules/builder/draft-shift-locked-save-smoke-test |
GET | Passed | Open |
| 26A-10 Locked Real Save hd/employee-schedules/builder/draft-shift-locked-real-save |
GET | Passed | Open |
| 26A-10 Locked Real Save POST hd/employee-schedules/builder/draft-shifts/locked-real-save |
POST | Passed | Open |
| Production / Build hd/employee-schedules/production |
GET | Passed | Open |
| File | Status | Modified |
|---|---|---|
| 26A-14 Controller app/Http/Controllers/Hd/EmployeeSchedules/EmployeeScheduleDraftShiftPreflightCommandBuilderController.php |
Passed | 2026-06-02 10:55:10 |
| 26A-14 View resources/views/hd/employee_schedules/draft_shift_preflight_command_builder.blade.php |
Passed | 2026-06-02 11:54:29 |
| 26A-13 Controller app/Http/Controllers/Hd/EmployeeSchedules/EmployeeScheduleDraftShiftOneRowTestPrepPacketController.php |
Passed | 2026-06-02 10:45:02 |
| 26A-12 Controller app/Http/Controllers/Hd/EmployeeSchedules/EmployeeScheduleDraftShiftManualTestInstructionsController.php |
Passed | 2026-06-02 10:32:18 |
| 26A-11 Controller app/Http/Controllers/Hd/EmployeeSchedules/EmployeeScheduleDraftShiftLockedSaveSmokeTestController.php |
Passed | 2026-06-02 08:58:52 |
| 26A-10 Controller app/Http/Controllers/Hd/EmployeeSchedules/EmployeeScheduleDraftShiftLockedRealSaveController.php |
Passed | 2026-06-02 08:46:18 |