Skip to content

Commit 51525d9

Browse files
Jonathan D.A. Jewellclaude
andcommitted
feat: repurpose fireflag as Firefox/Gecko flag management extension
BREAKING CHANGE: Repo repurposed from feature flag library to browser extension - Reset repo structure for Firefox extension (backed up old code to branch) - Add Manifest V3 with granular permissions (browserSettings, privacy, tabs) - Create flag database with safety classification (safe/experimental/dangerous) - Build ReScript types for flag management and browser APIs - Import Idris2 FFI modules from proven (SafeJson, SafeUrl, SafeQueue, SafeLRU) - Add custom Idris2 safety proofs for flag modifications - Create popup UI structure (HTML + CSS) - Sync rsr-template-repo workflows (17 standard workflows) - Update STATE.scm with v0.1-v1.0 milestones - Update ECOSYSTEM.scm with project relationships Tech stack: ReScript + Idris2 + Zig + WASM + Deno Target browsers: Firefox, Librewolf, Waterfox, Pale Moon Next: Complete UI components, developer tracking, security integration Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent ddf30b2 commit 51525d9

40 files changed

Lines changed: 2306 additions & 4822 deletions

.github/PROVEN-INTEGRATION.md

Lines changed: 0 additions & 28 deletions
This file was deleted.

.github/dependabot.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Dependabot configuration for RSR-compliant repositories
3+
# Covers common ecosystems - remove unused ones for your project
4+
25
version: 2
36
updates:
7+
# GitHub Actions - always include
48
- package-ecosystem: "github-actions"
59
directory: "/"
610
schedule:
@@ -9,3 +13,36 @@ updates:
913
actions:
1014
patterns:
1115
- "*"
16+
17+
# Rust/Cargo
18+
- package-ecosystem: "cargo"
19+
directory: "/"
20+
schedule:
21+
interval: "weekly"
22+
ignore:
23+
- dependency-name: "*"
24+
update-types: ["version-update:semver-patch"]
25+
26+
# Elixir/Mix
27+
- package-ecosystem: "mix"
28+
directory: "/"
29+
schedule:
30+
interval: "weekly"
31+
32+
# Node.js/npm
33+
- package-ecosystem: "npm"
34+
directory: "/"
35+
schedule:
36+
interval: "weekly"
37+
38+
# Python/pip
39+
- package-ecosystem: "pip"
40+
directory: "/"
41+
schedule:
42+
interval: "weekly"
43+
44+
# Nix flakes
45+
- package-ecosystem: "nix"
46+
directory: "/"
47+
schedule:
48+
interval: "weekly"

.github/workflows/jekyll.yml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# This workflow uses actions that are not certified by GitHub.
3+
# They are provided by a third-party and are governed by
4+
# separate terms of service, privacy policy, and support
5+
# documentation.
6+
7+
# Sample workflow for building and deploying a Jekyll site to GitHub Pages
8+
name: Deploy Jekyll site to Pages
9+
10+
on:
11+
# Runs on pushes targeting the default branch
12+
push:
13+
branches: ["main"]
14+
15+
# Allows you to run this workflow manually from the Actions tab
16+
workflow_dispatch:
17+
18+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
19+
permissions:
20+
contents: read
21+
pages: write
22+
id-token: write
23+
24+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
25+
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
26+
concurrency:
27+
group: "pages"
28+
cancel-in-progress: false
29+
30+
jobs:
31+
# Build job
32+
build:
33+
runs-on: ubuntu-latest
34+
steps:
35+
- name: Checkout
36+
uses: actions/checkout@v6.0.1
37+
- name: Setup Ruby
38+
# https://github.com/ruby/setup-ruby/releases/tag/v1.207.0
39+
uses: ruby/setup-ruby@708024e6c902387ab41de36e1669e43b5ee7085e
40+
with:
41+
ruby-version: '3.1' # Not needed with a .ruby-version file
42+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
43+
cache-version: 0 # Increment this number if you need to re-download cached gems
44+
- name: Setup Pages
45+
id: pages
46+
uses: actions/configure-pages@v5
47+
- name: Build with Jekyll
48+
# Outputs to the './_site' directory by default
49+
run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
50+
env:
51+
JEKYLL_ENV: production
52+
- name: Upload artifact
53+
# Automatically uploads an artifact from the './_site' directory by default
54+
uses: actions/upload-pages-artifact@v4
55+
56+
# Deployment job
57+
deploy:
58+
environment:
59+
name: github-pages
60+
url: ${{ steps.deployment.outputs.page_url }}
61+
runs-on: ubuntu-latest
62+
needs: build
63+
steps:
64+
- name: Deploy to GitHub Pages
65+
id: deployment
66+
uses: actions/deploy-pages@v4

ECOSYSTEM.scm

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,45 @@
44
(ecosystem
55
(version "1.0")
66
(name "fireflag")
7-
(type "project")
8-
(purpose "image:https://img.shields.io/badge/License-MPL_2.0-blue.svg[MPL-2.0,link=\"https:")
7+
(type "browser-extension")
8+
(purpose "Safe Firefox/Gecko flag management for experimentation and development")
99

1010
(position-in-ecosystem
11-
(role "component")
11+
(role "end-user-tool")
1212
(layer "application")
13-
(description "image:https://img.shields.io/badge/License-MPL_2.0-blue.svg[MPL-2.0,link=\"https:"))
13+
(description "Browser extension that helps users and developers safely manage Firefox/Gecko flags (about:config, experimental features, developer flags) with safety classification, tracking, and analytics"))
1414

15-
(related-projects . ())
15+
(related-projects
16+
((proven
17+
. ((relationship . "dependency")
18+
(description . "Provides Idris2 FFI modules for compile-time safety guarantees (SafeJson, SafeUrl, SafeQueue, SafeLRU)")
19+
(url . "https://github.com/hyperpolymath/proven")))
20+
(svalin
21+
. ((relationship . "build-tool")
22+
(description . "Static analysis security scanner for extension code")
23+
(url . "https://github.com/hyperpolymath/svalin")))
24+
(vordr
25+
. ((relationship . "build-tool")
26+
(description . "Runtime verification for browser API usage")
27+
(url . "https://github.com/hyperpolymath/vordr")))
28+
(selur
29+
. ((relationship . "build-tool")
30+
(description . "Secrets detection for extension security")
31+
(url . "https://github.com/hyperpolymath/selur")))
32+
(cerro-terro
33+
. ((relationship . "build-tool")
34+
(description . "Build orchestration for containerized compilation")
35+
(url . "https://github.com/hyperpolymath/cerro-terro")))
36+
(rsr-template-repo
37+
. ((relationship . "template")
38+
(description . "Provides standard RSR workflows and infrastructure")
39+
(url . "https://github.com/hyperpolymath/rsr-template-repo")))))
1640

1741
(what-this-is
18-
"image:https://img.shields.io/badge/License-MPL_2.0-blue.svg[MPL-2.0,link=\"https:")
42+
"FireFlag is a Firefox/Gecko browser extension that makes it safe and easy to experiment with browser flags. For regular users, it provides curated lists of safe flags to enable experimental features. For developers, it offers tracking, analytics, and export capabilities to understand how flag changes affect their applications and workflows.")
1943

20-
(what-this-is-not . ()))
44+
(what-this-is-not
45+
("A general feature flag management library (see backup-feature-flag-library branch)"
46+
"A Chrome/Chromium extension (Gecko browsers only)"
47+
"A tool for modifying Firefox source code"
48+
"A replacement for Firefox's built-in about:config interface")))

README.adoc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
= fireflag
1+
= FireFlag
22

3-
image:https://img.shields.io/badge/License-PMPL--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
4-
image:https://img.shields.io/badge/Philosophy-Palimpsest-indigo.svg[Palimpsest,link="https://github.com/hyperpolymath/palimpsest-license"]
3+
image:https://img.shields.io/badge/License-PMPL--1.0-indigo.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
4+
image:https://img.shields.io/badge/RSR-Certified-gold[RSR Certified,link=https://github.com/hyperpolymath/rhodium-standard-repositories]
5+
image:https://img.shields.io/badge/Status-Active%20Development-yellow[Status]
56

7+
**Safe Firefox/Gecko flag management for users and developers**
68

7-
Jonathan D.A. Jewell <jonathan.jewell@gmail.com>
9+
Jonathan D.A. Jewell <jonathan.jewell@open.ac.uk>
810
:toc: macro
911
:toclevels: 3
1012
:icons: font

STATE.scm

Lines changed: 94 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,115 @@
33

44
(define project-state
55
`((metadata
6-
((version . "1.0.0")
6+
((version . "0.1.0")
77
(schema-version . "1")
88
(created . "2026-01-10T13:49:37+00:00")
9-
(updated . "2026-01-10T13:49:37+00:00")
9+
(updated . "2026-02-04T10:30:00+00:00")
1010
(project . "fireflag")
1111
(repo . "fireflag")))
1212

13+
(project-context
14+
((name . "FireFlag")
15+
(tagline . "Safe Firefox/Gecko flag management for users and developers")
16+
(tech-stack . ("ReScript" "Idris2" "Zig" "WASM" "Deno"))))
17+
1318
(current-position
1419
((phase . "Active Development")
15-
(overall-completion . 50)
20+
(overall-completion . 10)
21+
(components
22+
((manifest . 100)
23+
(directory-structure . 100)
24+
(flag-database . 0)
25+
(rescript-core . 0)
26+
(idris-ffi . 0)
27+
(ui-popup . 0)
28+
(ui-sidebar . 0)
29+
(ui-options . 0)
30+
(security-integration . 0)
31+
(containerization . 0)))
1632
(working-features . ())))
1733

1834
(route-to-mvp
1935
((milestones
20-
((v1.0 . ((items . ("Initial setup" "Core functionality"))
21-
(status . "in-progress")))))))
36+
((v0.1.0-structure
37+
. ((items . ("Manifest V3 setup"
38+
"Extension directory structure"
39+
"rsr-template-repo workflows"))
40+
(status . "in-progress")))
41+
(v0.2.0-core
42+
. ((items . ("Flag database with safety levels"
43+
"ReScript core types"
44+
"Idris FFI integration from proven"
45+
"WASM optimizations"))
46+
(status . "pending")))
47+
(v0.3.0-ui
48+
. ((items . ("Browser action popup"
49+
"Sidebar panel"
50+
"Options page"
51+
"Granular permission UI"))
52+
(status . "pending")))
53+
(v0.4.0-features
54+
. ((items . ("Flag tracking (before/after)"
55+
"Export reports"
56+
"DevTools integration"
57+
"Performance metrics"))
58+
(status . "pending")))
59+
(v0.5.0-security
60+
. ((items . ("svalin static analysis"
61+
"vordr runtime verification"
62+
"selur secrets detection"
63+
"Security audit"))
64+
(status . "pending")))
65+
(v0.6.0-build
66+
. ((items . ("cerro-terro containerization"
67+
"chainguard base images"
68+
"Guix channel setup"
69+
"Reproducible builds"))
70+
(status . "pending")))
71+
(v1.0.0-release
72+
. ((items . ("Mozilla Add-ons submission"
73+
"Multi-browser testing (Firefox, Librewolf, Waterfox, Pale Moon)"
74+
"Store listing with screenshots"
75+
"Privacy policy and documentation"))
76+
(status . "pending")))))))
2277

2378
(blockers-and-issues
2479
((critical . ())
25-
(high . ())
26-
(medium . ())
80+
(high . ("Flag database needs curation - combine Firefox docs + our analysis"))
81+
(medium . ("Test Pale Moon compatibility (different Gecko version)"
82+
"Determine WASM module size limits for extension"))
2783
(low . ())))
2884

2985
(critical-next-actions
30-
((immediate . ())
31-
(this-week . ())
32-
(this-month . ())))
86+
((immediate . ("Create flag database schema"
87+
"Import proven Idris FFI modules"
88+
"Build ReScript core types for browser flags"))
89+
(this-week . ("Implement all three UI components"
90+
"Add granular permission feedback system"
91+
"Set up flag safety classification"))
92+
(this-month . ("Complete developer tracking features"
93+
"Integrate security scanning (svalin/vordr/selur)"
94+
"Build containerized environment"
95+
"Test on all target browsers"))))
96+
97+
(session-history
98+
((session-1
99+
. ((timestamp . "2026-02-04T10:30:00+00:00")
100+
(accomplishments . ("Backed up old feature flag library code to branch"
101+
"Reset repo structure for browser extension"
102+
"Created Manifest V3 configuration"
103+
"Set up extension directory structure"
104+
"Synced rsr-template-repo workflows"
105+
"Updated STATE.scm with new project goals"
106+
"Created task list (10 tasks)"))))))))
107+
108+
;; Helper functions
109+
(define (get-completion-percentage state)
110+
(let ((components (cdr (assoc 'components (cdr (assoc 'current-position state))))))
111+
(/ (apply + (map cdr components)) (length components))))
112+
113+
(define (get-blockers state severity)
114+
(cdr (assoc severity (cdr (assoc 'blockers-and-issues state)))))
33115

34-
(session-history . ())))
116+
(define (get-milestone state name)
117+
(assoc name (cdr (assoc 'milestones (cdr (assoc 'route-to-mvp state))))))

0 commit comments

Comments
 (0)