-
Notifications
You must be signed in to change notification settings - Fork 2
refactor(services): readonly-domain-types (stack 11/12, re-split #307) #384
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -35,7 +35,7 @@ export type LocalCredentialsStoreService = Readonly<{ | |
| readonly loadAppleSigningAssets: ( | ||
| keyId: string, | ||
| bundleId: string, | ||
| extensions?: string[], | ||
| extensions?: readonly string[], | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Suggestion: The cache lookup now accepts extension bundle IDs, but the local credentials provider supplies only the statically configured Severity Level: Major
|
||
| ) => Effect.Effect<SigningAssets | null, unknown>; | ||
| readonly loadPlayServiceAccount: () => Effect.Effect<string | null, unknown>; | ||
| readonly loadAndroidKeystore: () => Effect.Effect<KeystoreAssets | null, unknown>; | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -135,7 +135,7 @@ const logStamp = (epochMilliseconds: number): string => { | |
| * the full log on disk (falling back to the in-memory tail if it can't be read), since the real cause | ||
| * sometimes precedes the trailing lines. | ||
| */ | ||
| const reportFailure = (label: string, tail: string[], logFile: string) => | ||
| const reportFailure = (label: string, tail: readonly string[], logFile: string) => | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Suggestion: The failure tail is populated from the raw child-process output, while build logs are only redacted when persisted. Reporting Severity Level: Critical 🚨- ❌ Interactive failed builds can print raw credentials.
- ❌ Fastlane and Gradle build diagnostics may expose secrets.
- ⚠️ Persisted logs are redacted but terminal output is not.(Use Cmd/Ctrl + Click for best experience) Prompt for AI Agent 🤖This is a comment left during a code review.
**Path:** src/core/services/progress.ts
**Line:** 138:138
**Comment:**
*Security: The failure tail is populated from the raw child-process output, while build logs are only redacted when persisted. Reporting `tail` directly can therefore print API keys, bearer tokens, JWTs, or other secret-looking values to the terminal whenever a build fails. Redact each tail line before adding it to the failure report, especially when `buildLog` is active.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fixThere was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P1: reportFailure prints the raw child-process tail directly to the terminal on build failure. Since build logs are only redacted when persisted to disk, any secret-looking values (API keys, bearer tokens, JWTs) present in the last lines of output will be echoed unredacted to the console. Consider redacting tail lines the same way persisted logs are redacted before including them in the failure report. Prompt for AI agents |
||
| Effect.gen(function* () { | ||
| const lines = [ | ||
| `${label} failed. Last lines:`, | ||
|
|
@@ -160,7 +160,11 @@ const reportFailure = (label: string, tail: string[], logFile: string) => | |
| * shows the live step from `parseStep` and a running clock; on failure the tail and log path are | ||
| * printed before the error propagates. In stream mode it is exactly {@link run} (inherited stdio). | ||
| */ | ||
| export const runWithProgress = (command: string, args: string[], options: ProgressRunOptions) => | ||
| export const runWithProgress = ( | ||
| command: string, | ||
| args: readonly string[], | ||
| options: ProgressRunOptions, | ||
| ) => | ||
| Effect.gen(function* () { | ||
| const { label, parseStep, ...progressCommandOptions } = options; | ||
| const commandOptions: { | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggestion: The separate
readIndexandwriteIndexoperations allow local storage uploads to perform an unsynchronized read-modify-write. Concurrentputeffects can both read the same index and then overwrite each other, losing one artifact entry. Serialize index updates or provide an atomic append/update operation. [race condition]Severity Level: Major⚠️
(Use Cmd/Ctrl + Click for best experience)
Prompt for AI Agent 🤖