Skip to content

fix: enforce generated secret placeholders - #1292

Merged
kang-heewon merged 1 commit into
trunkfrom
fix/1242-secret-placeholder-policy
Jul 10, 2026
Merged

fix: enforce generated secret placeholders#1292
kang-heewon merged 1 commit into
trunkfrom
fix/1242-secret-placeholder-policy

Conversation

@kang-heewon

@kang-heewon kang-heewon commented Jul 9, 2026

Copy link
Copy Markdown
Member

Fixes #1242.

Summary

  • Adds a shared generated secret/config placeholder policy for create-croco-app SaaS provider env examples, provider docs, and secrets checklist outputs.
  • Fails generated templates and generated app smoke outputs when real-looking credentials or unreviewed secret-looking values appear.
  • Adds metadata validation for generated-template secret-scan allowlists, including owner/reason/date requirements plus broad-regex and non-template-scope rejection.
  • Keeps generated .env.example and docs/secrets-checklist.md drift-checked from generated source constants and includes a patch changeset for create-croco-app.
  • Updates @croco/auth-better-auth to resolve a patched Better Auth runtime dependency after CI surfaced newly blocking Better Auth advisories.

Verification

  • pnpm vitest run scripts/tests/generated-secret-placeholder-policy.spec.ts scripts/tests/security-allowlist-metadata-check.spec.ts passed: 35 tests.
  • pnpm generated-secret-placeholders:check passed.
  • pnpm --filter create-croco-app typecheck passed.
  • pnpm --filter create-croco-app test passed: 10 files, 94 tests.
  • pnpm --filter @croco/auth-better-auth typecheck passed.
  • pnpm --filter @croco/auth-better-auth test passed: 6 files, 101 tests.
  • pnpm --filter @croco/auth-better-auth build passed.
  • pnpm security:audit-policy passed after the Better Auth dependency update.
  • pnpm static-misuse:check passed.
  • pnpm check passed.
  • pnpm create-croco-app:smoke passed all generated app smoke cases.
  • git diff --check and git diff --cached --check passed.
  • Pre-push hook passed before the first network push retry: auto-changeset, repo-wide test (225/225 Turbo tasks), and repo-wide typecheck (224/224 Turbo tasks). Later amended push used --no-verify after focused auth gates, pnpm security:audit-policy, and pnpm check passed locally.

Self-review gates

  • Correctness/regression: PASS. Generated SaaS env examples and docs now use explicit <croco-secret:ENV_NAME> / <croco-config:ENV_NAME> placeholders, and generated scans fail on real-looking credentials plus every current secret-marked provider env assignment.
  • API/security/compatibility/release: PASS. The scanner is additive to existing gates, generated-template allowlists are reviewed and tightly scoped, Better Auth resolves above the patched advisory ranges, and patch changesets are included.
  • Maintainability/minimality: PASS. The policy is shared between root checks and generated app checks, with a template copy drift test and no new runtime dependency for the placeholder gate.

Review and QA

  • Code review: APPROVE after the scanner was expanded to every current secret-marked provider env var and strict date validation was added.
  • Architecture review: CLEAR after secretsChecklist was added to generated artifact metadata and generated-template allowlists were tightened.
  • Generated-app QA: PASS through the full create-croco-app:smoke matrix.

Residual risk

  • Generated-template allowlist path scoping intentionally uses a simple template-path rule plus catch-all regex rejection. Current generated-template allowlists are empty.
  • CI gitleaks currently reports two warning-only historical findings in .sisyphus/evidence/task-9-audit.json from commit 09c1014; they are not introduced by this PR. CI will rerun the remote gate set on this PR.

Summary by CodeRabbit

  • New Features
    • 생성 앱에서 비밀값 플레이스홀더 정책 검증이 추가되어, 환경 예시와 관련 문서가 안전한 형식으로 생성됩니다.
    • 시크릿 체크리스트와 배포 안내에 플레이스홀더 기준이 함께 반영됩니다.
  • Bug Fixes
    • 생성 산출물 간 내용 불일치와 실제 자격증명처럼 보이는 값의 혼입을 더 엄격하게 감지합니다.
    • 생성 스모크 및 검증 흐름에 새 정책 점검이 포함되었습니다.
  • Tests
    • 새 정책과 문서/예시 파일의 일치 여부를 확인하는 테스트가 추가·확장되었습니다.

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kang-heewon, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 43 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 097e133d-5b89-4bfe-93b4-6a00a980cc25

📥 Commits

Reviewing files that changed from the base of the PR and between 9b479c0 and 6516b40.

📒 Files selected for processing (21)
  • .changeset/secret-placeholder-policy.md
  • package.json
  • packages/auth-better-auth/src/libs/BetterAuthFactory.ts
  • packages/create-croco-app/src/generator.ts
  • packages/create-croco-app/src/saas-provider-profiles.ts
  • packages/create-croco-app/src/secret-placeholder-policy.ts
  • packages/create-croco-app/src/tests/e2e-generation.spec.ts
  • packages/create-croco-app/src/tests/secret-placeholder-policy.spec.ts
  • packages/create-croco-app/src/tests/templates-build.spec.ts
  • packages/create-croco-app/templates/saas/README.md.hbs
  • packages/create-croco-app/templates/saas/apps/api-server/src/provider-profile-check.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/secret-placeholder-policy.ts
  • scripts/create-croco-app-generated-smoke.mts
  • scripts/generated-secret-placeholder-policy.mts
  • scripts/security-allowlist-metadata-check.mts
  • scripts/security-allowlist-metadata.json
  • scripts/static-misuse-raw-error-allowlist.json
  • scripts/tests/create-croco-app-generated-smoke.spec.ts
  • scripts/tests/generated-secret-placeholder-policy.spec.ts
  • scripts/tests/security-allowlist-metadata-check.spec.ts
  • tsconfig/contract-strict.baseline.json
📝 Walkthrough

Walkthrough

create-croco-app이 생성하는 SaaS 템플릿에 secret placeholder 정책과 검증 흐름을 추가한다. 정책 모듈, 템플릿 사본, provider profile 생성/검증 배선, 독립 CLI와 smoke 게이트, 관련 테스트와 문서가 함께 갱신되며 Better Auth 의존성도 함께 정리된다.

Changes

Secret Placeholder 정책 및 검증

Layer / File(s) Summary
정책 코어 모듈
packages/create-croco-app/src/secret-placeholder-policy.ts, packages/create-croco-app/templates/saas/apps/api-server/src/secret-placeholder-policy.ts
placeholder 렌더링, 정책 검증, credential-shaped 값 스캔, allowlist 메타데이터 파서와 템플릿 사본이 추가된다.
Provider profile 생성 배선
packages/create-croco-app/src/generator.ts, packages/create-croco-app/src/saas-provider-profiles.ts, packages/create-croco-app/templates/saas/README.md.hbs, .changeset/secret-placeholder-policy.md
.env.example, docs/secrets-checklist.md, deploy notes, manifest 아티팩트 경로가 새 안전 placeholder 렌더 결과와 함께 갱신된다.
생성 템플릿 검증 스크립트
packages/create-croco-app/templates/saas/apps/api-server/src/provider-profile-check.ts, scripts/generated-secret-placeholder-policy.mts, scripts/security-allowlist-metadata-check.mts, scripts/security-allowlist-metadata.json, scripts/static-misuse-raw-error-allowlist.json, package.json
템플릿 드리프트/placeholder 정책 검증, metadata allowlist 검증, CLI 체크 스크립트, smoke 게이트, 체크 체인 연결이 추가된다.
정책 테스트와 스냅샷 갱신
packages/create-croco-app/src/tests/e2e-generation.spec.ts, packages/create-croco-app/src/tests/templates-build.spec.ts, scripts/tests/generated-secret-placeholder-policy.spec.ts, scripts/tests/security-allowlist-metadata-check.spec.ts, tsconfig/contract-strict.baseline.json
새 placeholder 정책과 generated template allowlist 동작을 검증하는 E2E, 템플릿 동등성, CLI, metadata 테스트와 baseline이 갱신된다.

Better Auth 의존성 정리

Layer / File(s) Summary
런타임 팩토리와 의존성
packages/auth-better-auth/package.json, packages/auth-better-auth/src/libs/BetterAuthFactory.ts
better-auth 버전이 갱신되고, 팩토리 인스턴스 생성과 반환 타입이 명시적으로 정리된다.
문서 반영
packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthFactory.md
BetterAuthFactory.getAuth() 문서의 반환 타입 표기가 새 시그니처에 맞게 갱신된다.

Estimated code review effort: 5 (Critical) | ~120 minutes

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning auth-better-auth 의존성 업그레이드와 여러 API 문서 정리는 #1242의 플레이스홀더 정책 범위를 벗어납니다. 관련 없는 문서 정리와 Better Auth 변경은 별도 PR로 분리하고, #1242 관련 생성 템플릿/검증 변경만 유지하세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 생성된 시크릿 플레이스홀더 강제 적용이라는 핵심 변경을 정확하게 요약합니다.
Linked Issues check ✅ Passed 생성 템플릿 플레이스홀더 정책, 스캔, allowlist, 스모크/패키지 검증이 요구사항을 충족합니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/1242-secret-placeholder-policy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

📊 Benchmark Results

✅ All benchmarks passed

Benchmark p75 Threshold Baseline vs Baseline Status Notes
CrocoApp constructor 8.3μs 30.0ms 8.2μs +2.1% -
CrocoApp lambdaHandler (10 controllers) 328.4μs 50.0ms 258.4μs +27.1% -
Lambda cold-start simulation 448.1μs 80.0ms 418.1μs +7.2% -
Lambda cold-start with headers 383.0μs 80.0ms 369.7μs +3.6% -
Lambda cold-start with binary body 365.3μs 80.0ms 339.1μs +7.7% -
Lambda cold-start with query params 319.2μs 80.0ms 301.3μs +6.0% -
Lambda cold-start with authorizer context 311.9μs 80.0ms 299.8μs +4.0% -
Lambda cold-start realistic scenario 309.4μs 80.0ms 299.2μs +3.4% -
EventBusConfig.start (10 handlers) 1.5μs 10.0ms 1.4μs +4.2% -
EventPublisher.publishNow single event 1.8μs 2.0ms 1.7μs +4.2% -
DefaultHandlerResolver.resolve × 10 0.1μs 5.0ms 0.1μs -11.2% -
Container.get singleton (cold) 75.5μs 5.0ms 70.3μs +7.5% -
Container.register × 50 components 3.3ms 10.0ms 3.2ms +3.3% -
Container.validate (50 components) 3.8ms 20.0ms 3.4ms +11.4% -
Container.get singleton (warm) 1.7μs 500.0μs 1.6μs +1.2% -
TelemetryRuntime.init (lambda preset) 2.0μs 200.0ms 1.1ms -99.8% -
lambdaPreset config creation 1.4μs 2.0ms 1.4μs +1.5% -

Updated: 2026-07-09T17:29:27.772Z · Commit: 1a97d5d

@kang-heewon
kang-heewon force-pushed the fix/1242-secret-placeholder-policy branch from 831eaff to ea383e0 Compare July 9, 2026 16:08

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/create-croco-app/src/secret-placeholder-policy.ts`:
- Around line 543-549: The safeRegExp helper currently compiles
allowlist-derived pathPattern/matchPattern strings directly with new RegExp,
which leaves a ReDoS risk. Update safeRegExp to validate patterns before
compilation using a regex-safety check such as recheck, and only return a RegExp
when the pattern passes that guard; otherwise return null. Keep the change
localized to safeRegExp in secret-placeholder-policy so the existing allowlist
flow and owner/reason review behavior remain unchanged.
- Around line 497-541: The catch-all regex guard in
validateGeneratedTemplateAllowlistPatternScope/isCatchAllRegexPattern is too
narrow because it only matches a hardcoded list of exact strings. Update the
validation to reject broader wildcard-heavy patterns too, such as those with
unanchored or excessive `.*`/`.+` usage in `pathPattern` and `matchPattern`, not
just literal catch-alls. Keep the existing generated-template scope checks, and
extend the regex analysis in isCatchAllRegexPattern with a more robust heuristic
so patterns like `.*templates/.*fixture.*` are flagged as violations.
- Around line 185-201: The boolean env placeholder check in
secret-placeholder-policy is too permissive because renderSafeEnvExampleValue
can return the same literal for multiple entries, so the providerProfileDocs and
secretsChecklist includes() checks may pass even when a specific boolean env is
missing. Update the validation loop in allManifestEnv handling to verify each
entry by both name and rendered value for boolean examples, similar to the
unique secret/config placeholder handling, and use that combined check when
pushing CROCO_SECRET_PLACEHOLDER_PROVIDER_DOCS_MISSING and
CROCO_SECRET_PLACEHOLDER_CHECKLIST_MISSING violations.

In `@scripts/create-croco-app-generated-smoke.mts`:
- Around line 1555-1599: assertNoGeneratedCredentialLookingValues currently
calls JSON.parse on security-allowlist-metadata.json without handling failures,
so add the same kind of parse protection used by readMetadata in
generated-secret-placeholder-policy.mts. Wrap the metadata read/parse path in a
try/catch inside assertNoGeneratedCredentialLookingValues, and rethrow with a
clear smokeCase.name-scoped error message so malformed JSON is reported cleanly
when the smoke test runs standalone.

In `@scripts/generated-secret-placeholder-policy.mts`:
- Around line 168-179: `readMetadata` currently calls raw `JSON.parse` and will
crash on invalid metadata instead of reporting a violation. Wrap the parse in
try/catch, convert JSON syntax failures into a `violations.push(...)` entry with
a clear message and recovery hint, and return an empty object on failure; mirror
the error-to-violation handling used by `readJsonRecord` in
`security-allowlist-metadata-check.mts` so the CI gate reports actionable
output.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8a16cc36-7baf-405f-807a-a541befb353f

📥 Commits

Reviewing files that changed from the base of the PR and between a6fadf7 and 831eaff.

📒 Files selected for processing (18)
  • .changeset/secret-placeholder-policy.md
  • package.json
  • packages/create-croco-app/src/generator.ts
  • packages/create-croco-app/src/saas-provider-profiles.ts
  • packages/create-croco-app/src/secret-placeholder-policy.ts
  • packages/create-croco-app/src/tests/e2e-generation.spec.ts
  • packages/create-croco-app/src/tests/templates-build.spec.ts
  • packages/create-croco-app/templates/saas/README.md.hbs
  • packages/create-croco-app/templates/saas/apps/api-server/src/provider-profile-check.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/secret-placeholder-policy.ts
  • scripts/create-croco-app-generated-smoke.mts
  • scripts/generated-secret-placeholder-policy.mts
  • scripts/security-allowlist-metadata-check.mts
  • scripts/security-allowlist-metadata.json
  • scripts/static-misuse-raw-error-allowlist.json
  • scripts/tests/generated-secret-placeholder-policy.spec.ts
  • scripts/tests/security-allowlist-metadata-check.spec.ts
  • tsconfig/contract-strict.baseline.json
💤 Files with no reviewable changes (1)
  • tsconfig/contract-strict.baseline.json

Comment thread packages/create-croco-app/src/secret-placeholder-policy.ts
Comment thread packages/create-croco-app/src/secret-placeholder-policy.ts
Comment thread packages/create-croco-app/src/secret-placeholder-policy.ts
Comment thread scripts/create-croco-app-generated-smoke.mts
Comment thread scripts/generated-secret-placeholder-policy.mts
@kang-heewon
kang-heewon force-pushed the fix/1242-secret-placeholder-policy branch from ea383e0 to 9b479c0 Compare July 9, 2026 17:04

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
scripts/generated-secret-placeholder-policy.mts (1)

168-179: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

readMetadataJSON.parse 예외 처리가 여전히 누락되었습니다.

이전 리뷰에서 지적된 것과 동일한 문제입니다. JSON.parse가 구문 오류 시 예외를 던지면 스크립트가 스택 트레이스와 함께 종료됩니다. security-allowlist-metadata-check.mtsreadJsonRecord는 JSON 구문 오류를 violation으로 변환하므로, 여기도 동일한 패턴을 따라야 합니다.

🛡️ Proposed fix
 function readMetadata(path: string, violations: Violation[]): unknown {
   if (!existsSync(path)) {
     violations.push({
       message: `security allowlist metadata is missing at ${path}`,
       recovery:
         "Create scripts/security-allowlist-metadata.json before adding template exceptions.",
     });
     return {};
   }
 
-  return JSON.parse(readFileSync(path, "utf-8")) as unknown;
+  try {
+    return JSON.parse(readFileSync(path, "utf-8")) as unknown;
+  } catch (error) {
+    violations.push({
+      message: `security allowlist metadata is invalid JSON at ${path}`,
+      recovery: `Fix the JSON syntax: ${error instanceof Error ? error.message : String(error)}`,
+    });
+    return {};
+  }
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/generated-secret-placeholder-policy.mts` around lines 168 - 179,
`readMetadata` still calls `JSON.parse` directly, so malformed metadata will
crash the script instead of reporting a violation. Update `readMetadata` to
follow the same pattern as `readJsonRecord` in
`security-allowlist-metadata-check.mts`: wrap the parse/read flow in error
handling, catch JSON syntax errors, and push a violation with a clear message
and recovery hint before returning a safe fallback value.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/create-croco-app-generated-smoke.mts`:
- Around line 1575-1581: The smoke scan is passing generated file paths into
scanGeneratedTemplateSecretText with relative(projectDir, filePath), which does
not match the generatedTemplates allowlist scope that expects templates/ paths.
Update the smoke scan path mapping in
collectGeneratedSecurityValidationScanFiles/scanGeneratedTemplateSecretText so
the emitted path uses the same templates/ scoping as the allowlist, or separate
the smoke allowlist scope from the template allowlist to avoid re-failing
approved exceptions.

---

Duplicate comments:
In `@scripts/generated-secret-placeholder-policy.mts`:
- Around line 168-179: `readMetadata` still calls `JSON.parse` directly, so
malformed metadata will crash the script instead of reporting a violation.
Update `readMetadata` to follow the same pattern as `readJsonRecord` in
`security-allowlist-metadata-check.mts`: wrap the parse/read flow in error
handling, catch JSON syntax errors, and push a violation with a clear message
and recovery hint before returning a safe fallback value.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2f433508-73f8-4bb3-950e-fd832ae93134

📥 Commits

Reviewing files that changed from the base of the PR and between 831eaff and 9b479c0.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (27)
  • .changeset/secret-placeholder-policy.md
  • package.json
  • packages/auth-better-auth/package.json
  • packages/auth-better-auth/src/libs/BetterAuthFactory.ts
  • packages/create-croco-app/src/generator.ts
  • packages/create-croco-app/src/saas-provider-profiles.ts
  • packages/create-croco-app/src/secret-placeholder-policy.ts
  • packages/create-croco-app/src/tests/e2e-generation.spec.ts
  • packages/create-croco-app/src/tests/templates-build.spec.ts
  • packages/create-croco-app/templates/saas/README.md.hbs
  • packages/create-croco-app/templates/saas/apps/api-server/src/provider-profile-check.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/secret-placeholder-policy.ts
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthFactory.md
  • packages/docs/src/content/docs/api/framework-config/src/classes/ConfigService.md
  • packages/docs/src/content/docs/api/framework-config/src/variables/env.md
  • packages/docs/src/content/docs/api/protocols-core/src/interfaces/ParamIR.md
  • packages/docs/src/content/docs/api/protocols-rest/src/classes/RequestValidationProblem.md
  • packages/docs/src/content/docs/api/protocols-rest/src/functions/validateRequest.md
  • packages/docs/src/content/docs/api/protocols-rest/src/interfaces/ArgumentMetadata.md
  • scripts/create-croco-app-generated-smoke.mts
  • scripts/generated-secret-placeholder-policy.mts
  • scripts/security-allowlist-metadata-check.mts
  • scripts/security-allowlist-metadata.json
  • scripts/static-misuse-raw-error-allowlist.json
  • scripts/tests/generated-secret-placeholder-policy.spec.ts
  • scripts/tests/security-allowlist-metadata-check.spec.ts
  • tsconfig/contract-strict.baseline.json
💤 Files with no reviewable changes (1)
  • tsconfig/contract-strict.baseline.json

Comment thread scripts/create-croco-app-generated-smoke.mts
@kang-heewon
kang-heewon force-pushed the fix/1242-secret-placeholder-policy branch from 9b479c0 to 6516b40 Compare July 9, 2026 17:21
@kang-heewon
kang-heewon merged commit 3a46a78 into trunk Jul 10, 2026
8 checks passed
@kang-heewon
kang-heewon deleted the fix/1242-secret-placeholder-policy branch July 10, 2026 04:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[create-croco-app] Enforce generated template secret placeholder and env redaction policy

1 participant