Skip to content

feat(stdlib): pub-mark documented string + collections fns (unblock megaport)#505

Open
hyperpolymath wants to merge 1 commit into
mainfrom
feat/stdlib-pub-visibility-megaport-unblock
Open

feat(stdlib): pub-mark documented string + collections fns (unblock megaport)#505
hyperpolymath wants to merge 1 commit into
mainfrom
feat/stdlib-pub-visibility-megaport-unblock

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

  • Adds pub to every documented fn in stdlib/string.affine (18 fns) + stdlib/collections.affine (22 fns) — both modules had /// doc comments on intended-public APIs but lacked the pub keyword introduced by ADR-011.
  • Effect: use string::{starts_with, ...}; and use collections::{any, find, ...}; now resolve from any consumer. Private helpers (binary_search_helper) remain private.

Why

Hit during the standards#279 idaptik megaport: porting migration/shared/PortNames.affine needed string::starts_with + collections::any to compile the isCoprocessorPort helper. Both errored with `Symbol is not public` despite carrying /// doc-comment public-API intent. Same gap exists in io/math/option/result/testing — those are a follow-up sweep, not in scope here.

Estate impact

Unblocks the in-flight ReScript→AffineScript megaport (umbrella standards#252, megaport step standards#279). Without pub, consumers had to either re-implement primitives locally or roll their own via fold — both anti-patterns.

Test plan

  • dune build clean
  • dune runtest — 354/354 pass (AOT smoke covers both modules)
  • PortNames consumer (/tmp/PortNames-v6b.affine) now type-checks where it previously failed with the resolution error

Refs standards#279

…egaport)

string.affine and collections.affine had ~40 fns with `///` doc comments
but no `pub` keyword — making them effectively module-private despite
the documented intent. Idaptik's migration/shared/PortNames.affine
hit this with `string::starts_with` ("Symbol is not public") + `collections::any`
when porting from ReScript.

Adds `pub` to every documented fn in both modules. Module-private
helpers (binary_search_helper) stay private.

Estate impact: unblocks the standards#279 megaport (idaptik + panll
ReScript→AffineScript) where consumers need string/collections from
outside the modules. The same pub gap exists in io/math/option/result/
testing — those are tracked as a follow-up sweep.

Tests: 354/354 pass. AOT smoke covers both modules.
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 83 issues detected

Severity Count
🔴 Critical 2
🟠 High 13
🟡 Medium 68

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Action perpolymath/standards/.github/workflows/governance-reusable.yml@main\n needs attention",
    "type": "unpinned_action",
    "file": "governance.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action ons/checkout@v6\n    needs attention",
    "type": "unpinned_action",
    "file": "publish-jsr.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action land/setup-deno@v2\n    needs attention",
    "type": "unpinned_action",
    "file": "publish-jsr.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in affine-vscode-publish.yml",
    "type": "missing_timeout_minutes",
    "file": "affine-vscode-publish.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in casket-pages.yml",
    "type": "missing_timeout_minutes",
    "file": "casket-pages.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in casket-pages.yml",
    "type": "missing_timeout_minutes",
    "file": "casket-pages.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "missing_timeout_minutes",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "missing_timeout_minutes",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "missing_timeout_minutes",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in ci.yml",
    "type": "missing_timeout_minutes",
    "file": "ci.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

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.

1 participant