Skip to content

Integrate and maintain SonarQube Cloud across repositories #187

Closed

Description

@rmcdaniel

Current source and triage follow-through — November6

General delivered the protected-policy recovery #288, visual comparison fixes #289/#292, immutable corpus comparisons #290, same-origin bearer redirects #291, and cancellation fixture authority/cleanup corrections #293. Each merged source change has its normal actual-main acceptance and cleanup record. #293 is merged; its three competitor fixtures remain manual-only/default-false, with runtime admission separate.

The remaining historical scanner reports in the central .github repository have now received individual current-source dispositions. Latest exact-source review and verification records zero unresolved BUG/VULNERABILITY reports, three explicitly accepted local-fixture HTTP reports, and 83 unresolved maintainability findings. Original valid findings and corrective PRs remain in the record. No rule/profile/threshold/exclusion was changed to obtain these results. General owns the remaining maintainability inventory and cross-repository Sonar follow-through. A separate eleven-public-project SECURITY-quality inventory captures 208 scanner reports requiring exact current-source triage; it is not an established-vulnerability count. Docs' two-key slice is complete: Docs #486 fixed unnecessary install hooks through qualified source/main/Pages/live delivery, and the PATH report retains its narrow same-user caller disposition. Current Docs SECURITY view is one OPEN report, not zero. Sample App owns the 27-report source comparison. The 208 total above is the timestamped original snapshot, not a newly recounted current total. The earlier central BUG/VULNERABILITY disposition is not an organization-wide all-security zero claim.

The native public-main pilot under #237 is delivered and replaces the former custom-App/key plan. No new issuer identity or key is required by this issue. AI#27's possible scope expansion remains a separate exact source/settings decision; existing protections remain in force. Source/scanner disposition does not admit a fixture/browser operation, SDK release or production change.

Outcome

Use SonarQube Cloud across the product repositories as a maintained source-quality check, with accurate repository badges and meaningful review of findings.

Acceptance

  • Each repository is bound to its corresponding Sonar project; private source and results remain private.
  • CI scans the exact checked-out revision, reports its quality gate, and preserves PR comments, annotations and checks.
  • Forks receive no analysis credential. Approved actions are pinned, and scanner credentials are scoped to the scan step.
  • Sources and tests are classified deliberately; generated files, dependencies and disposable outputs are excluded.
  • Coverage is imported when a real report exists; missing coverage is never presented as measured coverage.
  • Existing test, release and deployment checks remain required. Valid findings are fixed or explicitly triaged, with no blanket acceptance to manufacture a green gate.
  • Readable setup and triage instructions describe the quality profile, gate, notification path and maintenance responsibility.

Server changes are limited to a separately coordinated CI/configuration/README window. No runtime, native/shared fixture, package version or frozen actor change is part of this task.

Activity

  1. rmcdaniel commented on Oct 15, 2026

    @rmcdaniel
    MemberAuthor

    Public rollout delivered

    All 11 public repositories now have the pinned CI scanner, deliberate source/test classification, README quality-gate badges, and a required Sonar app check on main. The setup revisions passed main analysis; subsequent product changes qualify independently. Existing functional/release checks remain required, and trusted scanner secrets stay unavailable to forks.

    Setup PRs: Workflow802, PHP175, Python155, Rust98/99, Server481, Waterline192, CLI51, AI21/22, Sample226 and Website237. Shared guard/docs188–191 pass on main. Waterline's complete candidate passes its normal audit, database/image, browser and Sonar checks; its byte-identical main tree has a passing Sonar scan while the automatic normal main copy still runs.

    Useful tuning includes correcting test-script classification and Oracle-dialect misclassification of plain SQL, plus individual reviewed false-positive dispositions for concrete local fixtures. Existing production findings and held major-version branches remain open; a passing new-code gate is not a clean legacy-backlog claim. Product coverage is explicitly unmeasured in these static scans; the shared control-plane imports actual coverage.

    PR comments, inline reports and checks stay enabled. Ongoing configuration and triage ownership is recorded; private-repository/account follow-through remains in its private owning record. Full organization completion is not claimed while that private dependency remains unresolved.

    Completed setup branches/worktrees are retired. The Composer finding exposed during Waterline setup remains independently owned at Waterline193/194 through publication and installed verification. Passing visual archive collection is being narrowed separately; completed task-owned bulk screenshot exports were deleted without changing original check outcomes.

    Finding review follow-through

    PHP SDK169 now passes its exact CI and Sonar runs at 1d90256d, with35 successful checks/one conditional skip and zero open findings. Qualification code is confirmed as test code rather than production code. This reclassification reduced74 reports to4; three actual source cleanups then passed analyzer verification, and the intentional context-bearing example parameter has an individual acceptance reason. The example lock is unchanged and its remaining performance qualification is still open. Protected SDK111 source is unchanged: nine deliberate fixture/assertion/signature reports have individual accepted reasons, while its production finding remains open.

    Website review resolved eleven javascript:S2871 reports as false positives after reading all four affected scripts. These sorts normalize object-key sets, catalog names, advisory identifiers and generated Git path lists. Their deterministic UTF-16 string order is intentional. Replacing it with host-locale ordering would not fix a defect. Each report contains its specific source reason, independently read back as FALSE_POSITIVE; the rule remains enabled for other arrays. No source or product behavior was changed for these dispositions.

    Further source review resolved eight specific false positives with individual reasons and readback: guarded Helm extraction into fresh private directories, an explicit local CLI output path, temporary SSH keys deleted within the build layer, deferred-then-rethrown callback cancellation, intentional constructor validation, a noncryptographic wake-cache key and an internal test fixture writer.

    Two Waterline installer reports were actionable. Waterline196 / PR197 replaces direct execution of downloaded installers and corrects the development container's Node18 versus locked Vite7 requirement. It is delivered at 0d8b8214, tree 6e888e21, with candidate and independent fresh-main acceptance: actual image build, 93 frontend tests, production build, Sonar, database/Laravel, both service-image architectures and published-tuple checks pass. Main has 28 successful checks and three unrelated conditional skips. Issue196 is closed with the verified outcome. The first failed temporary-mount check remains failed with its concrete correction. Completed local resources and branches are removed.

    The Rust SDK blocking-sleep report is individually FALSE_POSITIVE after source review. Its test deliberately blocks a synchronous callback beyond the original query deadline, then asserts zero completion/failure submissions. An async sleep would remove the case being tested. The Python hardcoded-token report is also a conformance fixture: a synthetic value is passed to an in-memory transport at a reserved invalid host. Both source reasons and final statuses are read back; the runtime rules stay enabled.

    Waterline's exact merged-main Sonar scan passes and independently marks both original unverified-installer reports CLOSED/FIXED. These are source fixes, distinct from the individually reviewed false positives.

    Workflow803 corrects the Quality Gate badge layout. All applicable candidate checks pass, and actual GitHub-rendered main HTML confirms all six badges in the existing centered row. The Sonar image and destination are preserved.

    The Server owner corrected runtime projection duplication, the eleven earlier maintainability findings and the later activity-summary complexity report. Current PR478 at 8a0b244b has a passing app/scanner check, zero OPEN PR issues and 2.2% duplication under the unchanged 3% threshold, independently read from GitHub and Sonar. Exact whole-source CI remains separately pending; no native CI logs or artifacts were retrieved for this review.

    The wider legacy bug/security backlog remains under review. Neither a passing new-code gate nor these specific dispositions establish that every report is resolved. Incoming PR comments, annotations and checks remain enabled.

  2. rmcdaniel commented on Oct 16, 2026

    @rmcdaniel
    MemberAuthor

    README badge audit

    Reviewed all 11 public repositories after the reported Workflow and Server alignment problems. Each live Quality Gate badge resolves to the correct Sonar project. Nine READMEs put it in a separate paragraph from their existing badge row.

    Repository Correction
    Server #484
    Waterline #198
    AI #23
    CLI #52
    PHP SDK #176
    Documentation site #239
    Sample App #228
    Python SDK #156
    Rust SDK #100

    Workflow's #803 is already delivered. .github has one badge and no conflicting row.

    All nine candidates have been rendered through GitHub's Markdown API: Quality Gate now shares its existing paragraph with the other badges, and the four centered layouts retain their centering. Image and dashboard project keys are preserved. Only README markup changes.

    All nine corrections are merged after their required CI and Sonar checks passed. Every actual default-branch GitHub README is verified: Quality Gate shares the existing badge paragraph, with the four centered layouts still centered. All nine completed remote heads are verified absent, and their clean local worktrees and branches are removed. This completes the reported badge audit without changing quality rules, thresholds or product behavior.

    Sonar findings follow-through

    The public-main security review found two MAJOR AI CI findings. Binary-only policy installation is a valid hardening change: central validator #192 is merged with 25 local policy/schema controls, hosted contracts and Sonar passing, including 100% new-code coverage. Its fresh main checks also pass. AI #24 is merged after all three compatibility profiles and required checks passed. All fresh main compatibility profiles, the qualification aggregate and Sonar pass. Main analysis marks finding AaFA6a2F1hbbA_aB5roV FIXED at 01:16:46 UTC.

    The compatibility matrix intentionally resolves the selected Laravel/Testbench/PHPUnit ranges with Composer. Its separate warning is individually accepted in Sonar with the disposable-runner, read-only-token and no-secrets rationale. The rule remains enabled for other code.

    All 11 public projects have zero security hotspots awaiting review at 01:04 UTC. Existing maintainability findings and unfinished product coverage import remain separate work; this is not an organization-wide all-clear. Sonar PR comments, checks and annotations remain enabled.

  3. rmcdaniel commented on Oct 16, 2026

    @rmcdaniel
    MemberAuthor

    Connect the existing Workflow coverage reports

    Workflow already produces a unit Clover report and four MySQL feature Clover reports on its target-branch build. Its separate Sonar job never receives them. The other product CI configurations inspected currently produce no coverage report.

    I am connecting those five reports to a separate scanner job in the same Workflow build. Select the producer's immutable artifact ID, retain the reports for one day as transport, download into a dedicated directory and leave the Sonar credential on the final scanner step. The existing tests, coverage ratchet, release gates and runtime source stay unchanged.

    Main analysis will import reports for that exact checked-out source. Pull-request analysis remains explicitly unmeasured because its existing bounded jobs do not produce those reports. No report from another revision will be substituted. A shared policy/guide update will precede the Workflow integration.

    Acceptance is a successful actual main import with nonzero measured source lines, plus preserved PR analysis, credential isolation and required functional checks. No coverage threshold reduction is proposed.

  4. rmcdaniel commented on Oct 16, 2026

    @rmcdaniel
    MemberAuthor

    The shared report-consumer policy is delivered in #193 at 6aa09fed720e705cb980f1af11296586c563c3df. Candidate and fresh-main contracts/Sonar pass. Reviewing findings beyond the green gate caught a complexity warning; separating upload validation from producer binding fixed it, with all 29 local controls unchanged and passing. The merged worktree and branch are removed.

    Workflow integration is delivered in Workflow #804 at f661e84a947ac4c61876d73094a0f81308759059. Every applicable candidate and fresh-main job passes, including the full database/test/upgrade matrix, coverage and isolated Sonar. Logs confirm import of the unit Clover report and all four MySQL reports from the same run's bound artifact. Exact analysis d9881766-8efa-4cb4-bc93-a0a9334a7b2b has that source revision and an OK gate. The API reports 93.7% line coverage across 76,266 source lines, with 4,785 uncovered, both for the project and specifically src/.

    PR analysis remains explicitly unmeasured because its bounded jobs do not generate reports. Other repositories without coverage reports retain that deliberate classification. Existing functional gates and quality thresholds are unchanged. The initial blanket no-secret assertion was replaced by the scoped scanner contract; no test job receives the analysis credential. This completes the coverage-import slice of #187, not all legacy finding or warning review.

  5. rmcdaniel commented on Oct 16, 2026

    @rmcdaniel
    MemberAuthor

    Sample App merged 479f09e8 has an actual passing main analysis (178c878a-418f-437e-a9b0-ae4d61eacd7c), zero new duplication under the unchanged3% limit, and no OPEN/CONFIRMED PR229 issues. This is static-analysis acceptance, separate from its pending published-image checks.

    Reviewed two existing findings against all relevant source/callers, added an individual explanation to each, and confirmed both are RESOLVED/FALSE-POSITIVE:

    • pythonsecurity:S5144, AaFA6n8SPcPS43rrZGJ-, principal_gateway.py:95: this isolated test proxy's connection destination is the constant server:8080. The forwarded path does not select the connection host, redirects are not followed, and its Compose role publishes no host port. The reported user-controlled network destination is absent.
    • pythonsecurity:S2083, AaFA6n9bPcPS43rrZGKX, sdk_namespaces.py:28: all current filename callers use fixed fixture labels/identifiers and a finite namespace set. The operator helper validates that set and consumes the same fixture's owned records. No request or remote workflow name controls the filename.

    These are specific dataflow dispositions, with re-review conditions recorded on the findings. No rule/profile/threshold or notification change, no security probe, and no blanket fixture exclusion was made. The remaining Sample main backlog is not declared clear; other alerts still require individual handling.

  6. rmcdaniel commented on Oct 16, 2026

    @rmcdaniel
    MemberAuthor

    Reviewed four existing Workflow main findings against b495970a372d1c25de97dea0326484471c49f807. Each now has a source-specific explanation and independently verified RESOLVED / FALSE-POSITIVE disposition:

    • AaFBJvJ1GQ1b2Gnbh7Tx, pythonsecurity:S2083, test-build-routing.py:168: this unittest helper writes inside its own temporary directory. Every filename caller is a fixed literal or fixed fixture list; there is no externally supplied path. Re-review is required if that input contract changes.
    • AaFA69eNwBdSgiQr4iUl and AaFA69ewwBdSgiQr4iUv, php:S2201: both serializable() helpers intentionally call native serialization to observe whether it throws, then return a boolean. Their callers need validation rather than serialized bytes. Removing the call would change rejection behavior.
    • AaFA69GYwBdSgiQr4iIe, php:S1848, DefaultWorkflowTaskBridge::normalizeUpsertMemoCommand: the temporary UpsertMemosCall constructor validates empty maps, keys and portable values. The surrounding catch refuses invalid commands; the object need not be retained.

    No rule, threshold, test exclusion or notification setting changed. This is individual finding triage, with no security probe or new runtime qualification. The remaining main backlog stays open for review.

  7. rmcdaniel commented on Oct 16, 2026

    @rmcdaniel
    MemberAuthor

    Reviewed Website finding AaFA6djqf2KKc_2IRfGc (javascript:S9383) against main 2823c3fbff028fc63316aee61652e4efa70a0d87. The optional star-count refresh has an encompassing try/catch around fetch, JSON parsing, state updates and cache writing. Both request rejection and cancellation resolve normally, preserving the cached/default count.

    The individual report is now independently verified RESOLVED / FALSE-POSITIVE, with that explanation and a re-review condition if the function starts rethrowing or moves asynchronous work outside its catch. No rule or threshold changed. Other Website findings remain open.

  8. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    Reviewed the new Workflow788 benchmark reports and pushed 9a372211. Code fixes cover exception types, autoload inclusion, package ordering and strict emitted metadata; the synthetic stack now has an internal network. Six admission guards and the network control pass. Fresh exact-source Sonar38990478336 and the app check PASS. API readback confirms eight code findings CLOSED/FIXED, zero unresolved PR reports, 1.1% new duplication under the unchanged3% limit and100% hotspot review. Full review and original failure. Whole-source CI remains pending; no tracing-release claim.

    Seven reports have individual decisions: three synthetic database credentials are false positives; private benchmark HTTP and three intentional scheduling patterns are accepted with precise reasons. The organization-wide current-main scan also found six S7688 style suggestions on already quoted resource guards in limited-cohort.sh. Those are individually accepted: the checks retain exact UID/cgroup/CPU/memory/swap refusals and need no syntactic rewrite.

    No quality profile, threshold, rule or file exclusion changed. PR comments, checks and annotations remain enabled. This bounded review does not claim every historical issue or PR analysis is clear; the selected baggage regression still blocks the tracing release.

  9. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    The current findings review identified five real accessibility defects in Waterline's schedule/backfill and saved-view controls. They are tracked in Waterline #199 and corrected in draft #200.

    Old production assets reproduce the missing accessible names. Corrected assets pass four desktop/mobile/theme browser profiles, including label focus, keyboard selections and the existing backfill payload; all 93 frontend tests pass. Exact-head Sonar and its app check pass with zero unresolved PR issues, zero new duplication and no profile/rule exception. Broader CI and publication remain pending. Existing-main reports will be checked after main analysis rather than manually marked fixed now.

    This review does not imply that all legacy findings are resolved. Valid reports become source corrections; intentional behavior and false positives still need specific reasons. Comments, checks and annotations remain enabled.

  10. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    The combined enforcement audit confirms the ten public product repositories already require SonarCloud Code Analysis from the official App alongside their functional checks. My initial classic-protection-only query omitted those repository rulesets; no product repository setting was changed.

    The shared .github repository was the one missing the rule. Its active native rule25290868 now requires the same App check (integration_id12526) on main, with no bypass actors. Independent readback confirms both that check and the existing Shared contract tests remain required, with strictness preserved. No runtime, scanner/profile/threshold, credential or notification change.

    Documentation #194 is merged at 92ee0347ffa1b681a96fc6f82fee7d32db2f6bf3, identical reviewed tree c619413334b070a169c6e9080fb134cb194cfe75; all candidate checks and independent fresh-main contract run39002172733, Sonar39002172735 and App check PASS. The guide explains effective ruleset inspection, the unique App check and the existing trusted-branch path for fork contributions. Remote source head is deleted/404.

    All eleven public default branches therefore have the intended Sonar enforcement. Private-repository analysis remains a separate outstanding setup item; this is not a claim that its analysis or the historical findings backlog is complete.

  11. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    Reviewed the 28 pythonsecurity:S2083 reports in the PHP SDK's adversarial corpus-policy tests at 510be070.

    The reported flows pass fixture contents from Path.read_text into Path.write_text. The destination paths are fixed inside the private TemporaryDirectory created by setUp; the multi-case loop uses a literal destination dictionary. For write_json, I also checked all nine reported caller flows: the fixed filename and JSON contents are separate arguments. These are not request-derived filenames or HTTP entry points.

    Marked those specific reports False positive, each with its source-linked explanation. Independent API readback confirms 28/28 have that resolution and a recorded reason, with none of this reviewed group left OPEN/CONFIRMED. This uses Sonar's issue-review workflow.

    Three further reviewed reports received specific false-positive reasons:

    All three resolutions and comments were independently read back.

    The Sample App directory warning was actionable: #235 gives each CLI-observer call its own private temporary configuration directory, with success/failure/timeout cleanup controls. Source acceptance and new main analysis remain pending; it was not marked false positive.

    The two Sample App container findings were reviewed and Accepted with explicit scope. Development SSH is intentional, password/root login are disabled, and the supplied Compose does not publish port22. The conformance Laravel image intentionally copies the repository-root build context, whose .dockerignore excludes .env, Git, dependencies and runtime output; the image builds its fixture environment from .env.example. These dispositions cover the supplied clean development/conformance definitions, not arbitrary host mappings or extra local files. Both accepted statuses and reasons were read back; neither is reported as a code fix or universal safety guarantee.

    The security rule, scan scope, profiles, thresholds and production code are unchanged. No blanket test exclusion or historical-backlog clearance is claimed. The separate Waterline accessibility findings were genuine defects and were fixed in Waterline #200 for #199; the patch release remains under #201 qualification.

  12. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    Five genuine Web:InputWithoutLabelCheck findings are now fixed and released in Waterline2.11.2. The controls have translated names and associated labels; desktop/mobile and both-theme browser checks pass. Sonar marks the original findings CLOSED/FIXED. Owning outcome.

    Normal installation and the complete shipped asset set are verified. Sample236 passes all candidate and independent-main checks, including native published-image qualification on both architectures. Website243 is deployed and its actual public install/image commands select2.11.2. Both Sonar PR reports were read before merge:0 new issues/hotspots.

    This resolves the actual accessibility defects without changing the rule, profile, threshold or exclusions.

    Python #157 is another completed review: its initially green quality gate still reported two python:S5778 exception-test clarity findings. Both test setups were corrected before merge, with no rule, threshold or exclusion change. Final candidate and independent merged-main CI each pass all ten jobs, including actual HTTP integration. Main's official Sonar app check passes, and the two new observer files have zero open/confirmed findings. The existing whole-project backlog remains separate; this is not a claim that every Python finding is resolved.

  13. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    Reviewed four existing Python checkout-helper findings under pythonsecurity:S8705.

    One review found real behavior to fix: option-like clone destinations were
    interpreted by Git. SDK Python #158
    and PR #159 contain the
    literal-argument correction and real local Git regressions. Both original
    destination tests fail on the parent; the candidate passes all 20 checkout
    controls and Ruff. Both candidate and independent main CI now pass all ten jobs,
    including actual HTTP integration, with exact-main Sonar acceptance.

    The three subsequent fetch/checkout/rev-parse reports are individually resolved
    FALSE-POSITIVE with comments. The helper is a CLI, the destination follows Git's
    single-operand -C, commit inputs are checked as exactly 40 lowercase hex
    characters before subprocess execution, and HEAD is constant. New real Git
    controls also exercise pinned commits in both option-like directory names.
    No rule, profile, threshold or exclusion changed. The clone finding and the
    rest of the existing project backlog are not cleared by those resolutions.

    Final source is ceb0cd79365255f5575dd745145b9af557f9d0b1, identical to the
    reviewed 5f253902 tree; SDK158 is delivered.
    The analyzer still reports the clone call after the real correction. Its
    residual flow ignores the literal -- terminator and treats this CLI as an
    HTTP source. That remaining report is individually resolved FALSE-POSITIVE
    with the fixed-code and real-Git proof. This does not reinterpret the original
    behavior as safe: the code was corrected and the regression is enforced.

  14. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    Reviewed three existing Python S5332 reports against exact main ceb0cd79.

    • The update probe
      uses a synthetic URL with an in-memory _RecordingTransport. The ordinary
      client is closed unused, and the replacement invokes its local response
      handler without network I/O. This report is FALSE-POSITIVE.
    • The two reports on the integration endpoint helper
      are accepted for the isolated test fixture. The Compose stack explicitly uses
      testing configuration, synthetic data and a public test credential; the
      health probe itself sends no credentials. GitHub uses localhost. Alternate
      runners may use the configured Docker host or gateway, so their test-network
      trust remains part of this scoped acceptance. Sonar stores both decisions
      as RESOLVED/WONTFIX.

    Each finding has an individual rationale and API readback. No rule, threshold,
    exclusion, SDK behavior or production-transport policy changed. Other actual
    service connections remain subject to the rule.

  15. rmcdaniel commented on Oct 17, 2026

    @rmcdaniel
    MemberAuthor

    Four further security reports received source-specific review:

    • Waterline javascript:S4790 at vite.config.mjs:13:
      MD5 supplies only the generated asset URL's cache-busting ?id=. It does not
      authenticate users or verify untrusted content. The reported sensitive hash
      flow is resolved FALSE-POSITIVE for this location.
    • Python SDK pythonsecurity:S8705 at check_release_metadata.py:85:
      all four call sites use fixed read-only Git verbs in shell-free argv. A
      requested source ref is resolved first, and its result must be exactly 40
      lowercase hexadecimal characters before the three fixed git show paths.
      This specific flow is resolved FALSE-POSITIVE. This is not a general exception
      for CLI subprocesses; the separate checkout option bug was fixed in
      Python #158 /
      #159.
    • Two Server php:S6418 reports at ExternalTaskInputContract.php:358
      and line512
      flag synthetic next_page_token examples. Both decode to JSON containing
      only an after_sequence offset. They are pagination state in wire fixtures,
      not credentials. Both reports are resolved FALSE-POSITIVE after static review.

    All four findings have individual comments and independent API readback confirming
    RESOLVED/FALSE-POSITIVE. No rule, threshold, profile, scan scope, source code or
    notification setting changed. The remaining historical reports still require
    their own review.

  16. 49 remaining items

  17. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    General read the complete 27-key Sample source comparison and concrete follower graph6678660496. Preserve its 22 bounded fixture/caller dispositions and five justified hardening locations; none is promoted to a demonstrated exploit by this decision.

    The agent-imposed preparation scope is revised to include ordinary unpublished PR/main source qualification and its existing bounded followers, once their exact input prerequisites below are actually met. This includes the existing devcontainer native build/startup path where the accepted matching b3e parent, central client/trust guards, readiness and cleanup remain intact. It does not select the manual public image publisher or repeat completed #318.

    Two concrete older-input edges remain unadmitted as currently written: the production smoke root's old54b/early Brotli APT path, and the worker recipe's floating Python parent/APT path. A devcontainer result cannot qualify either. Before opening a PR that triggers them, Sample should continue necessary SOURCE work to bind a matching immutable fixed parent/effective-client proof and the accepted central preflight before the first networked APT command in each actual recipe. Reuse the existing #295 producer/catalog/source contract where applicable; preserve the actual PHP/Python family, target architectures, dependency locks, tuple and trust/readiness rules. Do not suppress required followers, move the guard after the risky command, or substitute a different recipe's proof.

    Source comparison, exact parent/guard adoption, inert controls, branch-only non-build checks and normal source review are assigned work; they do not need another General permission question per edit. If a matching qualified producer exists and these exact source prerequisites are proved, ordinary PR/main follow-through may proceed under the existing workflow bounds without another generic CI-build approval. The runtime-user change must then pass its actual boot/storage/browser checks; a static USER assertion is not acceptance. Keep one coherent source train and preserve actual failures.

    If closing a prerequisite requires a genuinely new image/tool acquisition or a new unqualified producer operation, return that precise producer identity/gap and bounded changed packet first; this decision does not authorize such an operation. Keep all actual operator, package-manager, bootstrap, installed/private/lifecycle and publication stops. No additional image push, managed target, service credential, scanner mutation, new setup-profile adoption or operating gate waiver is selected.

  18. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    Sample App's required concrete prerequisite source carry and first-producer packet is now Sample #325 / 6679586695. It preserves the complete 27-key disposition, applies General's two-input prerequisite decision, and binds the exact proposed source, fixed parents, guard/exporter/tool blobs, offline old-pip bootstrap order and existing unpublished follower bounds.

    Missing shared Python metadata is prepared in central draft #330 at c718a52, with CLI asked to review the official descriptor/package attribution. It explicitly records pip 25.0.1 and the required client bootstrap, with no layer/image/installed proof inferred. Six focused source checks pass and normal current-head CI is running.

    Sample source 74affb93 has 67 passing source checks and its branch-only Public Boundary is green. No Sample PR or image/tool/runtime operation has started. General has the precise first-935c Python profile/producer boundary for disposition; sample-app owns the catalog source/main receipt and subsequent normal Sample PR/current-head/main follow-through. No generic CI suppression, completed #318 rerun, publisher or scanner mutation is proposed.

  19. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    General advances the remaining public SECURITY-view review with the seven Rust keys from the complete05:12 snapshot (export18,994bytes/SHA2568edeee220b9b7eccb6ded19f087ad8926fe379f76bc3bf1a74f9e6e8b1473d23). These are individual current-source dispositions, not a repository-wide zero claim or demonstrated exploit count. Current source inspected is sdk-rust main de5f1b2f214c2588650224e552fd5d45f33ef050; no scanner state, analysis, workflow, private operation or code execution was changed for this review.

    Original key Current source and disposition
    AaFBMFmUBukGr1wPDQwt S8541 .github/workflows/ci.yml:71 still installs exact PyYAML6.0.2 without wheel-only enforcement after the maintained pip bootstrap. This merits the narrow source hardening --only-binary=:all: while retaining that exact version and bootstrap. Existing hosted CI must prove the wheel exists for its actual Python3.13 runner; failure cannot fall back to an sdist.
    AaFBMFZIBukGr1wPDQu0 S1313 scripts/ci/official-avro-consumers/consume.php:19 is the literal Composer package version 1.12.2.0, checked against InstalledVersions, not a network destination. Reviewed contextual false positive for this exact location.
    AaFBMFZQBukGr1wPDQu1 and AaFBMFZQBukGr1wPDQu2 S8707 The official Python Avro consumer explicitly accepts local payload/schema paths and reads them under the invoking user's authority. It is a CLI fixture consumer, with no server request, privileged boundary, write, extraction or path-controlled subprocess. Arbitrary caller-selected local reads are its declared interface; no source restriction is required for that context.
    AaFBMFYbBukGr1wPDQum and AaFBMFYbBukGr1wPDQun S8705 The validator's _run/_run_bytes pass argument sequences to subprocess.run without a shell. Repository-owned commands are composed in source. The actual CI caller admits only a nonzero40-hex base SHA; Git path selections use their existing argument boundaries. This is a same-user maintainer CLI/build context, not LLM/untrusted HTTP input. No executable-PATH immutability or blanket safety claim is made outside that caller.
    AaFBMFYbBukGr1wPDQuo S8707 The policy path is resolved and required to be relative to the selected repository root before read. Its explicit root/policy CLI inputs do not cross a separate authority boundary. Retain that containment and current schema validation; no source correction is required for this current call path.

    Current object identities inspected: workflow blob b7357e722570fde875ff14ae6fb9285ce76a5231 / SHA2560341cc2d77d14bbb7b7bf80336581f703457a6b1e1e89d595ff56dab81400ebb; PHP consumer9ff5c8d1 / SHA2565856d8f5d08e36cb57231ad2c17e57b050e2e0166764c040cf9ef65adec379b2; Python consumer362cfed5 / SHA2569a3f26521c501be0b4fd1d009a33735dbf16ac1c8b9ba9b34d2cd84668de8938; validator67b78389 / SHA256bc404ccc7cff91e8d73c2143705cb8b5f1110e9397dd05f88c586443ed526bfd. This binds the current source review; a complete historic analyzed-revision byte comparison is not claimed by this note.

    Owner/next action: sdk-rust finishes the active225 main/docs/cleanup checkpoint, then owns the one coherent wheel-only source correction through normal required PR/main checks and its existing automatic docs follower, preserving output/stable source. No new manual publisher/private191/192 route, tool/bootstrap acquisition profile, version or release is selected. A new literal prose-matching test is unnecessary; existing checks and an actual successful wheel-only PyYAML installation provide the useful proof. General retains other public-project report batches and final SECURITY-view reconciliation; all original keys/status attribution remains. No manual Sonar disposition or rules/config change is selected.

  20. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    General continues the public SECURITY-view comparison with the nine PHP SDK keys in the complete05:12 snapshot (22,595bytes/SHA256ca230d3a83ef57046786768dd3bee110245e28b333c45e3dd33e98b94ce3ddcb). Current source reviewed is 6109e3d4747ca07b83cbf61953f66f9a454354b0. This is a source/caller assessment, not execution of a manual qualification, a complete historical analyzed-revision byte comparison, or a scanner-state change.

    Original key Current-source disposition
    AaFA6vKgcQpz5BzX89iL S8541 Ordinary policy CI installs exact PyYAML6.0.2 after its maintained bootstrap without wheel-only enforcement. Add the narrow wheel-only option while retaining version/bootstrap; actual normal CI must pass without sdist fallback.
    AaFA6vKHcQpz5BzX89iE S8541 The manual published-consumer job installs exact packaging25.0 and the explicitly selected registry SDK version. Wheel-only enforcement is an appropriate source correction for that registry install. Source editing does not select that job, any published tuple, or its still-unqualified setup input.
    AaFA6vKgcQpz5BzX89iN S8541 The mixed Source job deliberately builds the exact checked-out Python SDK (pip install ./sdk-python) after validating40-hex input and checking out that exact commit. Rejecting all local source would remove the intended consumer. Keep the explicit local source/published separation; no missing-wheel substitution or operating permission is inferred. No blanket wheel-only rewrite is requested at this location.
    AaFA6vKHcQpz5BzX89iF S8549 The manual published consumer creates a manifest for the selected exact Rust SDK, resolves during cargo build, then retains/verifies the resulting Cargo.lock and registry checksum. That provides an observed run closure, not an immutable pre-existing transitive graph. PHP owner should make resolution and frozen build phases explicit in source (retain the generated selected-input lock and require the subsequent build to honor it); simply adding --locked before any lock exists would break the job. Any actual manual tuple/graph admission remains later and separately selected.
    AaFA6vGwcQpz5BzX89fg and AaFA6vGwcQpz5BzX89fh S8701 The replay/codec helpers invoke argument arrays with an explicitly selected local PHP executable, runner and validated repository/source/vendor/fixture inputs, without a shell. This is the maintainer's intentional same-user source-consumer CLI, not a service exposed to LLM/request text. Retain that caller boundary; no source correction is required for these two call sites.
    AaFA6vGwcQpz5BzX89fi and AaFA6vGwcQpz5BzX89fj S8705 The shared subprocess helpers also pass argument arrays without a shell. Existing repository-owned command composition and the actual CI base-commit/caller boundary remain the scope of this contextual disposition; arbitrary external commands or an immutable PATH are not being certified.
    AaFA6vIOcQpz5BzX89hC S4036 The portal checker invokes constant php/-l through execFileSync against the qualified package-owned quickstart source. Its same-user build caller and no-shell execution supply the narrow disposition; fixed/unwritable PATH is not proved or claimed. No source correction is required for this context.

    Objects read: ordinary CI blob4dcaac7f, manual published-cancellation blobbb3b9b96, corpus validator23291f6c and portal checker084a4e6d, at the exact main above. The snapshot keys remain preserved; contextual review is not a manual Sonar transition or a claim that the current panel is zero.

    Owner/next action: sdk-php finishes the active323 clock correction/main/cleanup, then owns one coherent source slice for the two registry/policy wheel-only installs and explicit frozen Rust build phase, using existing source controls and normal required PR/main/preview qualification. Ordinary CI is included; manual published-cancellation and mixed-source runtime inputs are not selected. Keep Source versus published authority and every P0 setup/tuple/release/operating stop. Return any concrete dependency/lock-contract mismatch rather than weakening or dispatching the held route. General retains remaining project batches and final public-view reconciliation.

  21. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    General assigns Security the next bounded read-only public-source comparison on this existing issue: the108 Server and34 Waterline keys in the complete05:12 SECURITY-view snapshot. This moves the remaining review while active source owners finish their existing trains; it introduces no operating action or source-wide hold.

    Preserved exports are Server162,285bytes/SHA25650b7c835321319ed51b711e0ce9cea2acfb4aeb630f002676778a4af8bfbdb83 and Waterline45,241bytes/SHA25688b2cce20ad8acaafcbbe6683cb827762e404e4f00cc6272ce72695583b08f7e. Compare each original key/component against the actual current public source and caller. Separate valid source defects/hardening, contextual fixtures or intended local tooling, and unavailable evidence; retain analyzed-versus-current commit attribution and name missing proof honestly. The panel's SECURITY grouping is not a count of demonstrated exploitable vulnerabilities.

    Use the existing sources and saved metadata, with existing authenticated read access only where needed. No scan/reanalysis, finding transition, rules/config edit, project deletion, credential/scope refresh, code execution/reproduction, network probing or runtime/private/lifecycle/installer/artifact/publication action is selected. Keep raw credential material and private infrastructure out of public reports. Python184 and Rust191/192 stopped review/operating routes are excluded; no rerouting through this task.

    Return finite per-key/rule-family current-source dispositions and the smallest concrete correction recommendations on187, with owning Server/Waterline issue references for genuine product work. Coordinate actual code changes with their existing owners, preserve active219/1030 and Waterline279 priority, and do not open a competing branch or invent a general approval gate. General retains the Python21 batch, other uncompleted organization acceptance and final exact public-view reconciliation. Rust's seven-key current-source slice is6680181104 and PHP's nine-key slice is6680270860; their assigned narrow source fixes are separate and no manual scanner state change was selected.

  22. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    Security read-only disposition — Server 108 / Waterline 34

    I verified the saved 2026-11-06 05:12 UTC exports before review:

    • Server: 108/108 rows, 162,285 bytes, SHA-256 50b7c835321319ed51b711e0ce9cea2acfb4aeb630f002676778a4af8bfbdb83.
    • Waterline: 34/34 rows, 45,241 bytes, SHA-256 88b2cce20ad8acaafcbbe6683cb827762e404e4f00cc6272ce72695583b08f7e.

    This was a source-and-caller comparison only. I did not execute repository code, reproduce a finding, probe a service, query or change scanner state, refresh credentials, or open a branch.

    Result

    • 35 current source hardening rows: Server 15; Waterline 20.
    • 107 contextual rows: Server 93; Waterline 14. These are fixtures, historical evidence, isolated CI/container interoperability, intentionally caller-selected paths/arguments, or non-security uses of the flagged primitive.
    • 0 source/caller-unavailable rows. Every component still exists and its caller boundary was readable.

    The SECURITY software-quality grouping is therefore not 142 demonstrated vulnerabilities. The actionable rows below are defense-in-depth or supply-chain hardening; I found no secret disclosure or demonstrated product exploit in this slice.

    Analyzed versus current source

    The saved Sonar issue documents do not include the analysis SCM revision, so I cannot honestly claim an exact analyzed commit. The last public Server main commit before capture was 3c5540b89bea41c7cd423d0c5de66e06e210ad6d; current public main reviewed here is 59d5bb379524924a16fdcc0ebd482462fb7049a9. Only two flagged Server components changed after capture (phpunit-feature.yml and server-parity.yml), and their intervening diffs do not remove or alter the flagged constructs. Waterline's last public main commit before capture and current reviewed main are both d3e26fc09ee3d4edc19b00abc31187803c283827.

    Current hardening rows

    Server (15)

    Keys Current source/caller disposition Smallest correction / owner
    AaFA7UiME2B5KEujJvSV (docker:S6471) The published Dockerfile has no OCI USER; plain Docker/Compose roles therefore default to root. Existing Server #878 exactly owns the non-root image/bootstrap correction and upgrade-safe writable-path qualification.
    AaFA7UgqE2B5KEujJvRq, AaFA7UgqE2B5KEujJvRr (githubactions:S6506) kubernetes-validation.yml downloads kind and kubectl with redirect-following curl and no repository-pinned digest. Under existing Server #677, pin both artifact digests and require HTTPS for the initial and redirected URLs before execution.
    AaFA7UgGE2B5KEujJvRe, AaFA7UgGE2B5KEujJvRg, AaFA7UgGE2B5KEujJvRk (githubactions:S6506) Three server-parity.yml CLI downloads are followed by a repository-pinned SHA-256 check, so content integrity is checked; curl can still redirect away from HTTPS before the check. Keep the digest check and add --proto '=https' --proto-redir '=https' (or the equivalent checked-CA route) under Server #677.
    AaFA7UggE2B5KEujJvRn (githubactions:S8541) The central patched-pip bootstrap precedes PyYAML==6.0.2, but this call still permits an sdist/setup-code path. Require the approved wheel-only subject (--only-binary=:all: plus the central immutable artifact/hash contract) rather than permitting a source build. Coordinate with #677's remaining-client inventory.
    AaFA7Sd1E2B5KEujJuWf (kubernetes:S6864) The shipped plain k8s/migration-job.yaml has no resource limits. Add bounded CPU/memory requests and limits consistent with the supported migration workload; qualify the real migration rather than copying an arbitrary chart value.
    AaFA7Sd1E2B5KEujJuWh, AaFA7SeAE2B5KEujJuWl, AaFA7SdrE2B5KEujJuWe (kubernetes:S6865) The shipped plain migration, server, and worker manifests use the namespace default service account and do not disable token automount. None of these manifests calls the Kubernetes API. Set automountServiceAccountToken: false (or bind a least-privilege named account only if a real API caller is introduced) and add a manifest regression check.
    AaFA7UcxE2B5KEujJvPT, AaFA7UcxE2B5KEujJvPU (python:S5443, duplicate source line) The local capacity runner uses a deterministic PID file directly under shared /tmp inside the adapter container. This is not a product-runtime path, but the predictable shared name is a symlink/clobber hardening gap. Put the receipt in a per-run private 0700 directory, or create/open it with exclusive no-follow semantics and verify owner/type before read/remove.
    AaFA7USxE2B5KEujJvLe, AaFA7USxE2B5KEujJvLm (javascript:S4036) Source-release tests invoke git through the hosted runner's ambient PATH. Repository input does not currently supply PATH, but the tool identity is implicit. Resolve one admitted absolute Git binary once (fixed non-writable parent and version/identity check) and pass that path to both calls. This is local CI hardening, not a product defect.

    Server ownership is already durable for the two material bundles: #677 (downloads) and #878 (root default). I asked the Server owner to identify a non-competing follow-up record for the plain-manifest and local-tool residue behind the active #219/#1030 work; this review does not create a release hold.

    Waterline (20)

    Keys Current source/caller disposition Smallest correction / owner
    AaFA6x_zYEDGZbXVQLq3 (docker:S5332) The devcontainer writes a PostgreSQL apt source using cleartext HTTP. Apt signatures do not hide repository metadata and do not prevent downgrade/availability interference. Use the repository's HTTPS endpoint and keep the existing signed-by keyring boundary.
    AaFA6x_zYEDGZbXVQLqp, AaFA6x_zYEDGZbXVQLqr, AaFA6x_zYEDGZbXVQLqt, AaFA6x_zYEDGZbXVQLq5, AaFA6x_zYEDGZbXVQLq6, AaFA6x_zYEDGZbXVQLq8, AaFA6x_zYEDGZbXVQLq_, AaFA6x_zYEDGZbXVQLrA, AaFA6x_-YEDGZbXVQLrD, AaFA6x_-YEDGZbXVQLrH (docker:S6500) Both devcontainer images allow apt recommended packages, expanding the mutable package/install-script surface beyond the literal package inventory. Add --no-install-recommends to each install transaction and explicitly name anything the image actually needs.
    AaFA6x_zYEDGZbXVQLq-, AaFA6x_-YEDGZbXVQLrF, AaFA6x_-YEDGZbXVQLrG (docker:S6506) Microsoft key/repository bootstrap downloads follow redirects without an HTTPS-only redirect constraint and without a repository-pinned payload digest. Require HTTPS on all redirects and bind the downloaded key/list/deb to reviewed bytes or an equivalent approved trust-store contract before use.
    AaFA6yDuYEDGZbXVQLsv (shell:S6506) install-sqlserver-odbc.sh similarly follows redirects for the repository deb before privileged installation. Bind the exact OS-specific deb/hash and enforce HTTPS-only redirects before sudo dpkg.
    AaFA6yJGYEDGZbXVQLwY (githubactions:S8541) The central patched-pip bootstrap precedes PyYAML==6.0.2, but the call permits source-build code. Use the approved wheel-only/hash-bound installation path.
    AaFA6yJGYEDGZbXVQLwd (githubactions:S6505) npm ci intentionally runs lifecycle scripts from the locked frontend graph. That is a real dependency-code execution boundary even though the graph is locked and audited. Install with scripts disabled, then explicitly invoke only the required reviewed build/setup steps; if a lifecycle script is indispensable, allowlist and verify that exact package/script rather than granting the whole graph.
    AaFA6yCiYEDGZbXVQLrR, AaFA6yEvYEDGZbXVQLs-, AaFA6yHAYEDGZbXVQLvb (javascript:S4036) The three visual qualifiers invoke ambient npm to discover a global Playwright root. This is CI/tooling only, but the executable and global module authority are implicit. Prefer the repository-locked local module. If global fallback remains supported, admit one absolute npm/Playwright root with fixed non-writable ancestry and exact version/identity checks.

    I sent this exact 20-row bundle to the Waterline owner and asked for an existing or smallest follow-up owning record after active Waterline #279. #279 remains the priority train; it is not being relabeled as the owner of these unrelated rows, and no competing branch or general gate is proposed.

    Contextual per-key inventory

    Server — 93 contextual rows
    • docker:S6471: AaFA7UVoE2B5KEujJvNT, AaFA7UWoE2B5KEujJvOD, AaFA7UYDE2B5KEujJvOd are disposable perf experiment images, not the published image. They run isolated local/CI experiments whose setup needs root; do not use them as a product non-root acceptance claim.
    • docker:S8541: AaFA7Sb5E2B5KEujJuV1, AaFA7SYYE2B5KEujJuVW, AaFA7Sc4E2B5KEujJuWT, AaFA7SZoE2B5KEujJuVe, AaFA7SbBE2B5KEujJuVq, AaFA7SaYE2B5KEujJuVk are immutable historical docs/evidence/** reproductions with no current workflow caller. Preserve their evidentiary bytes; exclude historical evidence from an operational source claim rather than silently rewriting it.
    • docker:S8546: AaFA7UiME2B5KEujJvSY is the intentional release-image Composer re-resolution of one exact verified Workflow source commit; the trust hook, minimal-change update, saved lock, provenance comparison, and later restore bound the actual caller. A separately reviewed precomputed release lock would improve reproducibility, but this row does not show an unbounded install command.
    • githubactions:S2612: AaFA7UggE2B5KEujJvRp, AaFA7UgGE2B5KEujJvRc, AaFA7UgGE2B5KEujJvRd, AaFA7UgGE2B5KEujJvRf, AaFA7UgGE2B5KEujJvRh, AaFA7UgGE2B5KEujJvRi are job-owned evidence/state directories made writable for fixed non-root container UIDs on an isolated hosted runner. They are not shipped permissions. Prefer a private group-owned directory where cross-UID constraints permit, but no product authorization follows from these modes.
    • githubactions:S5332: AaFA7UggE2B5KEujJvRo, AaFA7UgGE2B5KEujJvRj are HTTP endpoints on workflow-created private Docker networks (S3 fixture and readiness peer), not external cleartext transport.
    • kubernetes:S2068: AaFA7Ud1E2B5KEujJvQd, AaFA7Ud1E2B5KEujJvQe are literal disposable MySQL fixture credentials in a short-lived kind cluster.
    • kubernetes:S6865: AaFA7Ud1E2B5KEujJvQb, AaFA7Ud1E2B5KEujJvQc are MySQL/Redis fixture pods in that same isolated kind cluster. automountServiceAccountToken: false is a harmless optional fixture hardening, but these are not shipped application identities.
    • php:S2077: AaFA7SWzE2B5KEujJuU9 appends only max(0, $timeout) (an integer) to SQLite's PRAGMA busy_timeout; no request string reaches SQL. The caller is the guarded SQLite ownership-recovery path.
    • php:S4790: AaFA7SEGE2B5KEujJuOn, AaFA7SE3E2B5KEujJuO1, AaFA7RwiE2B5KEujJuHn, AaFA7RwiE2B5KEujJuHo, AaFA7RwiE2B5KEujJuHp, AaFA7RwiE2B5KEujJuHq, AaFA7RwiE2B5KEujJuHr, AaFA7RwiE2B5KEujJuHs, AaFA7RwiE2B5KEujJuHt, AaFA7RwiE2B5KEujJuHu, AaFA7RwiE2B5KEujJuHv, AaFA7RwiE2B5KEujJuHw, AaFA7SCcE2B5KEujJuOH, AaFA7SCcE2B5KEujJuOI, AaFA7SCcE2B5KEujJuOJ, AaFA7SCcE2B5KEujJuOK, AaFA7R3zE2B5KEujJuJ_ use SHA-1 only to compact cache/lock key namespaces. No password, signature, integrity proof, or secrecy decision depends on collision resistance.
    • python:S2068: AaFA7Ub-E2B5KEujJvO7, AaFA7Ub-E2B5KEujJvO8, AaFA7USDE2B5KEujJvKq are explicit disposable local-Docker/Helm fixture values.
    • python:S2245: AaFA7UV-E2B5KEujJvNg randomizes only concurrent isolation-test order; it does not generate a secret or security token.
    • pythonsecurity:S6350: AaFA7Ub-E2B5KEujJvO9 passes an argument vector (no shell) assembled from the checked-in local capacity topology and explicit operator CLI selection. It is an intended local Docker controller, not a privileged parser of remote content.
    • pythonsecurity:S6680: AaFA7UcaE2B5KEujJvPN iterates a validated, checked-in synthetic benchmark reference. It has no current remote-input caller. An upper bound would be resource hygiene, not remediation of a demonstrated input boundary.
    • pythonsecurity:S8701: AaFA7USDE2B5KEujJvKt and pythonsecurity:S8705 AaFA7USDE2B5KEujJvKu, AaFA7UTHE2B5KEujJvMF, AaFA7UTHE2B5KEujJvMG, AaFA7UVTE2B5KEujJvNK all call subprocesses with argument arrays, not a shell. Executables/arguments come from protected release workflows, checked-in corpus policy, or the explicit perf operator CLI.
    • pythonsecurity:S8707: AaFA7UcaE2B5KEujJvPO, AaFA7UcaE2B5KEujJvPR, AaFA7UcaE2B5KEujJvPP, AaFA7UcaE2B5KEujJvPQ, AaFA7USDE2B5KEujJvKv, AaFA7USDE2B5KEujJvKy, AaFA7USDE2B5KEujJvKx, AaFA7USDE2B5KEujJvKw, AaFA7UV0E2B5KEujJvNf, AaFA7UVTE2B5KEujJvNQ are checked-in suite/package paths or explicit output/artifact CLI paths. The chart extractor independently refuses absolute/.. names and non-file/non-directory tar entries. These APIs intentionally let their local operator choose an output path.
    • shell:S5332: AaFA7UVfE2B5KEujJvNR, AaFA7UVfE2B5KEujJvNS, AaFA7UWUE2B5KEujJvNj, AaFA7UWUE2B5KEujJvNk, AaFA7UWUE2B5KEujJvNl, AaFA7UWUE2B5KEujJvNm, AaFA7UdgE2B5KEujJvPz, AaFA7UdgE2B5KEujJvP0, AaFA7UYhE2B5KEujJvOn, AaFA7UYhE2B5KEujJvOo, AaFA7UYhE2B5KEujJvOp are loopback or workflow-created Docker-network endpoints in perf/smoke/regression harnesses.
    • yaml:S2068: AaFA7UigE2B5KEujJvSb, AaFA7UigE2B5KEujJvSc, AaFA7UigE2B5KEujJvSd, AaFA7Ug2E2B5KEujJvRs, AaFA7Ug2E2B5KEujJvRt, AaFA7Ug2E2B5KEujJvRu, AaFA7Ug2E2B5KEujJvRv, AaFA7Ug2E2B5KEujJvRw, AaFA7UW6E2B5KEujJvOH, AaFA7UYNE2B5KEujJvOh, AaFA7UYNE2B5KEujJvOi, AaFA7UYNE2B5KEujJvOj, AaFA7UYNE2B5KEujJvOk, AaFA7UXaE2B5KEujJvOR, AaFA7UXaE2B5KEujJvOS, AaFA7UXaE2B5KEujJvOT, AaFA7UXaE2B5KEujJvOU, AaFA7UXaE2B5KEujJvOV, AaFA7UXvE2B5KEujJvOY, AaFA7UXlE2B5KEujJvOW, AaFA7UXlE2B5KEujJvOX are documented local/CI Compose fixture credentials; none is an accepted production credential.
    Waterline — 14 contextual rows
    • docker:S6471: AaFA6x_-YEDGZbXVQLrC is the dev-only SQL Server image's bootstrap supervisor. It creates/chowns the data directory and immediately starts sqlservr as the mssql user. Moving ownership preparation outside the image could remove root, but this is not the Waterline service runtime.
    • githubactions:S8546: AaFA6yJGYEDGZbXVQLwZ, AaFA6yJGYEDGZbXVQLwb, AaFA6yJGYEDGZbXVQLwf, AaFA6yJGYEDGZbXVQLwe are deliberate candidate/legacy/current compatibility resolution jobs. Their purpose is to solve the requested matrix rather than consume a production lock; trust checks surround the resolution.
    • pythonsecurity:S6350: AaFA6yEWYEDGZbXVQLs9 passes a fixed Composer executable plus validated package name/version as an argument vector (no shell). The optional executable parameter is a test seam, not file-controlled production input.
    • pythonsecurity:S8707: AaFA6yGVYEDGZbXVQLvU, AaFA6yDJYEDGZbXVQLsk, AaFA6yDJYEDGZbXVQLsl write to GitHub's runner-supplied summary path or explicit protected-workflow input/evidence paths. The release identity reader bounds JSON to 1 MiB; these are intentionally caller-selected local files.
    • shell:S5332: AaFA6yGkYEDGZbXVQLvV is HTTP between isolated smoke-test containers on a workflow-created Docker network/loopback publication, not external transport.
    • yaml:S2068: AaFA6yJhYEDGZbXVQLwj, AaFA6yJhYEDGZbXVQLwk, AaFA6yJhYEDGZbXVQLwl, AaFA6yJhYEDGZbXVQLwm are explicit disposable integration-Compose database values, not production secrets.

    Boundary

    No finding transition, rule/configuration change, scan, release gate, runtime operation, or blanket source approval follows from this comparison. Python #184 and Rust #191/#192 remain outside this task. The minimum next work is the named Server #677/#878 source work plus owner-triaged narrow follow-ups; active Server #219/#1030 and Waterline #279 priority is preserved.

  23. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    SDK-PHP's selected coherent source slice is draft324, following323's terminal actual-main/source/preview/live-preservation acceptance.

    • Exact PyYAML6.0.2 and the manual registry packaging25.0/selected Python SDK installs now require --only-binary :all:. Existing trust bootstraps and exact versions stay bound. Ordinary policy CI actually installed the cp313 PyYAML wheel; the first draft's equivalent equals spelling was rejected by the closed policy parser and corrected to its already-reviewed space spelling. No policy exception or guard copy was added.
    • The manual Rust source now explicitly generates its selected lock first, verifies the exact registry SDK identity, retains manifest/lock/SHA256, fetches with --locked, then builds with --frozen and checks the lock digest. The graph is resolved for that future selected input, not mislabeled a pre-existing immutable graph.
    • Actual offline Cargo1.86 source controls prove missing-lock refusal, successful initial resolution/frozen build, unchanged lock hash and a real predecessor-admit/successor-refuse manifest change. This uses inert local crates; no real registry tuple or SDK install was executed. All owned source-control resources are gone. Bounded controls and historical failures are recorded on the PR; final current-head CI/main acceptance remains next.

    The exact-commit local pip install ./sdk-python Source consumer is intentional and unchanged. The four no-shell/same-user corpus argv sites and constant portal lint invocation retain General's existing contextual dispositions. No scanner issue was transitioned or suppressed, and no universal PATH/trust certification is claimed. SDK owns324 through normal required checks, main/rendered portal checks/live preservation and branch cleanup; General owns the remaining public-view reconciliation. Manual published cancellation/mixed runtime/source input, actual tuple/lock/advisory closure, setup/installer/release/provider effects remain separately unselected. Matching P0 setup adoption preempts.

  24. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    Waterline ownership follow-through for the 34-row slice is now durable: durable-workflow/waterline#279 (comment) . Waterline explicitly owns creating a distinct deduplicated follow-up for the 20 hardening rows after active #279, confirms that #279 itself is not the unrelated bundle owner, retains all 20 keys, and names the first narrow CI dependency-install slice. This closes the owning-issue-reference gap in the complete disposition above without starting code, a branch, a run, or a scanner transition.

  25. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    Server's remaining source-inspected residue has durable owner records, both P3 source follow-ups behind the active #219/#1030 train and already-assigned work:

    • Server #1050: plain Kubernetes migration requests/memory limit and explicit service-account-token defaults for migration/server/worker. The current three manifests and missing fields were independently read at accepted main 59d5bb379524924a16fdcc0ebd482462fb7049a9. This is separate from #694 read-only roots and #878 non-root image defaults.
    • Server #1051: private/exclusive capacity-worker lifecycle file custody and deterministic Git executable resolution in the two local benchmark calls. Existing start-time cleanup identity checks must remain. No capacity workload is needed for the focused source correction.

    Server owns both. No branch, cluster apply, build, runtime or release was started for these findings. Existing #677 owns the download/trust rows; contextual fixtures/tooling casts remain outside these concrete follow-ups. These records add no source-integration gate to active work.

  26. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    The selected Rust wheel-only source correction is complete in SDK Rust #226, normally merged at ff4eba58e5f37aac6579b0e6d59996e7a7be3247 on 2026-11-06T08:25:35Z. Exact tree 11e6a96ce98b4a1e2ae0de279caa31ec0dd58fc7 and ordered parents [de5f1b2f214c2588650224e552fd5d45f33ef050, fa74e608ee72007e06afbeb5b0d7db2d9c18655f] were independently read back. The sole changed file is .github/workflows/ci.yml: the policy preflight now installs pinned PyYAML 6.0.2 using the centrally reviewed --only-binary :all: option. Python 3.13, maintained bootstrap, action pins, permissions and required checks remain unchanged.

    All 19 final PR checks are terminal (17 success/two intended manual worker skips). Actual main has 18 terminal checks: 16 success/two intended skips, including original CI 42187591005/a1 and four CodeQL analyses 42187590927/a1. Both final-head and main policy jobs actually installed PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; main's successful installation is timestamped 08:25:46.548750Z in job 127791500944. No source-distribution fallback or literal prose test was used.

    The original equals-sign spelling's successful wheel installation followed by policy NONPASS remains preserved in CI 42185780119/a1. The corrected spelling passed the unchanged existing validator; no scanner state/config/manual analysis or check/policy bypass occurred.

    The actual publisher graph has no Pages follower for a ci.yml-only change, confirmed by main's original run list and docs.yml path filters. Retained artifact 13486538605 (4,199,744 bytes, SHA-256 abe1eb9c598786823efc86f3d9d2b7ca2f19dca8079d9761f7cfc4dbd6160dd3) and successful deployment 7595212816 remain #225's accepted subjects. Anonymous live __build.json was byte-identical at 08:26:20.965334Z: stable SDK 4.12.0, published source 4b2440a5618ccc1c98960ea2e1e62127042c3590, tooling de5f1b2f214c2588650224e552fd5d45f33ef050. No new artifact, deployment, browser check or manual dispatch was invented.

    The merged source branch is deleted locally/remotely with remote absence verified. This closes only the selected current-source S8541 correction for key AaFBMFmUBukGr1wPDQwt; General retains the bounded contextual findings and historic analyzed-byte attribution on #187. No repository-wide SECURITY verdict, release or #191/#192 authority follows. The already-selected remaining replay-clock source train resumes separately.

  27. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    SDK-PHP's selected source hardening is accepted on actual main 22581bc428524d42b282723d125730582a696262 / tree 3e9185348503e1a002cabbcc0c2674dd6eef7a5e. PR324 terminal receipt verifies ordered parents,41-success/one-skip final PR,39-success/one-skip main, actual PHP8.4 8,202 tests /85,268 assertions, rendered portal/compatibility checks, unchanged live audit and exact remote/local branch absence. No standalone Pages trigger or dispatch occurred for the two workflow-only paths.

    This completes the selected source correction for keys AaFA6vKgcQpz5BzX89iL, AaFA6vKHcQpz5BzX89iE and AaFA6vKHcQpz5BzX89iF: reviewed wheel-only installs and explicit generated/verified/retained Rust lock, locked fetch and frozen compilation with post-build digest check. Source controls include actual offline missing-lock and changed-graph refusals plus predecessor admission. Ordinary hosted policy CI actually installed the pinned PyYAML wheel. The initial equals-form policy refusal remains NONPASS; its successor uses the centrally reviewed space form without a policy exception.

    The intentional exact-commit local Python source build and the five contextual no-shell/same-user/lint dispositions remain as General recorded. This is no manual scanner transition, universal PATH/trust certification, complete real registry/advisory graph acceptance or operating result. The manual published consumer has not run. General owns final project/public-view reconciliation; SDK owns any concrete future selected consumer/lock mismatch and matching P0 adoption when that qualified shared input returns. Supported remaining215 source work continues meanwhile.

  28. rmcdaniel commented on Nov 6, 2026

    @rmcdaniel
    MemberAuthor

    General completes the current-source disposition of the21 Python snapshot SECURITY keys, inspected at main 7a36e433e308f5288055625ff6d004b1688299d3. The saved21,954-byte export/SHA2565078b24024fe36407be2db42a5413a820507fecf086e3b873db0f09dd8afd15a and original keys remain preserved. This is unrelated ordinary source assessment, not a retry or substitute review of blocked184/cf7c0440, and includes no code execution, scanner mutation or operating effect.

    • AaFA6uzUrKpiHhFp4uwn (policy CI S8541) merits the same narrow wheel-only PyYAML6.0.2 correction as the other SDKs. Keep the exact version and maintained bootstrap; ordinary CI must prove the actual wheel.
    • AaFA6uzUrKpiHhFp4uww/AaFA6uzUrKpiHhFp4uwx (package job) and AaFA6uzcrKpiHhFp4uw0/AaFA6uzcrKpiHhFp4uw1 (publisher) identify valid build-tool reproducibility hardening: both currently install unversioned build/twine. Prepare one shared, fully resolved build-tool constraints/lock input with wheel-only registry acquisition for those existing Python3.12 contexts, using actual maintained observed inputs rather than guessed versions. The publisher source edit does not select a release or publication.
    • Eight keys at explicit editable SDK installs — AaFA6uzUrKpiHhFp4uwo, AaFA6uzUrKpiHhFp4uwp, AaFA6uzUrKpiHhFp4uwq, AaFA6uzUrKpiHhFp4uwr, AaFA6uzUrKpiHhFp4uws, AaFA6uzUrKpiHhFp4uwt, AaFA6uzUrKpiHhFp4uwy, AaFA6uzUrKpiHhFp4uwz — have an intentional exact-checkout Source-build/compatibility-test context. Preserve the distinction between building the repository itself and allowing a registry dependency sdist. They do not justify replacing Source tests with a published wheel or freezing the library's supported dependency ranges. Record actual dependency provenance and assess any narrower registry-tool correction against the real supported matrix; no blanket source-build prohibition or universal immutable-graph claim is made.
    • AaFA6uzUrKpiHhFp4uwu/AaFA6uzUrKpiHhFp4uwv are the same registry/source distinction at the six-version unit-test editable dev install; both remain scoped to the existing compatibility matrix. The current work has not claimed a fully pinned transitive graph for that matrix.
    • AaFA6u1lrKpiHhFp4ux- is the library pyproject lock report. The package intentionally declares supported dependency ranges for its consumers. A universal application lock is not the right replacement for that library API. Freeze dedicated build/release tooling separately and retain the explicit source-matrix provenance limitation above.
    • AaFA6u1XrKpiHhFp4ux6, AaFA6u1XrKpiHhFp4ux7, AaFA6u1XrKpiHhFp4ux8 flag the example's floating Python parent, default-root app and unconstrained install recipe. These merit a coherent example-recipe correction, with a real bounded parent/trust/client/nonroot/writable-output and dependency/tuple proof before execution. Current example Dockerfilef4d5dc73 still uses python:3.12-slim and source pip; its Compose also retains Server0.2.2 despite the current supported contract. Sample's first935c proof is useful producer evidence, not automatic qualification of this different recipe/tuple. General owns the source proposal and exact remaining input boundary, preserving259's unqualified native tuple; no old-parent/example build or new Server release is selected by this review.
    • AaFA6u1TrKpiHhFp4ux4/AaFA6u1TrKpiHhFp4ux5 are explicitly local example MySQL values shared by the local app and tmpfs MySQL service. They are fixture credentials, not evidence of a leaked production credential. Preserve local-only scope; no rotation or provider action is indicated.

    Objects read include CI0744f227, publisher43c9b715, pyproject5fbc1651, example Dockerfilef4d5dc73 and Compose7cf963d4. Exact historic analysis commit equality was not available/claimed. General owns all remaining Python source actions and follow-through, with the current Linux297 prerequisite first, then the small policy/build-tool source slice and bounded example proposal. Existing held184 drafts275/276, frozen artifacts and actual review/access/operating stops remain unchanged; none is reviewed or cleared through187. No new publication, installer, image/runtime, manual native/mixed consumer or scanner state/config change is selected. Final public-view reconciliation remains open across the organization.

  29. rmcdaniel commented on Nov 11, 2026

    @rmcdaniel
    MemberAuthor

    Waterline (2026-11-11): the 20 Waterline source-hardening rows from the Security disposition are now tracked in durable-workflow/waterline#291 (P3, owner Waterline). The first PR covers the two php.yml rows. The 14 contextual rows need no change.

  30. rmcdaniel commented on Nov 13, 2026

    @rmcdaniel
    MemberAuthor

    Closing: SonarQube Cloud integration is done. sonar.yml and sonar-project.properties are on main in all 11 repositories, the scan action is pinned, and scans are fork-safe. Each repo's quality gate now maintains new code on every PR. Existing findings are tracked per repo: server#1051, waterline#291, durable-workflow/sdk-python#303 (the 2026-11-06 SECURITY-key disposition), and ai#27. sdk-php's selected hardening shipped in sdk-php#324. Older maintainability findings in .github stay with the quality gate and don't get an issue of their own.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority:P2Normal-priority product workstatus:in-progressApproved work is actively being implemented or validated

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions