Skip to content

Document functional-language rewrite spike outcome and recommended first POC scope - #672

Open
conorheffron with Copilot wants to merge 4 commits into
mainfrom
copilot/spike-functional-language-rewrite
Open

Document functional-language rewrite spike outcome and recommended first POC scope#672
conorheffron with Copilot wants to merge 4 commits into
mainfrom
copilot/spike-functional-language-rewrite

Conversation

Copilot AI commented May 23, 2026

Copy link
Copy Markdown
Contributor

This spike asked for a practical direction on rewriting part of iRonoc with a functional language, comparing Scala, Kotlin, and external-language options. The update captures a bounded recommendation that can be executed incrementally without broad architectural churn.

  • ## Spike outcome captured in README

    • Added a dedicated Spike: functional language rewrite candidate section to README.md.
    • Documented tradeoffs across:
      • Scala (strong FP model, higher adoption/build complexity)
      • Kotlin (best JVM-native incremental fit)
      • External runtimes (Rust/Go/Dart/Flutter/Python via service boundary, with added ops/network overhead)
  • ## Recommended implementation slice

    • Identified a concrete first candidate: GitDetailsService mapping methods that are primarily pure transformations:
      • mapRepositoriesToResponse
      • mapResponseToRepositories
      • mapIssuesToResponse
    • Recommendation in-doc: run a Kotlin POC on this mapping layer first, then expand only if maintainability/testability gains are demonstrated.
## Spike: functional language rewrite candidate
- Candidate scope for a first rewrite: `GitDetailsService` data-mapping methods ...
- Scala: strongest FP ecosystem, but introduces a larger adoption curve ...
- Kotlin: best incremental JVM fit ...
- External languages ... viable only behind a service boundary ...
- Recommendation: run a Kotlin proof-of-concept for the `GitDetailsService` mapping layer first ...

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • ads.mozilla.org
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette -headless -no-remote -profile /tmp/rust_mozprofile4TDhrC (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilecWt3t2 (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilegBoulf (dns block)
  • detectportal.firefox.com
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilecWt3t2 (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilegBoulf (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette -headless -no-remote -profile /tmp/rust_mozprofile4TDhrC (dns block)
  • firefox.settings.services.mozilla.com
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilecWt3t2 (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilegBoulf (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette -headless -no-remote -profile /tmp/rust_mozprofile4TDhrC (dns block)
  • incoming.telemetry.mozilla.org
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette -headless -no-remote -profile /tmp/rust_mozprofile4TDhrC (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilecWt3t2 (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilegBoulf (dns block)
  • ironoc.net
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette -headless -no-remote -profile /tmp/rust_mozprofile4TDhrC (dns block)
  • support.mozilla.org
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilecWt3t2 (dns block)
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette --headless --disable-gpu --window-size=1920,1080 -no-remote -profile /tmp/rust_mozprofilegBoulf (dns block)
  • www.ironoc.net
    • Triggering command: /usr/lib/firefox/firefox /usr/lib/firefox/firefox --marionette -headless -no-remote -profile /tmp/rust_mozprofile4TDhrC (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Spike: Consider using functional language for iRonoc Document functional-language rewrite spike outcome and recommended first POC scope May 23, 2026
Copilot AI requested a review from conorheffron May 23, 2026 18:47
@conorheffron
conorheffron requested a review from Copilot May 24, 2026 14:31
@conorheffron conorheffron added the question Further information is requested label May 24, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Documents the outcome of a spike exploring a functional-language rewrite path, and records a bounded, incremental recommendation for a Kotlin proof-of-concept focused on pure mapping logic in GitDetailsService.

Changes:

  • Added a new README section capturing the spike outcome and tradeoffs across Scala, Kotlin, and external runtime options.
  • Documented a recommended first Kotlin POC scope targeting GitDetailsService’s mapping methods as an incremental, low-churn starting point.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@conorheffron
conorheffron marked this pull request as ready for review June 14, 2026 15:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

question Further information is requested

Projects

Status: In progress

Development

Successfully merging this pull request may close these issues.

Spike: Consider using functional language to re-write a portion of iRonoc functionality

3 participants