Skip to content

chore(security): untrack .env - #231

Merged
zyntromedia merged 5 commits into
mainfrom
chore/untrack-env
Sep 15, 2026
Merged

zyntromedia merged 5 commits into
mainfrom
chore/untrack-env

Conversation

@fig-ai-agent

@fig-ai-agent fig-ai-agent Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Summary

.env ถูก track อยู่ที่ root ทั้งที่ทั้ง repo อ่าน env 148 ตัวแปร คนละชุดกันตาม component — ไฟล์เดียวจึงทั้ง document ไม่ครบ และเก็บ secret ไม่ได้ PR นี้ทำให้ .env ไม่ถูก track ทุกจุด และย้าย env template ไปอยู่ข้างโค้ดของแต่ละ component

What changed

Untrack

  • git rm --cached .env — ไฟล์ยังอยู่บนเครื่อง แต่ git ไม่ track และ ignore แล้ว
  • แก้ conflict แบบ modify/delete กับ main → ตอนนี้ mergeable: true

Per-component templates (ตอบ review: ".env files for best depending project structure")

  • graphql_api/, frontend/, scripts/
  • deliverables/{pm-backend, fastapi-obsidian-backend, agent-security-suite, manus-client}
  • deliverables/product-crud/{server,web}

Rewritten root .env.example

  • จัดกลุ่มตามหน้าที่ ทุกตัวแปรมี comment ว่าถูกอ่านจากไฟล์ไหน
  • เพิ่ม docker-compose substitutions (DB_PASSWORD, MINIO_PASSWORD, GRAFANA_PASSWORD)

docs/ENVIRONMENT.md — layout, precedence, ตารางตัวแปรของ core app, กฎ service-name vs localhost, secrets policy, รายการ CI secrets, และ .env ที่ track อยู่โดยเจตนา

Two defects found and fixed

1. .gitignore line 49 (.env.*) match .env.example ทุกชั้น

ตัว template ที่ PR นี้เพิ่มจะถูกเขียนลงดิสก์ แต่ git ignore เงียบ ๆ — git status สะอาด แต่งานไม่เข้า commit เลย เพิ่ม negation !.env.example / !**/.env.example แล้ว โดย .env ยัง ignore เหมือนเดิม

2. JWT อ่านคนละชื่อจาก .env ไฟล์เดียวกัน

Module Variable
app/core/config.py JWT_SECRET
app/config.py JWT_SECRET_KEY

ตั้งอันเดียว → login ผ่าน แต่ token ทุกอัน verify ไม่ผ่าน (401) งงมากเพราะ login สำเร็จ ทั้งคู่ documented พร้อมคำเตือนแล้ว รวมถึง SENTRY_DSN, CACHE_ENABLED, CACHE_TTL ที่ไม่มีใน template เลย

Verification

Check Result
python3 scripts/validate_env_templates.py 0 failures, 0 warnings, exit 0
git check-ignore -v --no-index <each>.env.example ไม่ match — ทั้ง 11 ไฟล์ track ได้
git check-ignore -v --no-index .env .gitignore:48:.env — ยัง ignore
git merge-base --is-ancestor origin/main HEAD true
python3 -m pytest tests/ (new.inprogress.done/) 20 passed

scripts/validate_env_templates.py อยู่ใน repo เพื่อให้เช็คซ้ำได้เอง

Note — CI แดงไม่ใช่จาก PR นี้

lint / Python 3.11 / Python 3.12 fail ที่ขั้น "Set up job":

Unable to resolve action `actions/checkout@f548e57c...`,
unable to find version `f548e57c...`

เป็น pin ที่ resolve ไม่ได้ และ head ของ main เองก็ fail เหมือนกัน (5fca616) — CI แดงทั้ง repo มาก่อนแล้ว ตรงกับ P-001 ซึ่งยังถูก block เพราะ App ไม่มี workflows permission PR นี้ไม่แตะ .github/ เลยแม้แต่ไฟล์เดียว

.env was tracked despite .gitignore already listing it (lines 12, 48).
Inspected the tracked file (without echoing values): it contains no
assignments at all — a stray '*.secret' line and pasted gemini-cli
cheat-sheet text. Full-history audit across all commits touching .env
found no real-looking value, so no rotation is required.

- git rm --cached .env  (file stays on disk, now ignored)
- .env.example already provides the placeholder template
- See SECRETS-SETUP.md for moving values to GitHub Secrets
@zyntromedia

Copy link
Copy Markdown
Member

เห็นว่าคุณเปิดไฟล์ .env ของโปรเจกต์ fastapi-python-boilerplate อยู่ ซึ่งมีตัวแปรลักษณะสำคัญอย่าง

  • BYTEPLUS_ACCESS_KEY
  • BYTEPLUS_SECRET_KEY
  • BYTEPLUS_REGION

และคุณพูดถึง error "Command 'gemini-cli' cannot run while the agent is active" ที่เกิดขึ้นใน VS Code/CLI.


🔐 การจัดการ Secrets ใน GitHub Actions

แทนที่จะเก็บค่าเหล่านี้ใน .env ที่ push ขึ้น GitHub (ซึ่งเสี่ยงมาก) ควรย้ายไปเก็บใน GitHub Actions Secrets:

  1. ไปที่ Settings → Secrets and variables → Actions ของ repository
  2. เพิ่ม secrets:
    • BYTEPLUS_ACCESS_KEY
    • BYTEPLUS_SECRET_KEY
    • BYTEPLUS_REGION
  3. ใน workflow .yml เรียกใช้แบบนี้:
    env:
      BYTEPLUS_ACCESS_KEY: ${{ secrets.BYTEPLUS_ACCESS_KEY }}
      BYTEPLUS_SECRET_KEY: ${{ secrets.BYTEPLUS_SECRET_KEY }}
      BYTEPLUS_REGION: ${{ secrets.BYTEPLUS_REGION }}

🛠 การแก้ Error "Agent Active"

  • ปิด process ที่ชนกัน:
    pkill -f gemini-cli
    pkill -f agent
  • ตรวจสอบ process ที่ยังรันอยู่:
    ps aux | grep -E 'gemini|agent|llm'
  • รีสตาร์ท VS Code ถ้ายังไม่หาย

⚙️ การตั้งค่า Provider อื่น ๆ

  • Mistral → ตั้งค่า MISTRAL_API_KEY ใน environment หรือ VS Code settings
  • Friendly Local (Ollama) → ตรวจสอบว่า ollama serve รันอยู่ และตั้งค่า endpoint เป็น http://localhost:11434/v1
  • OpenAI → ตั้งค่า OPENAI_API_KEY และเลือก model เช่น gpt-4o-mini
  • Gemini CLI → ใช้ gemini auth login และตั้งค่า default model เช่น gemini-1.5-flash

✅ แนวทางที่ปลอดภัย

  • เก็บ ทุก key ใน GitHub Secrets ไม่ใส่ใน .env ที่ commit
  • ใช้ workflow YAML ดึงค่าออกมาแทนการ hardcode
  • ตรวจสอบว่าไม่มี extension/agent ซ้อนกันใน VS Code

คุณอยากให้ผมช่วยเขียน ตัวอย่าง workflow YAML ที่รวมการใช้ secrets เหล่านี้กับ FastAPI pipeline ของคุณเลยไหมครับ? จะได้เป็น production‑ready CI/CD spec ที่ปลอดภัยและตรงกับสไตล์ที่คุณใช้ (DAG, caching, security scans).

@zyntromedia

Copy link
Copy Markdown
Member

ผมดูไฟล์ .env ที่คุณเปิดอยู่แล้วครับ ✨
มันมีทั้งตัวแปรสำคัญ (BYTEPLUS_ACCESS_KEY, BYTEPLUS_SECRET_KEY, BYTEPLUS_REGION) และข้อความ troubleshooting เกี่ยวกับ error "Command 'gemini-cli' cannot run while the agent is active" ซึ่งบอกชัดว่ามี process agent ซ้อนกันอยู่ใน VS Code หรือ CLI ของคุณ


🔐 สิ่งที่ควรทำกับ .env

  • อย่า commit ค่า secret ลง GitHub โดยตรง
    ย้ายไปเก็บใน GitHub Actions Secrets (Settings → Secrets and variables → Actions)
  • เรียกใช้ใน workflow:
    env:
      BYTEPLUS_ACCESS_KEY: ${{ secrets.BYTEPLUS_ACCESS_KEY }}
      BYTEPLUS_SECRET_KEY: ${{ secrets.BYTEPLUS_SECRET_KEY }}
      BYTEPLUS_REGION: ${{ secrets.BYTEPLUS_REGION }}

🛠 การแก้ Error "Agent Active"

  1. ปิด process ที่ชนกัน:
    pkill -f gemini-cli
    pkill -f agent
  2. ตรวจสอบ process ที่ยังรันอยู่:
    ps aux | grep -E 'gemini|agent|llm'
  3. รีสตาร์ท VS Code ถ้ายังไม่หาย

⚙️ Provider Configurations

  • GitHub Copilot → ตรวจสอบ subscription ที่ GitHub Copilot Settings
  • Mistral → ตั้งค่า MISTRAL_API_KEY และเลือก model (mistral-small, mistral-medium)
  • Friendly Local (Ollama) → รัน ollama serve และตั้งค่า endpoint http://localhost:11434/v1
  • OpenAI → ตั้งค่า OPENAI_API_KEY และเลือก model เช่น gpt-4o-mini
  • Gemini CLI → ใช้ gemini auth login และ gemini config set model gemini-1.5-flash

✅ แนวทางที่ปลอดภัย

  • เก็บทุก key ใน Secrets ไม่ใส่ใน .env ที่ commit
  • ใช้ workflow YAML ดึงค่าออกมาแทนการ hardcode
  • ตรวจสอบว่าไม่มี extension/agent ซ้อนกันใน VS Code

คุณอยากให้ผมช่วยเขียน ตัวอย่าง GitHub Actions workflow YAML ที่รวมการใช้ secrets เหล่านี้กับ FastAPI pipeline ของคุณเลยไหมครับ จะได้เป็น spec ที่ hardened และตรงกับสไตล์ CI/CD ที่คุณใช้ (DAG, caching, security scans)?

@zyntromedia

Copy link
Copy Markdown
Member

ผมเห็นว่าคุณเปิดไฟล์ .env ของ repo fastapi-python-boilerplate อยู่บน GitHub ซึ่งมี secrets สำคัญอย่าง BYTEPLUS_ACCESS_KEY, BYTEPLUS_SECRET_KEY, และ BYTEPLUS_REGION รวมถึงข้อความ troubleshooting ที่คุณใส่ไว้เองเกี่ยวกับ error ของ gemini-cli ครับ


🔐 สิ่งที่ควรทำกับไฟล์ .env

  • อย่า commit ค่า secret ลง GitHub โดยตรง เพราะจะเปิดเผยข้อมูลสำคัญต่อสาธารณะ
  • ย้ายไปเก็บใน GitHub Actions Secrets (Settings → Secrets and variables → Actions)
  • เรียกใช้ใน workflow:
    env:
      BYTEPLUS_ACCESS_KEY: ${{ secrets.BYTEPLUS_ACCESS_KEY }}
      BYTEPLUS_SECRET_KEY: ${{ secrets.BYTEPLUS_SECRET_KEY }}
      BYTEPLUS_REGION: ${{ secrets.BYTEPLUS_REGION }}

🛠 การแก้ Error "gemini-cli cannot run while the agent is active"

  • ปิด process ที่ชนกัน:
    pkill -f gemini-cli
    pkill -f agent
  • ตรวจสอบ process ที่ยังรันอยู่:
    ps aux | grep -E 'gemini|agent|llm'
  • รีสตาร์ท VS Code ถ้ายังไม่หาย

⚙️ Provider Configurations

  • GitHub Copilot → ตรวจสอบ subscription ที่ GitHub Copilot Settings
  • Mistral → ตั้งค่า MISTRAL_API_KEY และเลือก model (mistral-small, mistral-medium)
  • Friendly Local (Ollama) → รัน ollama serve และตั้งค่า endpoint http://localhost:11434/v1
  • OpenAI → ตั้งค่า OPENAI_API_KEY และเลือก model เช่น gpt-4o-mini
  • Gemini CLI → ใช้ gemini auth login และ gemini config set model gemini-1.5-flash

✅ แนวทางที่ปลอดภัย

  • เก็บทุก key ใน Secrets ไม่ใส่ใน .env ที่ commit
  • ใช้ workflow YAML ดึงค่าออกมาแทนการ hardcode
  • ตรวจสอบว่าไม่มี extension/agent ซ้อนกันใน VS Code

คุณอยากให้ผมช่วยเขียน ตัวอย่าง GitHub Actions workflow YAML ที่รวมการใช้ secrets เหล่านี้กับ FastAPI pipeline ของคุณเลยไหมครับ จะได้เป็น spec ที่ hardened และตรงกับสไตล์ CI/CD ที่คุณใช้ (DAG, caching, security scans)?

@zyntromedia
zyntromedia marked this pull request as draft September 14, 2026 16:58
@zyntromedia zyntromedia added bug แก้ไขข้อผิดพลาด bugfix แก้ไขข้อผิดพลาด labels Sep 14, 2026
@zyntromedia
zyntromedia self-requested a review September 14, 2026 16:58

@zyntromedia zyntromedia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fig find better quality .env >>>check project structure and write)

@zyntromedia zyntromedia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fig suggest .env files for best depending project structure.

main rewrote .env after this PR was opened, producing a modify/delete
conflict. Resolution keeps this PR's intent: .env stays untracked and
ignored (verified with git check-ignore).

Refs #231
…emplates

Review feedback asked for higher-quality .env files that match the project
structure. The repo is a multi-component monorepo — the code reads 148
distinct env vars while the single root .env.example declared 16 — so one
root file cannot document it.

- Add .env.example beside each component that reads env: graphql_api/,
  frontend/, scripts/, deliverables/{pm-backend,fastapi-obsidian-backend,
  agent-security-suite,manus-client}, deliverables/product-crud/{server,web}
- Rewrite the root .env.example: grouped by concern, every var annotated with
  the file that reads it, plus the docker-compose substitutions
- Fix .gitignore: `.env.*` was swallowing every per-component .env.example.
  New templates were invisible to git and would never have been committed.
  Adds !.env.example / !**/.env.example negations; .env stays ignored
- Add docs/ENVIRONMENT.md: layout, precedence, core-app variable reference,
  the service-name-vs-localhost rule, secrets policy, CI secret list, and the
  deliberate tracked-.env fixture

Two undocumented gaps found and closed while writing this:
- app/ reads JWT_SECRET (app/core/config.py) and JWT_SECRET_KEY (app/config.py)
  from the same .env. Setting only one makes every token fail verification
  while login still succeeds. Both now documented with that warning.
- SENTRY_DSN, CACHE_ENABLED, CACHE_TTL had no template entry.

Verified: 11 templates parse; every declared key resolves to a real code read
(scripts/validate_env_templates.py — 0 failures, 0 warnings); all 23 vars read
by app/ are documented; .env still ignored at every level; the fig-best-practices
broken-project .env remains tracked as its test fixture requires.

Refs #231
…alidator

Records PR #231 per the repo's Definition of Done, and moves the env-template
verification out of an author's workspace and into the repository so it can be
re-run:

- scripts/validate_env_templates.py — parses every .env.example, asserts keys
  are well-formed and unique, rejects values that look like real secrets, and
  requires each declared key to resolve to an actual read in the component it
  documents. Also asserts every variable the core app reads is documented.
  Exits non-zero on failure so it can gate CI.
- new.inprogress.done/inprogress/TASK-20260915-001 — task record with scope,
  out-of-scope decisions, acceptance criteria and actual validation output.
- CHANGELOG.md — 2026-09-15 section.

Validation: `python3 scripts/validate_env_templates.py` -> 0 failures,
0 warnings, exit 0. `python3 -m pytest tests/` in new.inprogress.done/ ->
20 passed.

Refs #231
@fig-ai-agent

fig-ai-agent Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

ทำตาม review แล้วครับ — .env ตาม project structure

ตอบทั้งสอง comment (find better quality .env >>> check project structure) — สแกนทั้ง repo ก่อนเขียน เพื่อให้แต่ละไฟล์ตรงกับโค้ดจริง ไม่ใช่เดา

ผลสแกน: โค้ดอ่าน env 148 ตัวแปร แต่ root .env.example เดคลерไว้แค่ 16 ตัว — repo นี้เป็น monorepo หลาย component แต่ละอันคนละชุด จึงเพิ่ม template ข้างโค้ดของแต่ละที่

Component Template ตัวแปร
Core FastAPI app .env.example (เขียนใหม่) 43
GraphQL API graphql_api/.env.example 11
Frontend (Vite) frontend/.env.example 1
Ops scripts scripts/.env.example 8
PM backend deliverables/pm-backend/.env.example 10
Obsidian backend deliverables/fastapi-obsidian-backend/.env.example 7
Agent security deliverables/agent-security-suite/.env.example 3
Manus client deliverables/manus-client/.env.example 2
product-crud server deliverables/product-crud/server/.env.example 4
product-crud web deliverables/product-crud/web/.env.example 2

ทุกไฟล์มี comment ว่าตัวแปรถูกอ่านจาก source ไฟล์ไหน + ค่า default จริงจากโค้ด

เจอ 2 บั๊กที่ต้องแก้ก่อน ไม่งั้นงานไม่เข้า commit

1. .gitignore บรรทัด 49 (.env.*) match .env.example ทุกชั้น

ตอนแรกเขียน template ลงดิสก์ครบ แต่ git status สะอาด — เพราะ .env.* กิน .env.example ด้วย ไฟล์จะอยู่บนเครื่องแต่ไม่เคยเข้า commit เพิ่ม negation แล้ว โดย .env ยัง ignore เหมือนเดิม:

.env.*
!.env.example
!**/.env.example

2. JWT อ่านคนละชื่อจาก .env ไฟล์เดียวกัน

  • app/core/config.pyJWT_SECRET
  • app/config.pyJWT_SECRET_KEY

ตั้งตัวเดียว → login ผ่าน แต่ token ทุกอัน verify ไม่ผ่าน (401) เพราะคนละ key ในไฟล์เดียวกัน ทั้งคู่ documented พร้อมคำเตือนแล้ว

เพิ่มให้ครบด้วย: SENTRY_DSN, CACHE_ENABLED, CACHE_TTL ซึ่งไม่มีใน template เลย

เอกสาร

docs/ENVIRONMENT.md — layout, precedence, ตารางตัวแปร core app, กฎ service-name vs localhost, secrets policy, รายการ CI secrets

ตรวจซ้ำได้เอง

scripts/validate_env_templates.py อยู่ใน repo:

PASS  .env.example  (43 vars)
PASS  graphql_api/.env.example  (11 vars)
...
RESULT: 0 failures, 0 warnings

เช็คว่า (1) ทุก template parse ได้ (2) ทุก key resolve กลับไปหาการอ่านจริงใน source ของ component นั้น (3) ทุกตัวแปรที่ app/ อ่าน ถูก document แล้ว

ที่ยังไม่แตะ

  • deliverables/fig-best-practices/examples/broken-project/.env — เป็น test fixture ที่ quality gate assert อยู่ ลบแล้วเทสต์จะกลายเป็น vacuous
  • VAULT_ADDR, VAULT_ROLE, ALERT_SLACK_WEBHOOK — ไม่มีโค้ดอ่านเลย จึง label เป็น Reserved ไม่ลบ เพื่อรอ broker/Vault rollout

`deliverables/docs-verify/` compares the README's declared `docs/` count against
the tree. Adding docs/ENVIRONMENT.md moved the real count to 38 while the README
still declared 37, so the gate flagged it — caught on a fresh run against the
branch. Corrected, and `environment configuration` added to the description of
what the directory holds.

docs-verify now reports 16/17; the single remaining failure is P-001 (the five
unparseable workflow files), which fails identically on main's own head.

Refs #231
@fig-ai-agent
fig-ai-agent Bot marked this pull request as ready for review September 15, 2026 11:48
@fig-ai-agent

fig-ai-agent Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

@zyntromedia ขอ review อีกครั้งครับ — มี commit ใหม่ 3 ตัวหลัง review ของคุณ และ PR เป็น ready for review แล้ว

สำคัญ: review ทั้ง 4 อันของคุณ (รวม 2 อันที่ CHANGES_REQUESTED) ส่งบน commit d2d29a4 ซึ่งเป็นตัวเก่าแล้ว ตอนนี้ HEAD อยู่ที่ 5a196307 — GitHub จึงยังรายงาน reviewDecision: CHANGES_REQUESTED อยู่ ต้องมี approve ใหม่บน commit ล่าสุดถึงจะ merge ได้ครับ

ตอบโจทย์ review: ".env files for best depending project structure"

สแกนทั้ง repo ก่อนเขียน — โค้ดอ่าน env 148 ตัวแปร แต่ root .env.example เดคลерไว้แค่ 16 ตัว repo นี้เป็น monorepo หลาย component แต่ละอันคนละชุด จึงเพิ่ม .env.example ข้างโค้ดของแต่ละที่

Component Template ตัวแปร
Core FastAPI app .env.example (เขียนใหม่) 43
GraphQL API graphql_api/.env.example 11
Frontend (Vite) frontend/.env.example 1
Ops scripts scripts/.env.example 8
PM backend deliverables/pm-backend/.env.example 10
Obsidian backend deliverables/fastapi-obsidian-backend/.env.example 7
Agent security deliverables/agent-security-suite/.env.example 3
Manus client deliverables/manus-client/.env.example 2
product-crud server deliverables/product-crud/server/.env.example 4
product-crud web deliverables/product-crud/web/.env.example 2

ทุกไฟล์มี comment ว่าตัวแปรถูกอ่านจาก source ไฟล์ไหน พร้อมค่า default จริงจากโค้ด

2 บั๊กที่เจอระหว่างทาง (แก้แล้ว)

1. .gitignore บรรทัด 49 (.env.*) match .env.example ทุกชั้น — template ที่เพิ่มจะอยู่บนดิสก์แต่ git ignore เงียบ ๆ git status สะอาด แต่งานไม่เข้า commit เลย เพิ่ม negation แล้ว โดย .env ยัง ignore เหมือนเดิม

2. JWT อ่านคนละชื่อจาก .env ไฟล์เดียวกันapp/core/config.py ใช้ JWT_SECRET, app/config.py ใช้ JWT_SECRET_KEY ตั้งอันเดียว → login ผ่าน แต่ token ทุกอัน verify ไม่ผ่าน (401) เพิ่มให้ครบด้วย: SENTRY_DSN, CACHE_ENABLED, CACHE_TTL ที่ไม่มีใน template เลย

ตรวจซ้ำได้เอง

scripts/validate_env_templates.py อยู่ใน repo แล้ว — 0 failures, 0 warnings, exit 0 และ docs-verify 16/17 (ที่ fail เหลือตัวเดียวคือ P-001 ซึ่ง head ของ main เองก็ fail เหมือนกัน)

CI แดงไม่ได้มาจาก PR นี้

head ของ main (5fca616) fail ชุดเดียวกัน — Analyze (go), Python 3.11, Python 3.12, lint (main fail เพิ่ม Code Quality & Linting กับ deploy ด้วยซ้ำ) PR นี้ไม่แตะ .go และไม่แตะ .github/ เลยแม้แต่ไฟล์เดียว จึงเป็น UNSTABLE จากของเดิม

@fig-ai-agent
fig-ai-agent Bot requested a review from zyntromedia September 15, 2026 11:49
@fig-ai-agent

fig-ai-agent Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

@zyntromedia ขอถามเรื่องไทม์ไลน์ครับ — PR นี้พร้อม review แล้ว (commit 5a19630 เป็นอันล่าสุด หลัง review เดิม 3 commit)

ที่ต้องมีคือ approve ใหม่บน commit ล่าสุด เพราะ review ทั้ง 4 อันของคุณส่งบน d2d29a4 ซึ่งเก่าไปแล้ว GitHub จึงยังรายงาน reviewDecision: CHANGES_REQUESTED อยู่ ถ้าจะให้เปลี่ยนต้องกด Approve บน HEAD

ถามตรง ๆ สองข้อครับ:

  1. จะกลับมาดูได้ประมาณเมื่อไหร่ — วันนี้ พรุ่งนี้ หรือหลังจากนั้น? ถ้าต้องรอหลายวัน ผมจะได้แจ้งให้คนอื่นช่วย review แทน ไม่ให้งานค้าง
  2. คำขอ ".env files for best depending project structure" ที่ตอบไป ตรงพอไหม — เพิ่ม .env.example ครบ 10 component (core 43 ตัวแปร, graphql_api 11, scripts 8, pm-backend 10 ฯลฯ) ทุกตัวมี comment ว่าอ่านจากไฟล์ไหน ถ้ายังไม่ตรงกับที่ต้องการ บอกได้เลยว่าอยากได้มุมไหนเพิ่ม จะได้แก้ให้จบในรอบเดียว

ไม่มีอะไรต้องแก้เพิ่มรออยู่ — เหลือแค่ approve ครับ

@zyntromedia zyntromedia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fig approve

@zyntromedia
zyntromedia merged commit 4211aed into main Sep 15, 2026
5 of 9 checks passed
@zyntromedia
zyntromedia deleted the chore/untrack-env branch September 15, 2026 12:17
@zyntromedia
zyntromedia self-requested a review September 15, 2026 12:18
@fig

fig commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

@fig find better quality .env >>>check project structure and write)

Do it yourself!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug แก้ไขข้อผิดพลาด bugfix แก้ไขข้อผิดพลาด

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants