mirror of
https://github.com/vacp2p/roadmap.git
synced 2026-01-07 14:53:56 -05:00
Chore/roadmap validator (#318)
## Summary - Introduce a standalone Python roadmap validator with a CLI entry point, modular validation pipeline, and GitHub Actions wiring so roadmap content can be linted locally and in CI. - Provide reusable validation primitives for path resolution, front-matter parsing, identity checks, task parsing, catalog enforcement, and template adherence. - Document usage, configuration, and workflow behaviour to make the validator approachable for contributors. ## Validator Details - **Core tooling** - Added the `tools/roadmap_validator/` package with `validate.py` (CLI), `validator.py` (orchestration), and helper modules (`tasks.py`, `identity.py`, `paths.py`, `constants.py`, `issues.py`). - CLI supports directory/file targets, skips default filenames, emits GitHub annotations, and integrates optional substring filtering - README explains features, environment variables, and development guidance. - **Catalog and template enforcement** - `catalog.py` verifies each allowed content unit has `index.md` and `preview.md`, confirms roadmap entries appear under the proper quarter/area, and flags stale or missing links. - `templates.py` enforces template basics: front matter completeness, `## Description` ordering/content, template placeholder cleanup, and task section detection. - **Task validation** - `tasks.py` checks required metadata (`owner`, `status`, `start-date`, `end-date`), date formats, populated descriptions/deliverables, TODO markers, tangible deliverable heuristics, and `fully-qualified-name` prefixes. - **Workflow integration** - `.github/workflows/roadmap-validator.yml` runs the validator on pushes and manual dispatch, installs dependencies, scopes validation to changed Markdown, and surfaces findings via GitHub annotations. ## Existing Roadmap Updates - Normalised 2025q4 commitments across Web, DST, QA, SC, and other units by filling in missing descriptions, deliverables, schedule notes, recurring task statuses, and maintenance tasks. - Added tasks where absent, removed remaining template placeholders, aligned fully qualified names, and ensured roadmap files conform to the new validator checks. ## Testing ```bash python tools/roadmap_validator/validate.py *2025q4* ``` CI: `Roadmap Validator` workflow runs automatically on pushes/dispatch. --------- Co-authored-by: kaiserd <1684595+kaiserd@users.noreply.github.com>
This commit is contained in:
66
.github/workflows/roadmap-validator.yml
vendored
Normal file
66
.github/workflows/roadmap-validator.yml
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
name: Roadmap Validator
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
paths:
|
||||
description: 'Space-separated paths or directories to validate, ex *2025q4* '
|
||||
required: false
|
||||
default: ''
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- 'content/dst/**'
|
||||
- 'content/qa/**'
|
||||
- 'content/nim/**'
|
||||
- 'content/p2p/**'
|
||||
- 'content/rfc/**'
|
||||
- 'content/sc/**'
|
||||
- 'content/sec/**'
|
||||
- 'content/web/**'
|
||||
- 'tools/roadmap_validator/**'
|
||||
- '.github/workflows/roadmap-validator.yml'
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.x'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install --disable-pip-version-check --no-cache-dir pyyaml
|
||||
|
||||
- name: Detect changed markdown files
|
||||
if: ${{ github.event_name != 'workflow_dispatch' }}
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v42
|
||||
with:
|
||||
files: |
|
||||
**/*.md
|
||||
|
||||
- name: Run roadmap validator
|
||||
run: |
|
||||
set -eo pipefail
|
||||
|
||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||
TARGETS="${{ github.event.inputs.paths }}"
|
||||
else
|
||||
TARGETS="${{ steps.changed-files.outputs.all_changed_files }}"
|
||||
if [ -z "$TARGETS" ]; then
|
||||
echo "No roadmap markdown changes detected."
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Validating targets:"
|
||||
printf '%s\n' $TARGETS
|
||||
python tools/roadmap_validator/validate.py $TARGETS
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -8,4 +8,6 @@ private/
|
||||
.replit
|
||||
replit.nix
|
||||
node_modules
|
||||
.ipynb_checkpoints/
|
||||
.ipynb_checkpoints/
|
||||
.cache
|
||||
__pycache__
|
||||
@@ -1,96 +1,96 @@
|
||||
---
|
||||
title: de-MLS testnet
|
||||
tags:
|
||||
- "2025q4"
|
||||
- "acz"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: "Releasing de-MLS with the multi-steward support and Ethereum authentication mechanism."
|
||||
|
||||
---
|
||||
|
||||
`vac:acz:ift:2025q4-de-mls-tesnet`
|
||||
|
||||
## Description
|
||||
This commitment involves releasing the de-MLS poc with the multi-steward configurations.
|
||||
The process includes presenting the findings, such as MLS over Waku and benchmarking,
|
||||
and then achieving better iteration for the EF grant.
|
||||
|
||||
### Background
|
||||
de-MLS is a decentralized, scalable, end-to-end encrypted (E2EE)
|
||||
group messaging application with Ethereum-based authentication.
|
||||
The primary goal of this project is to develop a comprehensive
|
||||
and a mature RFC that outlines decentralized, secure, and scalable group key generation,
|
||||
designed to accommodate large numbers of users within a single group.
|
||||
|
||||
During 2025q3, we released the multi-steward de-MLS RFC, including consensus implementation.
|
||||
The implementation plan for this quarter is to release multi-steward with a single consensus
|
||||
version with Ethereum authentication factor by operating across the Waku network.
|
||||
|
||||
### Narratives
|
||||
We will reinforce the Conduit of Expertise narrative by:
|
||||
* Develop the foundational framework for a decentralized, scalable messaging application
|
||||
* Research and implement the scalable and decentralized consensus mechanism.
|
||||
|
||||
We will also strengthen the Premier Research Destination narrative by:
|
||||
* Develop a standardized decentralized messaging application over the Waku network,
|
||||
by providing a well-structured RFC and a proof of concept (PoC) that demonstrates
|
||||
It's a base functionality within the ecosystem.
|
||||
This will allow teams and organizations to build their own messaging applications
|
||||
while benefiting from these features.
|
||||
* Maintain the proposal by having the next iteration for the Ethereum Foundation (EF)
|
||||
to apply for EF grants to promote the project and gain support from the Ethereum ecosystem.
|
||||
|
||||
## Task List
|
||||
|
||||
### Maintain de-MLS RFC with multi stewards
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-de-mls-tesnet:multi-steward-rfc`
|
||||
* owner: Ugur
|
||||
* status: in progress (15%)
|
||||
* start-date: 2025/10/25
|
||||
* end-date: 2025/11/25
|
||||
|
||||
#### Description
|
||||
|
||||
Maintain and develop the decentralized MLS RFC by addressing feedback.
|
||||
The RFC needs to contain a concrete flow and explanation.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to vacp2p/rfc-index repo with related updates.
|
||||
|
||||
### Multi-steward integration
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-de-mls-tesnet:multi-steward-integration`
|
||||
* owner: Ekaterina
|
||||
* status: in progress (5%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/11/01
|
||||
|
||||
#### Description
|
||||
|
||||
The multi-steward settings allow de-MLS that multiple stewards to manage the group
|
||||
changes to protect a single point of failure, better availability, and decentralization.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [de-MLS repository](https://github.com/vacp2p/de-mls)
|
||||
containing an update of message processing
|
||||
|
||||
### de-mls maintenance
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-de-mls-tesnet:de-mls-maintaining`
|
||||
* owner: Ekaterina
|
||||
* status: not started
|
||||
* start-date: 2025/06/30
|
||||
* end-date: 2025/09/30
|
||||
|
||||
#### Description
|
||||
|
||||
This task encompasses all maintenance updates for de-mls, including CI updates,
|
||||
testing, small issues, and the creation of future issues.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
---
|
||||
title: de-MLS testnet
|
||||
tags:
|
||||
- "2025q4"
|
||||
- "acz"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: "Releasing de-MLS with the multi-steward support and Ethereum authentication mechanism."
|
||||
|
||||
---
|
||||
|
||||
`vac:acz:ift:2025q4-de-mls-tesnet`
|
||||
|
||||
## Description
|
||||
This commitment involves releasing the de-MLS poc with the multi-steward configurations.
|
||||
The process includes presenting the findings, such as MLS over Waku and benchmarking,
|
||||
and then achieving better iteration for the EF grant.
|
||||
|
||||
### Background
|
||||
de-MLS is a decentralized, scalable, end-to-end encrypted (E2EE)
|
||||
group messaging application with Ethereum-based authentication.
|
||||
The primary goal of this project is to develop a comprehensive
|
||||
and a mature RFC that outlines decentralized, secure, and scalable group key generation,
|
||||
designed to accommodate large numbers of users within a single group.
|
||||
|
||||
During 2025q3, we released the multi-steward de-MLS RFC, including consensus implementation.
|
||||
The implementation plan for this quarter is to release multi-steward with a single consensus
|
||||
version with Ethereum authentication factor by operating across the Waku network.
|
||||
|
||||
### Narratives
|
||||
We will reinforce the Conduit of Expertise narrative by:
|
||||
* Develop the foundational framework for a decentralized, scalable messaging application
|
||||
* Research and implement the scalable and decentralized consensus mechanism.
|
||||
|
||||
We will also strengthen the Premier Research Destination narrative by:
|
||||
* Develop a standardized decentralized messaging application over the Waku network,
|
||||
by providing a well-structured RFC and a proof of concept (PoC) that demonstrates
|
||||
It's a base functionality within the ecosystem.
|
||||
This will allow teams and organizations to build their own messaging applications
|
||||
while benefiting from these features.
|
||||
* Maintain the proposal by having the next iteration for the Ethereum Foundation (EF)
|
||||
to apply for EF grants to promote the project and gain support from the Ethereum ecosystem.
|
||||
|
||||
## Task List
|
||||
|
||||
### Maintain de-MLS RFC with multi stewards
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-de-mls-tesnet:multi-steward-rfc`
|
||||
* owner: Ugur
|
||||
* status: in progress (15%)
|
||||
* start-date: 2025/10/25
|
||||
* end-date: 2025/11/25
|
||||
|
||||
#### Description
|
||||
|
||||
Maintain and develop the decentralized MLS RFC by addressing feedback.
|
||||
The RFC needs to contain a concrete flow and explanation.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to vacp2p/rfc-index repo with related updates.
|
||||
|
||||
### Multi-steward integration
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-de-mls-tesnet:multi-steward-integration`
|
||||
* owner: Ekaterina
|
||||
* status: in progress (5%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/11/01
|
||||
|
||||
#### Description
|
||||
|
||||
The multi-steward settings allow de-MLS that multiple stewards to manage the group
|
||||
changes to protect a single point of failure, better availability, and decentralization.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [de-MLS repository](https://github.com/vacp2p/de-mls)
|
||||
containing an update of message processing
|
||||
|
||||
### de-mls maintenance
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-de-mls-tesnet:de-mls-maintaining`
|
||||
* owner: Ekaterina
|
||||
* status: not started
|
||||
* start-date: 2025/06/30
|
||||
* end-date: 2025/09/30
|
||||
|
||||
#### Description
|
||||
|
||||
This task encompasses all maintenance updates for de-mls, including CI updates,
|
||||
testing, small issues, and the creation of future issues.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
A set of PRs and issues to [de-MLS repository](https://github.com/vacp2p/de-mls)
|
||||
@@ -1,166 +1,166 @@
|
||||
---
|
||||
title: Discovery
|
||||
tags:
|
||||
- "2025q4"
|
||||
- "acz"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: "Specifying disc-NG and releasing a document that collects the requirements of discovery"
|
||||
|
||||
---
|
||||
|
||||
`vac:acz:ift:2025q4-discovery`
|
||||
|
||||
Specifying a KAD-DHT–based, disc-NG–like Logos discovery capability
|
||||
and releasing a document that collects the requirements of discovery
|
||||
## Description
|
||||
|
||||
This commitment entails specifying a KAD-DHT–based, disc-NG–like Logos discovery capability
|
||||
specification with a focus on implementability (see [the paper](https://sonnino.com/papers/disc-ng.pdf));
|
||||
we will also collect requirements and assess their suitability for IFT projects.
|
||||
|
||||
### Narratives
|
||||
|
||||
By utilizing discovery exploration commitment,
|
||||
We will reinforce the Conduit of Expertise narrative by:
|
||||
* Providing the KAD-DHT–based disc-NG-like RFC that will be tailored for Logos applications.
|
||||
|
||||
We will also strengthen the Premier Research Destination narrative by:
|
||||
* Provides open-source KAD-DHT–based disc-NG-like RFC information to the community.
|
||||
|
||||
## Task List
|
||||
|
||||
### Draft RFC
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:draft-RFC`
|
||||
* owner: Arunima
|
||||
* status: in progress (10%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
#### Description
|
||||
|
||||
This task involves specifying disc-NG-like LOGOS discovery capabilities on top of KAD-DHT
|
||||
(see [the paper](https://sonnino.com/papers/disc-ng.pdf)) in an implementable way,
|
||||
extracting key components such as the registrar and advisor and drafting them into an RFC;
|
||||
once the draft RFC is assembled, the task also includes preparing the final RFC
|
||||
as a pull request by incorporating review feedback.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A notion document contains a draft RFC with its feedback.
|
||||
|
||||
### Registrar Module
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:registrar-module`
|
||||
* owner: Arunima
|
||||
* status: in progress (0%)
|
||||
* start-date: 2025/10/20
|
||||
* end-date: 2025/10/27
|
||||
|
||||
#### Description
|
||||
|
||||
In this task, the modular registrar module will be implemented in Golang to handle node registration,
|
||||
admission policies, and identity management.
|
||||
The module will manage how new participants join the network,
|
||||
enforce admission control rules derived from the RFC, and maintain metadata about registered nodes.
|
||||
The implementation will include validation logic, registration lifecycle handling,
|
||||
and interactions with the core routing layer.
|
||||
The goal is to ensure controlled participation and maintain the stability and trust of the system.
|
||||
The task is complete when nodes can register, be validated, and interact
|
||||
with the network under enforced admission control rules.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Advertiser Module
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:advertiser-module`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/10/27
|
||||
* end-date: 2025/11/03
|
||||
|
||||
#### Description
|
||||
|
||||
This task involves developing the advertiser component, which is responsible for broadcasting
|
||||
and maintaining service or capability advertisements across the network.
|
||||
The module will manage how nodes announce their presence and update their advertised information over time.
|
||||
It will interact closely with both the registrar and routing infrastructure to ensure
|
||||
that advertisements are discoverable and correctly propagated.
|
||||
Emphasis will be placed on efficient dissemination, freshness of information, and resilience to network churn.
|
||||
The task is complete when advertisements can be created,
|
||||
updated, and distributed correctly through the routing layer.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Discoverer Module
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:discoverer-module`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/11/03
|
||||
* end-date: 2025/11/10
|
||||
|
||||
#### Description
|
||||
|
||||
Here, the discoverer module will be implemented to enable nodes
|
||||
to search for and locate advertised services or peers in the network.
|
||||
It will interpret discovery queries, match them against active advertisements,
|
||||
and handle query routing through the established infrastructure.
|
||||
The module should also implement caching and fallback mechanisms to optimize performance.
|
||||
The focus will be on correctness, minimal latency in lookups,
|
||||
and adherence to the discovery semantics outlined in the RFC.
|
||||
The task is complete when discovery queries consistently
|
||||
return accurate and timely results for active advertisements.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Integration and Validation
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:integration-validation`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/11/10
|
||||
* end-date: 2025/11/24
|
||||
|
||||
#### Description
|
||||
|
||||
This final phase integrates all core modules into a cohesive system
|
||||
and validates their behavior through simulations.
|
||||
The components (registrar, advertiser, discoverer, and routing layer)
|
||||
will be connected and tested together under various scenarios.
|
||||
Simulations will cover registration, advertisement propagation,
|
||||
discovery requests, and network dynamics.
|
||||
Validation will focus on functional correctness, protocol compliance, and performance metrics.
|
||||
The task is complete when all modules operate together seamlessly
|
||||
and the integrated system passes functional and performance validation tests.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Logos Discovery Capability Spec
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:logos-disc-specs`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/10/30
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
|
||||
This task involves addressing the feedback from the draft RFC task,
|
||||
organizing it into a draft PR, and then going through another review phase.
|
||||
It also includes discussing and addressing any newly identified or initiative-requiring topics.
|
||||
The task concludes with the merge of the PR.
|
||||
|
||||
|
||||
#### Deliverables
|
||||
|
||||
---
|
||||
title: Discovery
|
||||
tags:
|
||||
- "2025q4"
|
||||
- "acz"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: "Specifying disc-NG and releasing a document that collects the requirements of discovery"
|
||||
|
||||
---
|
||||
|
||||
`vac:acz:ift:2025q4-discovery`
|
||||
|
||||
Specifying a KAD-DHT–based, disc-NG–like Logos discovery capability
|
||||
and releasing a document that collects the requirements of discovery
|
||||
## Description
|
||||
|
||||
This commitment entails specifying a KAD-DHT–based, disc-NG–like Logos discovery capability
|
||||
specification with a focus on implementability (see [the paper](https://sonnino.com/papers/disc-ng.pdf));
|
||||
we will also collect requirements and assess their suitability for IFT projects.
|
||||
|
||||
### Narratives
|
||||
|
||||
By utilizing discovery exploration commitment,
|
||||
We will reinforce the Conduit of Expertise narrative by:
|
||||
* Providing the KAD-DHT–based disc-NG-like RFC that will be tailored for Logos applications.
|
||||
|
||||
We will also strengthen the Premier Research Destination narrative by:
|
||||
* Provides open-source KAD-DHT–based disc-NG-like RFC information to the community.
|
||||
|
||||
## Task List
|
||||
|
||||
### Draft RFC
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:draft-RFC`
|
||||
* owner: Arunima
|
||||
* status: in progress (10%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
#### Description
|
||||
|
||||
This task involves specifying disc-NG-like LOGOS discovery capabilities on top of KAD-DHT
|
||||
(see [the paper](https://sonnino.com/papers/disc-ng.pdf)) in an implementable way,
|
||||
extracting key components such as the registrar and advisor and drafting them into an RFC;
|
||||
once the draft RFC is assembled, the task also includes preparing the final RFC
|
||||
as a pull request by incorporating review feedback.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A notion document contains a draft RFC with its feedback.
|
||||
|
||||
### Registrar Module
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:registrar-module`
|
||||
* owner: Arunima
|
||||
* status: in progress (0%)
|
||||
* start-date: 2025/10/20
|
||||
* end-date: 2025/10/27
|
||||
|
||||
#### Description
|
||||
|
||||
In this task, the modular registrar module will be implemented in Golang to handle node registration,
|
||||
admission policies, and identity management.
|
||||
The module will manage how new participants join the network,
|
||||
enforce admission control rules derived from the RFC, and maintain metadata about registered nodes.
|
||||
The implementation will include validation logic, registration lifecycle handling,
|
||||
and interactions with the core routing layer.
|
||||
The goal is to ensure controlled participation and maintain the stability and trust of the system.
|
||||
The task is complete when nodes can register, be validated, and interact
|
||||
with the network under enforced admission control rules.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Advertiser Module
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:advertiser-module`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/10/27
|
||||
* end-date: 2025/11/03
|
||||
|
||||
#### Description
|
||||
|
||||
This task involves developing the advertiser component, which is responsible for broadcasting
|
||||
and maintaining service or capability advertisements across the network.
|
||||
The module will manage how nodes announce their presence and update their advertised information over time.
|
||||
It will interact closely with both the registrar and routing infrastructure to ensure
|
||||
that advertisements are discoverable and correctly propagated.
|
||||
Emphasis will be placed on efficient dissemination, freshness of information, and resilience to network churn.
|
||||
The task is complete when advertisements can be created,
|
||||
updated, and distributed correctly through the routing layer.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Discoverer Module
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:discoverer-module`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/11/03
|
||||
* end-date: 2025/11/10
|
||||
|
||||
#### Description
|
||||
|
||||
Here, the discoverer module will be implemented to enable nodes
|
||||
to search for and locate advertised services or peers in the network.
|
||||
It will interpret discovery queries, match them against active advertisements,
|
||||
and handle query routing through the established infrastructure.
|
||||
The module should also implement caching and fallback mechanisms to optimize performance.
|
||||
The focus will be on correctness, minimal latency in lookups,
|
||||
and adherence to the discovery semantics outlined in the RFC.
|
||||
The task is complete when discovery queries consistently
|
||||
return accurate and timely results for active advertisements.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Integration and Validation
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:integration-validation`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/11/10
|
||||
* end-date: 2025/11/24
|
||||
|
||||
#### Description
|
||||
|
||||
This final phase integrates all core modules into a cohesive system
|
||||
and validates their behavior through simulations.
|
||||
The components (registrar, advertiser, discoverer, and routing layer)
|
||||
will be connected and tested together under various scenarios.
|
||||
Simulations will cover registration, advertisement propagation,
|
||||
discovery requests, and network dynamics.
|
||||
Validation will focus on functional correctness, protocol compliance, and performance metrics.
|
||||
The task is complete when all modules operate together seamlessly
|
||||
and the integrated system passes functional and performance validation tests.
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/disc-NG](https://github.com/vacp2p/disc-ng/) repo.
|
||||
|
||||
### Logos Discovery Capability Spec
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-discovery:logos-disc-specs`
|
||||
* owner: Arunima
|
||||
* status: not started
|
||||
* start-date: 2025/10/30
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
|
||||
This task involves addressing the feedback from the draft RFC task,
|
||||
organizing it into a draft PR, and then going through another review phase.
|
||||
It also includes discussing and addressing any newly identified or initiative-requiring topics.
|
||||
The task concludes with the merge of the PR.
|
||||
|
||||
|
||||
#### Deliverables
|
||||
|
||||
* A PR to the [vacp2p/rfc-index](https://github.com/vacp2p/rfc-index/) repo.
|
||||
@@ -1,101 +1,101 @@
|
||||
---
|
||||
title: Zerokit
|
||||
tags:
|
||||
- "2025q4"
|
||||
- "acz"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: "Maintaining and improving Zerokit, including the release of version v1.0.0,
|
||||
which supports BE and improved FFI, lastly researching new ZK proof techniques"
|
||||
|
||||
---
|
||||
|
||||
`vac:acz:ift:2025q4-zerokit`
|
||||
## Description
|
||||
|
||||
This commitment entails developing and maintaining Zerokit
|
||||
including Zerokit v1 release by advancing the next version, such as
|
||||
big-endian support, research on faster proving methods,
|
||||
lastly improved FFI feature and new ZK proofs research.
|
||||
|
||||
### Background
|
||||
|
||||
[Zerokit](https://github.com/vacp2p/zerokit) is a collection of Zero Knowledge modules
|
||||
that focus on RLN, developed in Rust, is intended for integration with various system programming environments.
|
||||
|
||||
In 2025q3, we released Zerokit v0.9.0, which supports improved CI, optimized, partially BE support and research on FFI improvements.
|
||||
|
||||
### Narratives
|
||||
|
||||
By utilizing the zerokit commitment, we will reinforce the Conduit of Expertise narrative by:
|
||||
* Delivers an optimized version for IFT projects utilizing Zerokit,
|
||||
including [nwaku](https://github.com/waku-org/nwaku)and [js-rln](https://github.com/waku-org/js-rln)
|
||||
and [Status L2](https://docs.status.network/).
|
||||
|
||||
We will also strengthen the Premier Research Destination narrative by:
|
||||
* Offers a Rust crate that serves as a more efficient open-source development tool for users looking to integrate RLN into their projects.
|
||||
* Verifying the existing ZK framework by integrating zerokit.
|
||||
|
||||
## Task List
|
||||
|
||||
### Zerokit maintaining
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-zerokit:zerokit-maintaining`
|
||||
* owner: Ekaterina
|
||||
* status: in progress (%0)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/30
|
||||
|
||||
#### Description
|
||||
This task encompasses all maintenance updates for Zerokit, including CI updates and the creation of future issues.
|
||||
|
||||
#### Deliverables
|
||||
A set of PRs and issues to [vacp2p/zerokit](https://github.com/vacp2p/zerokit/).
|
||||
|
||||
### FFI re-work
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-zerokit:ffi-rework`
|
||||
* owner: Vinh
|
||||
* status: in progress (60%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/11/01
|
||||
|
||||
#### Description
|
||||
The due date of this task is expanded to 11/01 due to the bugs and test requirements.
|
||||
|
||||
This task entails reworking Zerokit’s FFI (Foreign Function Interface) to support passing data in Big Endian format,
|
||||
and to transition from a manual byte-based serialization approach to a safer and more maintainable opaque-struct model.
|
||||
Currently, FFI functions require developers to manually allocate buffers, serialize arguments,
|
||||
and handle deserialization within Rust, which introduces overhead, performance loss, fragile data handling
|
||||
and complex documentation requirements.
|
||||
Additionally, maintaining separate implementations for different endianness formats
|
||||
and managing numerous byte-to-struct conversions adds unnecessary complexity.
|
||||
|
||||
The proposed solution is to adopt an opaque struct pattern managed by Rust,
|
||||
allowing C code to manipulate only pointers through a defined API, leveraging the safer_ffi crate
|
||||
to automatically generate C headers, ensure memory safety, and remove unsafe code,
|
||||
as in planned in [this zerokit/discussion](https://github.com/vacp2p/zerokit/discussions/336).
|
||||
|
||||
This change aims to simplify the FFI layer, improve performance, reduce maintenance effort,
|
||||
and make the system more resilient to data format changes while easing integration with languages like C and Nim.
|
||||
|
||||
This task is complete when a proof of concept demonstrating RLN proof generation
|
||||
and verification through the new FFI model is implemented and validated
|
||||
for memory safety and Big Endian compatibility.
|
||||
|
||||
#### Deliverables
|
||||
A set of PRs and issues to [vacp2p/zerokit](https://github.com/vacp2p/zerokit/).
|
||||
|
||||
### Release v1
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-zerokit:release`
|
||||
* owner: Ekaterina
|
||||
* status: not started
|
||||
* start-date: 2025/12/15
|
||||
* end-date: 2025/12/30
|
||||
|
||||
#### Description
|
||||
The new version of the Zerokit v1.0.0.
|
||||
|
||||
#### Deliverables
|
||||
---
|
||||
title: Zerokit
|
||||
tags:
|
||||
- "2025q4"
|
||||
- "acz"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: "Maintaining and improving Zerokit, including the release of version v1.0.0,
|
||||
which supports BE and improved FFI, lastly researching new ZK proof techniques"
|
||||
|
||||
---
|
||||
|
||||
`vac:acz:ift:2025q4-zerokit`
|
||||
## Description
|
||||
|
||||
This commitment entails developing and maintaining Zerokit
|
||||
including Zerokit v1 release by advancing the next version, such as
|
||||
big-endian support, research on faster proving methods,
|
||||
lastly improved FFI feature and new ZK proofs research.
|
||||
|
||||
### Background
|
||||
|
||||
[Zerokit](https://github.com/vacp2p/zerokit) is a collection of Zero Knowledge modules
|
||||
that focus on RLN, developed in Rust, is intended for integration with various system programming environments.
|
||||
|
||||
In 2025q3, we released Zerokit v0.9.0, which supports improved CI, optimized, partially BE support and research on FFI improvements.
|
||||
|
||||
### Narratives
|
||||
|
||||
By utilizing the zerokit commitment, we will reinforce the Conduit of Expertise narrative by:
|
||||
* Delivers an optimized version for IFT projects utilizing Zerokit,
|
||||
including [nwaku](https://github.com/waku-org/nwaku)and [js-rln](https://github.com/waku-org/js-rln)
|
||||
and [Status L2](https://docs.status.network/).
|
||||
|
||||
We will also strengthen the Premier Research Destination narrative by:
|
||||
* Offers a Rust crate that serves as a more efficient open-source development tool for users looking to integrate RLN into their projects.
|
||||
* Verifying the existing ZK framework by integrating zerokit.
|
||||
|
||||
## Task List
|
||||
|
||||
### Zerokit maintaining
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-zerokit:zerokit-maintaining`
|
||||
* owner: Ekaterina
|
||||
* status: in progress (%0)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/30
|
||||
|
||||
#### Description
|
||||
This task encompasses all maintenance updates for Zerokit, including CI updates and the creation of future issues.
|
||||
|
||||
#### Deliverables
|
||||
A set of PRs and issues to [vacp2p/zerokit](https://github.com/vacp2p/zerokit/).
|
||||
|
||||
### FFI re-work
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-zerokit:ffi-rework`
|
||||
* owner: Vinh
|
||||
* status: in progress (60%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/11/01
|
||||
|
||||
#### Description
|
||||
The due date of this task is expanded to 11/01 due to the bugs and test requirements.
|
||||
|
||||
This task entails reworking Zerokit’s FFI (Foreign Function Interface) to support passing data in Big Endian format,
|
||||
and to transition from a manual byte-based serialization approach to a safer and more maintainable opaque-struct model.
|
||||
Currently, FFI functions require developers to manually allocate buffers, serialize arguments,
|
||||
and handle deserialization within Rust, which introduces overhead, performance loss, fragile data handling
|
||||
and complex documentation requirements.
|
||||
Additionally, maintaining separate implementations for different endianness formats
|
||||
and managing numerous byte-to-struct conversions adds unnecessary complexity.
|
||||
|
||||
The proposed solution is to adopt an opaque struct pattern managed by Rust,
|
||||
allowing C code to manipulate only pointers through a defined API, leveraging the safer_ffi crate
|
||||
to automatically generate C headers, ensure memory safety, and remove unsafe code,
|
||||
as in planned in [this zerokit/discussion](https://github.com/vacp2p/zerokit/discussions/336).
|
||||
|
||||
This change aims to simplify the FFI layer, improve performance, reduce maintenance effort,
|
||||
and make the system more resilient to data format changes while easing integration with languages like C and Nim.
|
||||
|
||||
This task is complete when a proof of concept demonstrating RLN proof generation
|
||||
and verification through the new FFI model is implemented and validated
|
||||
for memory safety and Big Endian compatibility.
|
||||
|
||||
#### Deliverables
|
||||
A set of PRs and issues to [vacp2p/zerokit](https://github.com/vacp2p/zerokit/).
|
||||
|
||||
### Release v1
|
||||
|
||||
* fully qualified name: `vac:acz:ift:2025q4-zerokit:release`
|
||||
* owner: Ekaterina
|
||||
* status: not started
|
||||
* start-date: 2025/12/15
|
||||
* end-date: 2025/12/30
|
||||
|
||||
#### Description
|
||||
The new version of the Zerokit v1.0.0.
|
||||
|
||||
#### Deliverables
|
||||
A set of PRs to vacp2p/zerokit repository with [tag v1.0.0](https://github.com/vacp2p/zerokit/releases/tag/v1.0.0)
|
||||
@@ -20,13 +20,14 @@ Extract and build dashboard for X Spaces
|
||||
|
||||
* fully qualified name: `vac:bi:comm:2025q4-comm-x-spaces-analytics`
|
||||
* owner: c200bzh
|
||||
* status: In Progress
|
||||
* start-date: 06/08/2025
|
||||
* end-date:
|
||||
* status: in progress (5%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -22,13 +22,14 @@ It is a continuous task to extracts and monitore Crypto wallets for the Finance
|
||||
* fully qualified name: `vac:bi:finance:2025q3-finance-wallets-extractions`
|
||||
* owner: apentori
|
||||
* status: done
|
||||
* start-date: 05/09/2025
|
||||
* end-date: 12/09/2025
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/83
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* [Airbyte connector to extract wallets informations](https://github.com/status-im/airbyte-custom-connector/commit/ea693a01f266b714677d7aadb6633102ab07cc1a)
|
||||
@@ -39,14 +40,15 @@ https://github.com/status-im/data-docs/issues/83
|
||||
|
||||
* fully qualified name: `vac:bi:finance:2025q3-finance-wallets-visualization`
|
||||
* owner:
|
||||
* status: wait for information
|
||||
* start-date: to determin
|
||||
* end-date: to determind
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Continue on the [issue](https://github.com/status-im/data-docs/issues/83), waiting for finance feedback.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* Adapted visualization dashboard
|
||||
|
||||
@@ -24,14 +24,15 @@ Build Dashboard containing the overview of the Program activity:
|
||||
|
||||
* fully qualified name: `vac:bi:ift:2025q4-ift-program-dashboard`
|
||||
* owner:
|
||||
* status: todo
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/75
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* Dashboard for all projects
|
||||
|
||||
@@ -22,14 +22,15 @@ In order to help the Townhall organisation, a list of recent forum post, release
|
||||
|
||||
* fully qualified name: `vac:bi:ift:2025q4-ift-townhall-content-helper`
|
||||
* owner:
|
||||
* status: todo
|
||||
* start-date: 01/10/2025
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/98
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* Confirm the delivery with Corey
|
||||
|
||||
@@ -21,14 +21,15 @@ Extract the transcript from Youtube video to use it for RAG context and other po
|
||||
|
||||
* fully qualified name: `vac:bi:ift:2025q4-ift-townhall-transcript`
|
||||
* owner: nickninov
|
||||
* status: In Progress
|
||||
* start-date: 01/10/2025
|
||||
* end-date: 06/08/2025
|
||||
* status: in progress (5%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/78
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* Dagster DAG to extract youtube videos transcript.
|
||||
|
||||
@@ -20,15 +20,16 @@ Monitor blogs and Social media to find histories where the logos stack bring sol
|
||||
|
||||
* fully qualified name: `vac:bi:logos:2025q4-logos-winnable-stories-sm-extractions`
|
||||
* owner: c2000bzh and nickninov
|
||||
* status: done (Lemmy connector will be kept for later)
|
||||
* start-date: 05/08/2025
|
||||
* end-date: 24/09/2025
|
||||
* status: done
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Either an expressive description or a link to a github issue with an expressive description.
|
||||
https://github.com/status-im/data-docs/issues/62
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
Airbyte connectors for :
|
||||
@@ -40,9 +41,9 @@ Airbyte connectors for :
|
||||
|
||||
* fully qualified name: `vac:bi:logos:2025q4-logos-winnable-stories-sm-accounts`
|
||||
* owner: c2000bzh and nickninov
|
||||
* status: todo
|
||||
* start-date: 01/10/2025
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
|
||||
### Description
|
||||
|
||||
@@ -22,14 +22,15 @@ Extract the transcript from Youtube video to use it for RAG context and other po
|
||||
|
||||
* fully qualified name: `vac:bi:rag:2025q4-rag-context-code`
|
||||
* owner: nickninov
|
||||
* status: In Progress
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: in progress (5%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/82
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* Add task to dagster ETL to include code repository to the RAG context
|
||||
@@ -39,15 +40,16 @@ https://github.com/status-im/data-docs/issues/82
|
||||
|
||||
* fully qualified name: `vac:bi:rag:2025q4-rag-context-google-meet`
|
||||
* owner: nickninov
|
||||
* status: In Progress
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: in progress (5%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Include transcript from Google Meeting to the RAG context.
|
||||
https://github.com/status-im/data-docs/issues/68
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* Add task to dagster ETL to include meeting transcript to the RAG context.
|
||||
|
||||
@@ -21,14 +21,15 @@ Improve RAG embedding by includind crypto context.
|
||||
|
||||
* fully qualified name: `vac:bi:rag:2025q4-rag-embedding-improvment`
|
||||
* owner: nickninov
|
||||
* status: In Progress
|
||||
* start-date: 16/09/2025
|
||||
* end-date:
|
||||
* status: in progress (5%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/89
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* New embedding model for the RAG pipeline to include blockchain context.
|
||||
@@ -39,15 +40,16 @@ https://github.com/status-im/data-docs/issues/89
|
||||
|
||||
* fully qualified name: `vac:bi:rag:2025q4-rag-embedding-named-entity-recognition`
|
||||
* owner: nickninov
|
||||
* status: todo
|
||||
* start-date: 01/09/2025
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/81
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* Dataset of terminology to include
|
||||
|
||||
@@ -20,14 +20,15 @@ Setting up a evaluation process for the RAG responses of predefined questions. T
|
||||
|
||||
* fully qualified name: `vac:bi:rag:2025q4-rag-evaluation-pipeline`
|
||||
* owner: nickninov
|
||||
* status: todo
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/99
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* List of questions to use as evaluation process
|
||||
|
||||
@@ -20,13 +20,14 @@ description: Build a notification pipeline for status Social
|
||||
* fully qualified name: `vac:bi:status:2025q4-status-social-pipeline`
|
||||
* owner: c200bzh
|
||||
* status: done
|
||||
* start-date: 23/09/2025
|
||||
* end-date: 03/10/2025
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
https://github.com/status-im/data-docs/issues/88
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
* n8n pipeline to push notification in Status Discord for Twitter post and forum post.
|
||||
|
||||
@@ -45,29 +45,43 @@ by making sure we’re open, accessible, and continuously learning from each oth
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-dst-research-destination:ethereum-foundation`
|
||||
* owner: Alberto
|
||||
* status: recurring
|
||||
* start-date: 2025-10-01
|
||||
* end-date: 2025-12-31
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Apply for an EF grant through the [Project Grants](https://esp.ethereum.foundation/applicants/project-grants).
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Forum posts (recurring)
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-dst-research-destination:forum-post`
|
||||
* owner: Alberto
|
||||
* status: recurring
|
||||
* start-date: 2025-10-01
|
||||
* end-date: 2025-12-31
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Publish recurring DST forum updates that translate experiment results into clear takeaways for the wider community.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Public reports (recurring)
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-dst-research-destination:public-reports`
|
||||
* owner: Alberto
|
||||
* status: recurring
|
||||
* start-date: 2025-10-01
|
||||
* end-date: 2025-12-31
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Produce polished public reports that package DST findings into shareable narratives for external stakeholders.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -49,7 +49,7 @@ reinforcing cross project collaboration.
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-dst-tooling:general-tooling`
|
||||
* owner: Alberto
|
||||
* status: recurring
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
@@ -70,9 +70,9 @@ Should be made general when possible.
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-dst-tooling:general-log-parser`
|
||||
* owner: Alberto
|
||||
* status: 0%
|
||||
* start-date: -
|
||||
* end-date: -
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
The goal of this task is to extend the DST log parser tool to
|
||||
@@ -87,6 +87,7 @@ Status envelope IDs. This will empower developers to better understand
|
||||
network events, troubleshoot issues, and optimize usage scenarios within
|
||||
libp2p, Gossipsub, MVDS, and SDS protocols.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs:
|
||||
- Related Documents:
|
||||
@@ -96,9 +97,9 @@ libp2p, Gossipsub, MVDS, and SDS protocols.
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-dst-tooling:scenario-workflow-manager`
|
||||
* owner: TBD
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
The objective of this task is to create a workflow management tool to design,
|
||||
@@ -112,6 +113,7 @@ message interactions in distributed environments. This tool aims to
|
||||
improve understanding of protocols like Gossipsub and libp2p, both in regular
|
||||
workflows and edge-case scenarios.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs:
|
||||
- Related Documents:
|
||||
@@ -121,9 +123,9 @@ workflows and edge-case scenarios.
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-dst-tooling:local-stack-analysis`
|
||||
* owner: TBD
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Improve the main repository with a local stack for deploying experiments in local.
|
||||
@@ -133,6 +135,7 @@ are also working properly.
|
||||
This stack should be easy to build, with documentation and examples.
|
||||
Ideally it is done with Docker Desktop, or any other light Kubernetes solution.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs:
|
||||
- Related Documents:
|
||||
|
||||
@@ -27,36 +27,45 @@ scaling ideas, and other insights.
|
||||
|
||||
### Scaling analysis
|
||||
|
||||
* fully qualified name: `vac:dst:vac:2025q4-scaling-think-tank:waku-X`
|
||||
* fully qualified name: `vac:dst:ift:2025q4-scaling-think-tank:waku-X`
|
||||
* owner: TBD
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Scaling analysis
|
||||
|
||||
* fully qualified name: `vac:dst:vac:2025q4-scaling-think-tank:libp2p-X`
|
||||
* fully qualified name: `vac:dst:ift:2025q4-scaling-think-tank:libp2p-X`
|
||||
* owner: TBD
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Scaling analysis
|
||||
|
||||
* fully qualified name: `vac:dst:vac:2025q4-scaling-think-tank:nomos-X`
|
||||
* fully qualified name: `vac:dst:ift:2025q4-scaling-think-tank:nomos-X`
|
||||
* owner: TBD
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
#### Deliverables
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
@@ -59,14 +59,15 @@ This will also help spur on outside adoption and contributions.
|
||||
|
||||
* fully qualified name: `vac:dst:nomos:2025q4-nomos-scaling:nomos-blendnet-benchmarking`
|
||||
* owner: Alberto
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Measure the speed and reliability of Nomos's blendnet.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
* Benchmarks done
|
||||
* Report published with all relevant details
|
||||
@@ -76,14 +77,15 @@ Measure the speed and reliability of Nomos's blendnet.
|
||||
|
||||
* fully qualified name: `vac:dst:nomos:2025q4-nomos-scaling:nomos-da-benchmarking`
|
||||
* owner: Alberto
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Measure Nomos bandwidth usage in DA per node and entire network.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
* PRS:
|
||||
* Documents:
|
||||
@@ -93,14 +95,15 @@ Measure Nomos bandwidth usage in DA per node and entire network.
|
||||
|
||||
* fully qualified name: `vac:dst:nomos:2025q4-nomos-scaling:nomos-consumption`
|
||||
* owner: Alberto
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Measure Nomos resource consumption (CPU/RAM) usage in different scenarios.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
* PRS:
|
||||
* Documents:
|
||||
* Documents:
|
||||
|
||||
@@ -50,9 +50,9 @@ and especially those we want to work with externally.
|
||||
|
||||
* fully qualified name: `vac:dst:status:2025q4-status-evaluation:one-to-one-outage`
|
||||
* owner: Alberto
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
[Notion Link](https://www.notion.so/Chat-Protocol-Benchmarks-1938f96fb65c80d8b22fdf641c5ff003?source=copy_link#19d8f96fb65c809e8f11d4296821b24d)
|
||||
@@ -76,21 +76,26 @@ Test:
|
||||
- Metrics to ensure all messages are **eventually** received (100%) is important
|
||||
- and metrics as specified in this page.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Status-backend private chats - send group outage
|
||||
|
||||
* fully qualified name: `vac:dst:status:2025q4-status-evaluation:group-outage`
|
||||
* owner: Alberto
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
[Notion Link](https://www.notion.so/Chat-Protocol-Benchmarks-1938f96fb65c80d8b22fdf641c5ff003?source=copy_link#19d8f96fb65c80aa8459d54b975df8b0)
|
||||
Same as @Send one-to-one message - Network outage for private group
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Chat protocol benchmarks followup
|
||||
@@ -112,4 +117,4 @@ to repeat the benchmarks adding light nodes in the same chat protocol benchmarks
|
||||
- [Github PR: Multiple consumers #35](https://github.com/vacp2p/status-benchmarks/pull/35)
|
||||
- [Github PR: Logger adjustments #37](https://github.com/vacp2p/status-benchmarks/pull/37)
|
||||
- Documents:
|
||||
- [Notion: Status-light and nWaku filter](https://www.notion.so/Status-light-and-nWaku-filter-2858f96fb65c8019ac2af3a84c688d68)
|
||||
- [Notion: Status-light and nWaku filter](https://www.notion.so/Status-light-and-nWaku-filter-2858f96fb65c8019ac2af3a84c688d68)
|
||||
|
||||
@@ -61,9 +61,9 @@ and especially those we want to work with externally.
|
||||
|
||||
* fully qualified name: `vac:dst:vac:2025q4-libp2p-evaluation:regression-testing`
|
||||
* owner: Alberto
|
||||
* status: recurring
|
||||
* start-date: 2025-10-01
|
||||
* end-date: 2025-12-31
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Run different scenarios
|
||||
@@ -74,6 +74,7 @@ Test for known regressions
|
||||
that have occurred in the past
|
||||
and ensure they don't happen again.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
* Analysis:
|
||||
* [Notion: Nim-libp2p 1.14.0 Report](https://www.notion.so/Nim-libp2p-v1-14-0-regression-testing-October-2025-28d8f96fb65c803ba789ccdb73753cab)
|
||||
@@ -83,14 +84,15 @@ and ensure they don't happen again.
|
||||
|
||||
* fully qualified name: `vac:dst:vac:2025q4-libp2p-evaluation:universal-connectivity`
|
||||
* owner: Alberto
|
||||
* status: -
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Help p2p team running scenarios with universal connectivity app
|
||||
and checking functionality with other libp2p implementations.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
* PRs:
|
||||
* Report:
|
||||
@@ -100,14 +102,15 @@ and checking functionality with other libp2p implementations.
|
||||
|
||||
* fully qualified name: `vac:dst:vac:2025q4-libp2p-evaluation:quic-vs-tcp`
|
||||
* owner: TBD
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Perform a comparison between nim-libp2p using quic and waku using mplex and yamux.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Reports:
|
||||
- Related PRs if apply:
|
||||
@@ -116,14 +119,15 @@ Perform a comparison between nim-libp2p using quic and waku using mplex and yamu
|
||||
|
||||
* fully qualified name: `vac:dst:vac:2025q4-libp2p-evaluation:interop-framework`
|
||||
* owner: TBD
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Perform a comparison between nim-libp2p using quic and waku using mplex and yamux.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Reports:
|
||||
- Related PRs if apply:
|
||||
@@ -131,7 +135,7 @@ Perform a comparison between nim-libp2p using quic and waku using mplex and yamu
|
||||
|
||||
### Mix in nim-libp2p node
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-libp2p-evaluation:mix-in-nim-libp2p-node`
|
||||
* fully qualified name: `vac:dst:vac:2025q4-libp2p-evaluation:mix-in-nim-libp2p-node`
|
||||
* owner: Farooq
|
||||
* status: 90%
|
||||
* start-date: 2025/10/06
|
||||
@@ -148,7 +152,7 @@ include mix to the configuration options of the node.
|
||||
|
||||
### Go-libp2p node
|
||||
|
||||
* fully qualified name: `vac:dst:ift:2025q4-libp2p-evaluation:go-libp2p-node`
|
||||
* fully qualified name: `vac:dst:vac:2025q4-libp2p-evaluation:go-libp2p-node`
|
||||
* owner: Farooq
|
||||
* status: 60%
|
||||
* start-date: 2025/10/06
|
||||
@@ -163,8 +167,3 @@ Report results of a single scenario (fixed parameters) using K8s and shadow.
|
||||
#### Deliverables
|
||||
- PRs:
|
||||
- Related Documents:
|
||||
|
||||
### Webtransport ?
|
||||
|
||||
### KAD-DHT ?
|
||||
|
||||
|
||||
@@ -63,9 +63,9 @@ to the Premier Research destination narrative by:
|
||||
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-evaluation:regression-testing`
|
||||
* owner: Alberto
|
||||
* status: recurring
|
||||
* start-date: 2025-10-01
|
||||
* end-date: 2025-12-31
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Run different scenarios
|
||||
@@ -76,6 +76,7 @@ Test for known regressions
|
||||
that have occurred in the past
|
||||
and ensure they don't happen again.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Reports:
|
||||
- Related PRs if apply:
|
||||
@@ -85,14 +86,15 @@ and ensure they don't happen again.
|
||||
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-evaluation:quic-vs-tcp`
|
||||
* owner: Alberto
|
||||
* status: 0%
|
||||
* start-date: -
|
||||
* end-date: -
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
Perform a comparison between Waku using quic and waku using mplex and yamux.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Reports:
|
||||
- Related PRs if apply:
|
||||
@@ -102,9 +104,9 @@ Perform a comparison between Waku using quic and waku using mplex and yamux.
|
||||
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-evaluation:nwaku-api-image`
|
||||
* owner: TBD
|
||||
* status: 0%
|
||||
* start-date: -
|
||||
* end-date: -
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
@@ -113,6 +115,7 @@ This involves images that are used to interact with store, filter and lightpush
|
||||
It should be investigated if adding the Waku publisher here is also a useful idea.
|
||||
Documentation and code clarity is required, as this could be used by the waku team, or other projects.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Reports:
|
||||
- Related PRs if apply:
|
||||
- Related PRs if apply:
|
||||
|
||||
@@ -48,16 +48,17 @@ through performance insights during the drafting process.
|
||||
|
||||
[Link to Waku FURPS](https://github.com/waku-org/pm/blob/master/draft-roadmap/hardening_and_scaling_foundation_for_private_chat.md#hardening-and-scaling-foundations-for-private-chats)
|
||||
|
||||
* fully qualified name: `-`
|
||||
* owner: -
|
||||
* status: -
|
||||
* start-date: -
|
||||
* end-date: -
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-scaling:private-chats-hardening`
|
||||
* owner: TBD
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
To have: Vac-DST: status-backend benchmarks
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Code:
|
||||
- Report:
|
||||
@@ -69,9 +70,9 @@ To have: Vac-DST: status-backend benchmarks
|
||||
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-scaling:optimise-browser-bootstrapping`
|
||||
* owner: Pearson
|
||||
* status: 0%
|
||||
* start-date: 2025-10-15
|
||||
* end-date: 2025-10-31
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
@@ -85,6 +86,7 @@ after disconnection; in a network with 1 bootstrap node,
|
||||
messages within 5 seconds; in a network with 1 bootstrap
|
||||
node, 100 service nodes and 500 browser nodes.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Code:
|
||||
- Report:
|
||||
@@ -96,11 +98,11 @@ node, 100 service nodes and 500 browser nodes.
|
||||
|
||||
[Link to Waku FURPS](https://github.com/waku-org/pm/blob/master/draft-roadmap/integrate_nwaku_in_status_desktop_relay_mode_only.md#integrate-nwaku-in-status-desktop-relay-mode-only)
|
||||
|
||||
* fully qualified name: `-`
|
||||
* owner: -
|
||||
* status: -
|
||||
* start-date: -
|
||||
* end-date: -
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-scaling:nwaku-in-status-desktop`
|
||||
* owner: TBD
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
|
||||
@@ -109,6 +111,7 @@ Waku estimated date of completion: 30 June
|
||||
Vac-DST to complete go-waku-based benchmark works and proceed with
|
||||
nwaku-based vs go-waku-based status-backend comparisons.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Code:
|
||||
- Report:
|
||||
@@ -120,11 +123,11 @@ nwaku-based vs go-waku-based status-backend comparisons.
|
||||
|
||||
[Link to Waku FURPS](https://github.com/waku-org/pm/blob/master/draft-roadmap/introduce_e2e_reliability_in_status.md#sds-protocol-in-status---basic-integration)
|
||||
|
||||
* fully qualified name: `-`
|
||||
* owner: -
|
||||
* status: -
|
||||
* start-date: -
|
||||
* end-date: -
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-scaling:sds-integration`
|
||||
* owner: TBD
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Waku estimated date of completion: 31 Aug
|
||||
@@ -138,6 +141,7 @@ recipient within `S` seconds
|
||||
can detect 90% of missed messages within `3*S` seconds
|
||||
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Code:
|
||||
- Report:
|
||||
@@ -150,11 +154,11 @@ can detect 90% of missed messages within `3*S` seconds
|
||||
|
||||
[Link to Waku FURPS](https://github.com/waku-org/pm/blob/master/draft-roadmap/introduce_e2e_reliability_in_status.md#sds-protocol-in-status---basic-recovery)
|
||||
|
||||
* fully qualified name: `-`
|
||||
* owner: -
|
||||
* status: -
|
||||
* start-date: -
|
||||
* end-date: -
|
||||
* fully qualified name: `vac:dst:waku:2025q4-waku-scaling:sds-recovery`
|
||||
* owner: TBD
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Waku estimated date of completion: 31 Aug 2025
|
||||
@@ -163,6 +167,7 @@ Prove that:
|
||||
- When receiving messages in group, the receiver can
|
||||
- reach eventual consistency within `6*S` seconds
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Code:
|
||||
- Report:
|
||||
|
||||
@@ -23,10 +23,10 @@ Deliver a minimal set of c-bindings around nim-libp2p core. The bindings should
|
||||
### Core Bindings
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-cbindings:core`
|
||||
* owner:
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### description
|
||||
Implement and test c-bindings for core nim-libp2p functionality. Exported functions must include:
|
||||
@@ -38,6 +38,7 @@ Implement and test c-bindings for core nim-libp2p functionality. Exported functi
|
||||
- read/write stream
|
||||
- close stream
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Static c library build artifact
|
||||
- Header file exposing ffi-safe api
|
||||
@@ -49,10 +50,10 @@ Implement and test c-bindings for core nim-libp2p functionality. Exported functi
|
||||
### kademlia
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-cbindings:kademlia`
|
||||
* owner:
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### description
|
||||
Extend c-bindings to expose Kademlia functionality. This task depends on `vac:p2p:ift:2025q4-nimlibp2p-kad-dht`.
|
||||
@@ -61,6 +62,7 @@ Exported functions must include:
|
||||
- Find Node / Put Value / Get Value / Set Providers / Get Providers
|
||||
- Discovery
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### deliverables
|
||||
- Updated c header + library with kademlia api
|
||||
- Tests verifying kademlia behavior via ffi
|
||||
@@ -71,10 +73,10 @@ Exported functions must include:
|
||||
### gossipsub
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-cbindings:gossipsub`
|
||||
* owner:
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### description
|
||||
Extend c-bindings to expose Gossipsub Functionality. Exported functions must include:
|
||||
@@ -82,6 +84,7 @@ Extend c-bindings to expose Gossipsub Functionality. Exported functions must inc
|
||||
- publish/subscribe
|
||||
- add/remove validators
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### deliverables
|
||||
- Updated c header + library with gossipsub api
|
||||
- Tests verifying pub/sub behavior via ffi
|
||||
@@ -91,15 +94,16 @@ Extend c-bindings to expose Gossipsub Functionality. Exported functions must inc
|
||||
### Custom Protocols
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-cbindings:custom-protocols`
|
||||
* owner:
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Provide FFI to register and handle custom protocols from c, enabling downstream applications to define custom behaviors.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- FFI API for custom protocol registration
|
||||
- Example implementation + tests
|
||||
- Documentation
|
||||
- Documentation
|
||||
@@ -23,14 +23,15 @@ Enable IPv6 in nim-libp2p end-to-end so users of the library can run dual-stack
|
||||
### Core transports (tcp/quic)
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-ipv6:transport`
|
||||
* owner:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Add IPv6 listen/dial for tcp and quic. Might require changes in chronos
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- nodes can listen on /ip6 and accept inbound requests
|
||||
- dialer can dial /ip6 addresses
|
||||
@@ -39,16 +40,17 @@ Add IPv6 listen/dial for tcp and quic. Might require changes in chronos
|
||||
### addresses & identity
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-ipv6:addresses`
|
||||
* owner:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Add IPv6 support in the switch when specifying listening multiaddresses containing ip6 component.
|
||||
Ensure ip6 addresses are advertised in identify.
|
||||
Implement measures to handle duplicated IPs in peerstore/addresses being listened to (i.e 192.0.2.42 vs 2001:db8::1234).
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Identify advertises correct /ip6 addrs; observed addrs tracked per transport
|
||||
|
||||
@@ -56,14 +58,15 @@ Implement measures to handle duplicated IPs in peerstore/addresses being listene
|
||||
### Testing, Interop & CI
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-ipv6:testing`
|
||||
* owner:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Ensure IPv6 support and ensure there are no regressions in IPv4 support. Add test units demonstrating the support, and check that interop against other implementations is achieved
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Test units focusing on IPv6
|
||||
- Interop tests against other implementations that support IPv6
|
||||
|
||||
@@ -12,6 +12,8 @@ description: Implement Kademlia DHT
|
||||
|
||||
`vac:p2p:ift:2025q4-nimlibp2p-kad-dht`
|
||||
|
||||
## Description
|
||||
|
||||
Implement Kademlia Distributed Hash Table in nim-libp2p, based on the [libp2p specification](https://github.com/libp2p/specs/blob/master/kad-dht/) as an additional discovery mechanism.
|
||||
This commitment involves two main objectives: implementing nim-kademlia-dht, integrating this in nim-libp2p and making sure there is interoperability with other libp2p implementations.
|
||||
This deliverable continues the work started in 2025q2
|
||||
@@ -20,15 +22,16 @@ This deliverable continues the work started in 2025q2
|
||||
|
||||
### Routing table and RPC Protocol
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q2-nimlibp2p-kad-dht:routing-and-rpc`
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-kad-dht:routing-and-rpc`
|
||||
* owner: gabe/rramos
|
||||
* status: 75%
|
||||
* start-date: 2025-04-08
|
||||
* end-date:
|
||||
* status: in progress(75%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Implement Kademlia’s XOR-based routing table with bucket management. Define RPC messages (`PING`, `SET_VALUE`, `GET_VALUE`, `ADD_PROVIDERS`, `GET_PROVIDERS`, `FIND_NODE`) for node communication.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- [vacp2p/nim-libp2p#1454](https://github.com/vacp2p/nim-libp2p/pull/1454) feat(kad-dht): routing table
|
||||
- [vacp2p/nim-libp2p#1453](https://github.com/vacp2p/nim-libp2p/pull/1453) feat(kad-dht): protobuffers
|
||||
@@ -39,14 +42,15 @@ Implement Kademlia’s XOR-based routing table with bucket management. Define RP
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-kad-dht:bootstraping-and-lookup`
|
||||
* owner: rramos
|
||||
* status: 100%
|
||||
* start-date: 2025-05-05
|
||||
* end-date: 2025-08-18
|
||||
* status: done
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Enable nodes to join the network via bootstrap peers. Implement iterative lookup for efficient key
|
||||
discovery and retrieval
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- [vacp2p/nim-libp2p#1624](https://github.com/vacp2p/nim-libp2p/pull/1624) feat(kad-dht): findPeer
|
||||
|
||||
@@ -54,15 +58,16 @@ discovery and retrieval
|
||||
### Network Maintenance & Node Management
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-kad-dht:network-maintenance-node-management`
|
||||
* owner:
|
||||
* status: 50%
|
||||
* start-date: 2025-10-08
|
||||
* end-date:
|
||||
* owner: gabe
|
||||
* status: in progress(50%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Handle bucket refresh, node eviction, and periodic pings to maintain an active routing table.
|
||||
Implement bucket splitting and adaptive refresh strategies.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- [vacp2p/nim-libp2p#1746](https://github.com/vacp2p/nim-libp2p/pull/1746) chore(kad): routing table eviction policy
|
||||
|
||||
@@ -71,14 +76,15 @@ Implement bucket splitting and adaptive refresh strategies.
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-kad-dht:data-storage`
|
||||
* owner: gabe
|
||||
* status: 90%
|
||||
* start-date: 2025-07-28
|
||||
* end-date:
|
||||
* status: in progress(90%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Implement the logic for `SET_VALUE` and `ADD_PROVIDERS`. Store key-value pairs with expiration and replication mechanisms.
|
||||
Ensure values persist despite churn, using periodic re-publication and redundancy strategies
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- [vacp2p/nim-libp2p#1582](https://github.com/vacp2p/nim-libp2p/pull/1582) feat(kad): Initial unstable putval api
|
||||
- [vacp2p/nim-libp2p#1749](https://github.com/vacp2p/nim-libp2p/pull/1749) chore(kad): tidy up putVal
|
||||
@@ -90,13 +96,14 @@ Ensure values persist despite churn, using periodic re-publication and redundanc
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-kad-dht:data-retrieval`
|
||||
* owner: gabe
|
||||
* status: 60%
|
||||
* start-date: 2025-07-28
|
||||
* end-date:
|
||||
* status: in progress(60%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Implement the logic for `GET_VALUE` and `GET_PROVIDERS`. Implement validation and quorum mechanisms for queries
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- [vacp2p/nim-libp2p#1764](https://github.com/vacp2p/nim-libp2p/pull/1764) chore(kad): add alpha handling
|
||||
- [vacp2p/nim-libp2p#1750](https://github.com/vacp2p/nim-libp2p/pull/1750) feat(kad): add getValue
|
||||
@@ -106,25 +113,26 @@ Implement the logic for `GET_VALUE` and `GET_PROVIDERS`. Implement validation an
|
||||
### Discovery
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-kad-dht:discovery`
|
||||
* owner: gabe
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: in progress(15%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Extend nim-libp2p discovery mechanism by providing a discovery interface that will use Kademlia DHT to advertise nodes and find peers
|
||||
|
||||
#### Deliverables
|
||||
|
||||
PRs
|
||||
|
||||
|
||||
### Interop
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-kad-dht:interop`
|
||||
* owner: gabe
|
||||
* status: 0%
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Ensure interop is achieved between nim-libp2p's kad-dht implementation and other libp2p implementations
|
||||
|
||||
#### Deliverables
|
||||
#### Deliverables
|
||||
PRs
|
||||
@@ -36,13 +36,13 @@ ensuring that nim-libp2p remains functional and usable for its primary users —
|
||||
Maintain [nim-libp2p](https://github.com/vacp2p/nim-libp2p) repository via improvements, refactors and bug fixes.
|
||||
|
||||
#### Deliverables
|
||||
- [[Deliverable] Maintenance 2025Q4](TODO)
|
||||
- [[Deliverable] Maintenance 2025Q4]
|
||||
|
||||
|
||||
### Gossipsub Interop tests
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-maintenance:gossipsub-interop-tests`
|
||||
* owner:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
@@ -57,7 +57,7 @@ Integrate libp2p test plans' [GossipSub interop tests](https://github.com/libp2p
|
||||
### Fix flaky tests
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-maintenance:flaky-tests`
|
||||
* owner:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
@@ -67,3 +67,4 @@ Continue to systematically track flaky tests using CI logs and failure reports,
|
||||
and fix root causes where reproducible (e.g. race conditions, timeouts, dependency order)
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -25,16 +25,17 @@ The mix specification currently resides in [vacp2p#rfc-index](https://github.com
|
||||
### Specs
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-mix:specs`
|
||||
* owner:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Collaborate with ACZ team into upstreaming initial mix design and rationale to
|
||||
`libp2p/spec` as proposal or draft PR. This task was originally part of Q3 but moved to
|
||||
Q4 as specs update was not completed
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Draft PR merged into `libp2p/specs`
|
||||
|
||||
@@ -44,13 +45,14 @@ Q4 as specs update was not completed
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-mix:stream-reuse`
|
||||
* owner: rramos
|
||||
* status: completed
|
||||
* start-date: 2025-10-13
|
||||
* end-date: 2025-10-22
|
||||
* start-date: 2025/10/13
|
||||
* end-date: 2025/10/22
|
||||
|
||||
#### Description
|
||||
Implement long-lived stream reuse between mix nodes, by establishing a persistent stream between mix peers.
|
||||
Maintain a queue of outgoing Sphinx packets per peer, and dispatch them over the persistent stream. [vacp2p/mix#88](https://github.com/vacp2p/mix/issues/88)
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- [vacp2p/nim-libp2p#1753](https://github.com/vacp2p/nim-libp2p/pull/1753) feat(mix): reuse streams
|
||||
|
||||
@@ -58,14 +60,15 @@ Maintain a queue of outgoing Sphinx packets per peer, and dispatch them over the
|
||||
### Rate limit publishing
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-mix:rate-limit`
|
||||
* owner:
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Introduce a randomized delay before the initiator sends each Sphinx packet to the first hop. This is important to avoid metadata leakage when multiple Sphinx packets (e.g., due to fragmentation of a large message by an upstream protocol) are sent in a burst.
|
||||
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Sender should not be able to send a burst of mix messages but instead have them rate limited with a random delay similar to the one used for hops.
|
||||
|
||||
@@ -26,13 +26,14 @@ In Q3 we discovered critical deficiencies in nim-quic, including runtime instabi
|
||||
* owner: vlado/rramos
|
||||
* status: started
|
||||
* start-date: 2025/10/01
|
||||
* end-date:
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Resolve runtime crashes, race conditions and excessive memory use in nim-quic. Target outcome is that quic can be enabled and run stably in both nimbus and waku test environments.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Replace OpenSSL by AWS-LC / BoringSSL
|
||||
@@ -46,9 +47,10 @@ Resolve runtime crashes, race conditions and excessive memory use in nim-quic. T
|
||||
#### Description
|
||||
Replace the openssl dependency in nim-quic and related libraries with BoringSSL or AWS-LC. The goal is to reduce the need of runtime dependencies by statically linking any of these libraries
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- [vacp2p/nim-ngtcp2#22](https://github.com/vacp2p/nim-ngtcp2/pull/22) feat: compile boringssl using assembly files (except windows)
|
||||
- [vacp2p/nim-ngtcp2#21](https://github.com/vacp2p/nim-ngtcp2/pull/21) feat: replace picotls by BoringSSL
|
||||
- [vacp2p/nim-quic#140](https://github.com/vacp2p/nim-quic/pull/140) feat: use BoringSSL
|
||||
- [vacp2p/nim-libp2p#1782](https://github.com/vacp2p/nim-libp2p/pull/1782) chore: remove libp2p_quic_support compile flag, and openssl dependency
|
||||
- [vacp2p/nim-libp2p#1761](https://github.com/vacp2p/nim-libp2p/pull/1761) feat: use BoringSSL for certificate ops
|
||||
- [vacp2p/nim-libp2p#1761](https://github.com/vacp2p/nim-libp2p/pull/1761) feat: use BoringSSL for certificate ops
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
title: nim-libp2p Webtransport
|
||||
tags:
|
||||
- "2025q4"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: Add webtransport support to nim-libp2p
|
||||
@@ -26,12 +27,13 @@ This deliverable continues the work started in 2025q2
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-webtransport:nghttp3-wrapping`
|
||||
* owner: vlado
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Create wrapper around the [nghttp3](https://github.com/ngtcp2/nghttp3) C library for Nim.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- add nghttp3 wrapping with futhark [nim-nghttp3 #1](https://github.com/vacp2p/nim-nghttp3/pull/1)
|
||||
- ci: add ci for linux and mac [nim-nghttp3 #2](https://github.com/vacp2p/nim-nghttp3/pull/2)
|
||||
@@ -41,43 +43,50 @@ Create wrapper around the [nghttp3](https://github.com/ngtcp2/nghttp3) C library
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-webtransport:http3-client`
|
||||
* owner: vlado
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Implement HTTP/3 Client following [draft-ietf-webtrans-http3-02](https://www.ietf.org/archive/id/draft-ietf-webtrans-http3-02.html) specification.
|
||||
This should be done as part of the [nim-quic](https://github.com/vacp2p/nim-quic) module.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### HTTP/3 Server
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-webtransport:http3-server`
|
||||
* owner: vlado
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Implement HTTP/3 Server following [draft-ietf-webtrans-http3-02](https://www.ietf.org/archive/id/draft-ietf-webtrans-http3-02.html) specification.
|
||||
This should be done as part of the [nim-quic](https://github.com/vacp2p/nim-quic) module.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### HTTP/3 Maintenance
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-webtransport:http3-maintenance`
|
||||
* owner: vlado
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Final improvements, code polishing and interoperability testing after Client and Server are merged.
|
||||
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Certificate generation
|
||||
@@ -85,14 +94,15 @@ Final improvements, code polishing and interoperability testing after Client and
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-webtransport:certificate`
|
||||
* owner: vlado
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Certificate generation according to libp2p webtransport [specification](https://github.com/libp2p/specs/tree/master/webtransport)
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Key components implementation
|
||||
@@ -100,14 +110,15 @@ Certificate generation according to libp2p webtransport [specification](https://
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-webtransport:key-components`
|
||||
* owner: vlado
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Implement webtransport key components: Client, Server, Session
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Noise handshake and certificate validation
|
||||
@@ -115,11 +126,13 @@ Implement webtransport key components: Client, Server, Session
|
||||
* fully qualified name: `vac:p2p:ift:2025q4-nimlibp2p-webtransport:handshake-and-cert-validation`
|
||||
* owner: vlado
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
1.3. Noise handshake and certificate validtion according to libp2p webtransport [specification](https://github.com/libp2p/specs/tree/master/webtransport)
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
@@ -3,9 +3,6 @@ title: P2P Service Unit
|
||||
tags:
|
||||
- p2p
|
||||
- vac
|
||||
---
|
||||
|
||||
## `vac:p2p:`
|
||||
|
||||
---
|
||||
|
||||
@@ -17,17 +14,16 @@ Major future work items on nim-libp2p (also beyond this reporting period are cap
|
||||
|
||||
[[p2p/preview|Roadmap Preview]]
|
||||
|
||||
### 2025q4
|
||||
|
||||
#### `ift:`
|
||||
* [[p2p/ift/2025q4-nimlibp2p-quic|2025q4-nimlibp2p-quic]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-kademlia|2025q4-nimlibp2p-kademlia]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-c-bindings|2025q4-nimlibp2p-c-bindings]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-ipv6|2025q4-nimlibp2p-ipv6]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-maintenance|2025q4-nimlibp2p-maintenance]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-mix|2025q4-nimlibp2p-mix]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-webtransport|2025q4-nimlibp2p-webtransport]]
|
||||
## 2025q4 `vac:p2p:`
|
||||
|
||||
### `ift:`
|
||||
* [[p2p/ift/2025q4-nimlibp2p-cbindings|nimlibp2p-cbindings]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-ipv6|nimlibp2p-ipv6]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-kad-dht|nimlibp2p-kad-dht]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-maintenance|nimlibp2p-maintenance]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-mix|nimlibp2p-mix]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-quic|nimlibp2p-quic]]
|
||||
* [[p2p/ift/2025q4-nimlibp2p-webtransport|nimlibp2p-webtransport]]
|
||||
|
||||
|
||||
### 2025q3
|
||||
|
||||
@@ -36,9 +36,9 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
|
||||
* fully qualified name: `vac:qa:ift:2025q4-qa-rfc-sync-jswaku:relay`
|
||||
* owner: fbarbu15
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Compare `relay` protocol implemented in `js-waku` against the Waku RFCs.
|
||||
@@ -47,6 +47,7 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
- Verify test automation exists for this protocol and note any coverage gaps.
|
||||
- Coordinate with developers for bug fixes and/or additional tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Notion page summarizing the current implementation-to-RFC mapping, discrepancies, and action items.
|
||||
- GitHub issues for required fixes or RFC updates.
|
||||
@@ -56,9 +57,9 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
|
||||
* fully qualified name: `vac:qa:ift:2025q4-qa-rfc-sync-jswaku:filter`
|
||||
* owner: fbarbu15
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Compare `filter` protocol implemented in `js-waku` against the Waku RFCs.
|
||||
@@ -67,6 +68,7 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
- Verify test automation exists for this protocol and note any coverage gaps.
|
||||
- Coordinate with developers for bug fixes and/or additional tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Notion page summarizing the current implementation-to-RFC mapping, discrepancies, and action items.
|
||||
- GitHub issues for required fixes or RFC updates.
|
||||
@@ -76,9 +78,9 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
|
||||
* fully qualified name: `vac:qa:ift:2025q4-qa-rfc-sync-jswaku:lightpush`
|
||||
* owner: fbarbu15
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Compare `lightpush` protocol implemented in `js-waku` against the Waku RFCs.
|
||||
@@ -87,6 +89,7 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
- Verify test automation exists for this protocol and note any coverage gaps.
|
||||
- Coordinate with developers for bug fixes and/or additional tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Notion page summarizing the current implementation-to-RFC mapping, discrepancies, and action items.
|
||||
- GitHub issues for required fixes or RFC updates.
|
||||
@@ -96,9 +99,9 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
|
||||
* fully qualified name: `vac:qa:ift:2025q4-qa-rfc-sync-jswaku:store`
|
||||
* owner: fbarbu15
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Compare `store` protocol implemented in `js-waku` against the Waku RFCs.
|
||||
@@ -107,6 +110,7 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
- Verify test automation exists for this protocol and note any coverage gaps.
|
||||
- Coordinate with developers for bug fixes and/or additional tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Notion page summarizing the current implementation-to-RFC mapping, discrepancies, and action items.
|
||||
- GitHub issues for required fixes or RFC updates.
|
||||
@@ -117,9 +121,9 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
|
||||
* fully qualified name: `vac:qa:ift:2025q4-qa-rfc-sync-jswaku:peer-exchange`
|
||||
* owner: fbarbu15
|
||||
* status:
|
||||
* start-date:
|
||||
* end-date:
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Compare `peer-exchange` protocol implemented in `js-waku` against the Waku RFCs.
|
||||
@@ -128,6 +132,7 @@ identifying gaps and proposing or creating additional tests as necessary.
|
||||
- Verify test automation exists for this protocol and note any coverage gaps.
|
||||
- Coordinate with developers for bug fixes and/or additional tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- Notion page summarizing the current implementation-to-RFC mapping, discrepancies, and action items.
|
||||
- GitHub issues for required fixes or RFC updates.
|
||||
|
||||
@@ -10,22 +10,22 @@ tags:
|
||||
---
|
||||
|
||||
### `ift:`
|
||||
* [[qa/ift/2025q4-qa-rfc-sync-jswaku|2025q4-qa-rfc-sync-jswaku ]]
|
||||
* [[qa/ift/2025q4-qa-rfc-sync-jswaku|qa-rfc-sync-jswaku ]]
|
||||
|
||||
### `vac:`
|
||||
* [[qa/vac/2025q4-nim-libp2p-testing|2025q4-nim-libp2p-testing ]]
|
||||
* [[qa/vac/2025q4-nim-libp2p-testing|nim-libp2p-testing ]]
|
||||
|
||||
### `waku:`
|
||||
* [[qa/waku/2025q4-waku-testing|2025q4-waku-testing ]]
|
||||
* [[qa/waku/2025q4-rln-smart-contract-testing|2025q4-rln-smart-contract-testing ]]
|
||||
* [[qa/waku/2025q4-waku-testing|waku-testing ]]
|
||||
* [[qa/waku/2025q4-rln-smart-contract-testing|rln-smart-contract-testing ]]
|
||||
|
||||
### `status:`
|
||||
* [[qa/status/2025q4-status-go-functional-testing|2025q4-status-go-functional-testing ]]
|
||||
* [[qa/status/2025q4-status-qa-desktop|2025q4-status-qa-desktop ]]
|
||||
* [[qa/status/2025q4-status-qa-mobile|2025q4-status-qa-mobile ]]
|
||||
* [[qa/status/2025q4-status-go-functional-testing|status-go-functional-testing ]]
|
||||
* [[qa/status/2025q4-status-qa-desktop|status-qa-desktop ]]
|
||||
* [[qa/status/2025q4-status-qa-mobile|status-qa-mobile ]]
|
||||
|
||||
### `nomos:`
|
||||
* [[qa/nomos/2025q4-e2e-testing|2025q4-e2e-testing ]]
|
||||
* [[qa/nomos/2025q4-e2e-testing|e2e-testing ]]
|
||||
|
||||
---
|
||||
|
||||
@@ -115,7 +115,3 @@ tags:
|
||||
|
||||
### `codex:`
|
||||
* [[qa/codex/2024q4-integration-testing|integration-testing ]]
|
||||
|
||||
### archive
|
||||
|
||||
* [[qa/archive/2024h1|2024h1]]
|
||||
|
||||
34
content/qa/preview.md
Normal file
34
content/qa/preview.md
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: QA Roadmap Preview
|
||||
tags:
|
||||
- qa
|
||||
- vac
|
||||
---
|
||||
|
||||
## Roadmap Preview
|
||||
|
||||
|
||||
### 2026Q1 and beyond
|
||||
|
||||
### Waku:
|
||||
- maintenance for existing QA frameworks
|
||||
- assisting with new tests for new features
|
||||
|
||||
### IFT:
|
||||
- QA <-> RFC sync for remaining waku and status protocols
|
||||
- status network testing
|
||||
- Logos strategy testing
|
||||
|
||||
### Nomos:
|
||||
- provide qa expertise for components that are now in development
|
||||
- add more e2e testing for nomos nodes as they mature
|
||||
|
||||
### Status
|
||||
- enhance backend functional tests coverage
|
||||
- add more e2e tests at functional level
|
||||
- assist with automated e2e gui testing for status desktop, mobile and tablet features
|
||||
- improve documentation around QA
|
||||
|
||||
### Vac:
|
||||
- continue to improve testing for nim-libp2p protocols
|
||||
- new tests for quic, kademlia and other new protocols developed
|
||||
@@ -34,7 +34,7 @@ with focus on wallet, settings and waku methods.
|
||||
Add functional test coverage to wallet features,
|
||||
in order to catch regressions introduced by wallet backend refactoring.
|
||||
Focus on e2e scenarios that can be automated at this level.
|
||||
TODO! This taks will need to be broken down into smaller task once we have more info
|
||||
This taks will need to be broken down into smaller task once we have more info
|
||||
|
||||
#### Deliverables
|
||||
* PRs with the new tests
|
||||
@@ -86,19 +86,24 @@ as outlined in this [epic](https://github.com/status-im/status-go/issues/6064).
|
||||
Add functional tests for the new emoji reactions API
|
||||
as outlined [here](https://github.com/status-im/status-desktop/issues/18822)
|
||||
|
||||
#### Deliverables
|
||||
* PRs with the new tests
|
||||
|
||||
### Reliability in Status Communities
|
||||
|
||||
* fully qualified name: `vac:qa:status:2025q4-status-go-functional-testing:reliability-communities`
|
||||
* owner: fbarbu15
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- R1. When sending a message in a group, the publisher can ascertain the message was received by at least one recipient.
|
||||
- R2. When receiving messages in a group, the receiver can ascertain most missed messages by receiving one recent message from the group.
|
||||
- See [Waku FURPS](https://github.com/waku-org/pm/blob/2025H2/draft-roadmap/introduce_e2e_reliability_in_status.md?plain=1#L40)
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
|
||||
#### Deliverables
|
||||
* PRs with the new tests
|
||||
|
||||
@@ -114,3 +119,6 @@ as outlined [here](https://github.com/status-im/status-desktop/issues/18822)
|
||||
Ongoing maintenance of Status Functional tests.
|
||||
This includes updating tests for changes in `status-go`, addressing regressions,
|
||||
investigating and resolving issues, and implementing minor improvements to the testing framework as needed.
|
||||
|
||||
#### Deliverables
|
||||
* PRs with the new tests
|
||||
@@ -121,13 +121,14 @@ Oversee testing strategy around releases.
|
||||
* fully qualified name: `vac:qa:status:2025q4-status-qa-desktop:privacy-mode`
|
||||
* owner: nastya
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Support new **Privacy Mode** feature in tests.
|
||||
- Add new tests and update existing ones.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs / Issues
|
||||
|
||||
@@ -138,13 +139,14 @@ Oversee testing strategy around releases.
|
||||
* fully qualified name: `vac:qa:status:2025q4-status-qa-desktop:dapp-browser`
|
||||
* owner: nastya
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Support Browser feature in tests.
|
||||
- Add new tests and update existing ones.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs / Issues
|
||||
|
||||
@@ -171,12 +173,13 @@ Oversee testing strategy around releases.
|
||||
* fully qualified name: `vac:qa:status:2025q4-status-qa-desktop:local-backup-opt-in`
|
||||
* owner: nastya
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Opt-in messages Local Backup feature support in tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs / Issues
|
||||
|
||||
@@ -187,12 +190,13 @@ Oversee testing strategy around releases.
|
||||
* fully qualified name: `vac:qa:status:2025q4-status-qa-desktop:external-activity`
|
||||
* owner: nastya
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Support **Activity fetching** feature in tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs / Issues
|
||||
|
||||
@@ -203,11 +207,12 @@ Oversee testing strategy around releases.
|
||||
* fully qualified name: `vac:qa:status:2025q4-status-qa-desktop:emoji-reactions`
|
||||
* owner: nastya
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
- Maintenance for full emoji list in **Reactions** feature.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs / Issues
|
||||
|
||||
@@ -113,12 +113,13 @@ Ongoing maintenance of Waku testing frameworks.
|
||||
* fully qualified name: `vac:qa:waku:2025q4-waku-testing:store-sync-updates`
|
||||
* owner: aya
|
||||
* status: not started
|
||||
* start-date:
|
||||
* end-date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Update/enhance the waku store sync tests according to latest changes.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs and issues
|
||||
|
||||
@@ -129,11 +130,12 @@ Update/enhance the waku store sync tests according to latest changes.
|
||||
* fully qualified name: `vac:qa:waku:2025q4-waku-testing:sonda-extension`
|
||||
* owner: aya
|
||||
* status: not started
|
||||
* start date:
|
||||
* end date:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Extend Sonda tool to allow more advanced testing scenarios for the Store protocol, then add new advanced tests.
|
||||
|
||||
Schedule note: Dates reflect quarter bounds; update when actual timing is known.
|
||||
#### Deliverables
|
||||
- PRs and issues
|
||||
|
||||
@@ -26,9 +26,9 @@ improving cross-project collaboration.
|
||||
|
||||
### Smart Contracts LearnUp Sessions 2025 Q4
|
||||
|
||||
* fully qualified name: `2025q4-sc-learnup-sessions:2025q4`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:ift:2025q4-sc-learnup-sessions:2025q4`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
@@ -42,9 +42,9 @@ Organize learn up session on a monthly basis and ensure meetings are recorded an
|
||||
|
||||
### SC LearnUp Session 2025/10
|
||||
|
||||
* fully qualified name: `2025q4-sc-learnup-sessions:2025-10`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:ift:2025q4-sc-learnup-sessions:2025-10`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/31
|
||||
|
||||
@@ -58,9 +58,9 @@ Run a learn up session about topic of choice related to smart contract developme
|
||||
|
||||
### SC LearnUp Session 2025/11
|
||||
|
||||
* fully qualified name: `2025q4-sc-learnup-sessions:2025-11`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:ift:2025q4-sc-learnup-sessions:2025-11`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/11/01
|
||||
* end-date: 2025/11/30
|
||||
|
||||
@@ -74,9 +74,9 @@ Run a learn up session about topic of choice related to smart contract developme
|
||||
|
||||
### SC LearnUp Session 2025/12
|
||||
|
||||
* fully qualified name: `2025q4-sc-learnup-sessions:2025-12`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:ift:2025q4-sc-learnup-sessions:2025-12`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/12/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
|
||||
@@ -26,3 +26,17 @@ Urgent work related to IFT projects take precedence over this.
|
||||
## Task List
|
||||
|
||||
List of security audits and contests the team participated in.
|
||||
|
||||
### Audit contest participation
|
||||
|
||||
* fully qualified name: `vac:sc:ift:2025q4-security-audits:audit-contest`
|
||||
* owner: TBD
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Select and enter a security audit contest, coordinate preparation, and document takeaways for the team.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -18,14 +18,14 @@ tags:
|
||||
|
||||
### `ift:`
|
||||
|
||||
- [ ] [[sc/ift/2025q4-sc-learnup-sessions]]
|
||||
- [ ] [[sc/ift/2025q4-security-audits]]
|
||||
* [[sc/ift/2025q4-sc-learnup-sessions|sc-learnup-sessions]]
|
||||
* [[sc/ift/2025q4-security-audits|security-audits]]
|
||||
|
||||
### `status-l2:`
|
||||
|
||||
- [ ] [[sc/status-l2/2025q4-pre-audit-protocol-enhancements]]
|
||||
- [ ] [[sc/status-l2/2025q4-audit-preparation]]
|
||||
- [ ] [[sc/status-l2/2025q4-maintaining-status-l2-contracts]]
|
||||
* [[sc/status-l2/2025q4-pre-audit-protocol-enhancements|pre-audit-protocol-enhancements]]
|
||||
* [[sc/status-l2/2025q4-audit-preparation|audit-preparation]]
|
||||
* [[sc/status-l2/2025q4-maintaining-status-l2-contracts|maintaining-status-l2-contracts]]
|
||||
|
||||
|
||||
## 2025q3 `vac:sc:`
|
||||
|
||||
@@ -29,9 +29,9 @@ leading to a more effective audit process.
|
||||
## Task List
|
||||
|
||||
### Review and update existing documentation
|
||||
* fully qualified name: `2025q4-audit-preparation:review-documentation`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-audit-preparation:review-documentation`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
@@ -52,9 +52,9 @@ and ensure consistency across the codebase.
|
||||
- [ ] Documentation review checklist
|
||||
|
||||
### Restructure tests into one contract per file
|
||||
* fully qualified name: `2025q4-audit-preparation:restructure-test-files`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-audit-preparation:restructure-test-files`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
@@ -74,9 +74,9 @@ and follows best practices for test structure.
|
||||
- [ ] Tests still pass after restructuring
|
||||
|
||||
### Organize tests by unit and integration categories
|
||||
* fully qualified name: `2025q4-audit-preparation:organize-tests`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-audit-preparation:organize-tests`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
@@ -95,9 +95,9 @@ Ensure that the distinction between unit and integration tests is clear and cons
|
||||
- [ ] Updated test running scripts/commands if needed
|
||||
|
||||
### Update properties.md with invariants from Certora rules
|
||||
* fully qualified name: `2025q4-audit-preparation:update-properties`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-audit-preparation:update-properties`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
|
||||
@@ -31,3 +31,17 @@ such as:
|
||||
There are no concrete tasks associated to this commitment.
|
||||
As requests come in,
|
||||
they will be addressed by our team.
|
||||
|
||||
### Contract maintenance (recurring)
|
||||
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-maintaining-status-l2-contracts:maintenance`
|
||||
* owner: sc-team
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Handle inbound maintenance requests for deployed Status L2 contracts, including bug fixes and minor enhancements.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -23,9 +23,9 @@ These features are essential for the protocol's functionality and need to be in
|
||||
## Task List
|
||||
|
||||
### Distributed slashing implementation
|
||||
* fully qualified name: `2025q4-pre-audit-protocol-enhancements:distributed-slashing`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-pre-audit-protocol-enhancements:distributed-slashing`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
@@ -42,9 +42,9 @@ The implementation needs to handle slashing reward sources and ensure proper acc
|
||||
- [ ] Documentation of the slashing mechanism
|
||||
|
||||
### Off-chain criteria reward distributor
|
||||
* fully qualified name: `2025q4-pre-audit-protocol-enhancements:offchain-reward-distributor`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-pre-audit-protocol-enhancements:offchain-reward-distributor`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
@@ -62,9 +62,9 @@ and have appropriate access controls to prevent abuse.
|
||||
- [ ] Documentation explaining the reward distribution mechanism
|
||||
|
||||
### Convert ERC20Votes tests to Foundry
|
||||
* fully qualified name: `2025q4-pre-audit-protocol-enhancements:convert-erc20votes-tests`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-pre-audit-protocol-enhancements:convert-erc20votes-tests`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
@@ -82,9 +82,9 @@ This provides confidence that our modifications haven't introduced any regressio
|
||||
- [ ] Test coverage matching or exceeding the original OpenZeppelin tests
|
||||
|
||||
### Ensure correct license headers
|
||||
* fully qualified name: `2025q4-pre-audit-protocol-enhancements:license-headers`
|
||||
* owner:
|
||||
* status: todo
|
||||
* fully qualified name: `vac:sc:status-l2:2025q4-pre-audit-protocol-enhancements:license-headers`
|
||||
* owner: r4bbit
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/10/30
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Development of Logos Contribute, a contribution hub that recognize
|
||||
|
||||
`vac:web:ift:2025q4-logos-contributions-portal`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves developing Logos Contribute, a comprehensive contribution hub that recognizes open source contributors and helps new developers make their first meaningful contributions to the Logos ecosystem. The portal serves as a critical component of the volunteer-driven, open source community building strategy, showcasing contributor activity, providing curated resources, and offering clear pathways for community engagement.
|
||||
@@ -43,64 +42,111 @@ The Logos Contribute portal directly supports the quarterly KPIs by:
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:contributor-directory`
|
||||
* owner: JulesFiliot
|
||||
* status: 90%
|
||||
* status: in progress (90%)
|
||||
* start-date: 2025/08/11
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Build the landing directory that lists active contributors with GitHub stats and quick links to their work.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Contributor Profiles
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:contributor-profiles`
|
||||
* owner: JulesFiliot
|
||||
* status: 90%
|
||||
* status: in progress (90%)
|
||||
* start-date: 2025/08/11
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Implement profile pages that surface individual contribution history, badges, and impact summaries.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Contribution Guidelines
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:contribution-guidelines`
|
||||
* owner: jinhojang6
|
||||
* status: 90%
|
||||
* status: in progress (90%)
|
||||
* start-date: 2025/09/25
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Author and publish contributor onboarding and etiquette guidelines to sit alongside the portal.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Display Github issues
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:github-issues`
|
||||
* owner: JulesFiliot
|
||||
* status: 90%
|
||||
* status: in progress (90%)
|
||||
* start-date: 2025/09/08
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Integrate curated GitHub issues into the portal so newcomers can quickly find actionable tickets.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Use BI team's Github Data
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:bi-data`
|
||||
* owner: JulesFiliot
|
||||
* status: 20%
|
||||
* status: in progress (20%)
|
||||
* start-date: 2025/09/08
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Plumb BI-provided GitHub datasets into the portal to power contributor metrics and trend charts.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Leaderboard
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:leaderboard`
|
||||
* owner: JulesFiliot
|
||||
* status: 80%
|
||||
* status: in progress (80%)
|
||||
* start-date: 2025/08/20
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Implement seasonal and all-time leaderboards with sorting that highlights high-impact contributors.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Tier & Scoring
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:tier-scoring`
|
||||
* owner: jinhojang6
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/08/20
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Define the tier logic and scoring rules that map contributor activity into the recognition ladder.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Proposals
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-contributions-portal:proposals`
|
||||
* owner: jinhojang6
|
||||
* status: 100%
|
||||
* status: done
|
||||
* start-date: 2025/09/20
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Launch the proposal submission flow so volunteers can pitch work or request support directly in the portal.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Implementation and proof-of-concept development of the Logos JS SD
|
||||
|
||||
`vac:web:ift:2025q4-logos-core`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves implementing and developing proof-of-concept applications using the newly developed Logos JS SDK framework, as specified in the [Logos Core POC specifications](https://github.com/logos-co/logos-core-poc/blob/develop/docs/specs.md#72-logos-js-sdk). The goal is to prove the framework's usability and demonstrate its potential in real-world user-facing applications within the Logos ecosystem.
|
||||
@@ -46,4 +45,10 @@ The Logos Core implementation will support Logos' strategic objectives by:
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
> https://github.com/logos-co/logos-core-poc/blob/develop/docs/specs.md#72-logos-js-sdk
|
||||
> https://github.com/logos-co/logos-core-poc/blob/develop/docs/specs.md#72-logos-js-sdk
|
||||
|
||||
#### Description
|
||||
Produce a working POC that wires the Logos JS SDK into a user-facing experience following the core specs.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Development of a comprehensive user tracing system, analytics plat
|
||||
|
||||
`vac:web:ift:2025q4-logos-marketing-campaign-narratives`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves developing a comprehensive user tracing system, analytics platform, and A/B testing framework to optimize Logos marketing campaign narratives, brand positioning, and measure community growth effectiveness. The system will track user behavior across landing pages, Discord engagement, and marketing campaigns while systematically testing different brand positioning approaches to identify the most compelling messaging for the "ideological builder" target audience.
|
||||
@@ -48,30 +47,54 @@ The marketing campaign narratives and brand testing system will support Logos' s
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-marketing-campaign-narratives:discord-bot`
|
||||
* owner: jinhojang6
|
||||
* status: 100%
|
||||
* status: done
|
||||
* start-date: 2025/08/01
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Deliver a Discord bot that tracks joins, engagement signals, and attribution events for campaign experiments.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### User tracing system
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-marketing-campaign-narratives:user-tracing-system`
|
||||
* owner: jinhojang6
|
||||
* status: 100%
|
||||
* status: done
|
||||
* start-date: 2025/09/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Stand up an end-to-end tracking pipeline that links landing page clicks to downstream Discord and campaign activity.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Python backend
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-marketing-campaign-narratives:python-backend`
|
||||
* owner: jinhojang6
|
||||
* status: 100%
|
||||
* status: done
|
||||
* start-date: 2025/09/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Build the Python services that ingest telemetry, persist analytics data, and surface insights for marketers.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Landing page analytics
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-marketing-campaign-narratives:landing-page-analytics`
|
||||
* owner: jinhojang6
|
||||
* status: 0%
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Instrument Logos landing pages with analytics dashboards that report conversions and narrative performance.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -10,8 +10,6 @@ description: "Development of a comprehensive Logos website showcasing the comple
|
||||
|
||||
`vac:web:ift:2025q4-logos-website`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
|
||||
## Description
|
||||
|
||||
This commitment involves developing a comprehensive Logos website that serves as the central hub for the volunteer-driven, open source community building strategy. The website will showcase the complete Logos technology stack while being built around carefully defined optimal user flows for primary and secondary users, with a core focus on bringing people together and providing multiple pathways for contribution that align with privacy principles and user preferences.
|
||||
@@ -82,79 +80,133 @@ The Logos website will support the volunteer-driven community building strategy
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:layout`
|
||||
* owner: jinhojang6
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Finalize the responsive site layout, navigation structure, and page templates for the refreshed Logos web experience.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Components
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:layout`
|
||||
* owner: jinhojang6
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Build and document the reusable UI component library that powers the new Logos website.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Copyright
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:layout`
|
||||
* owner: 0xbathang
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Update copyright, legal disclosures, and footer messaging to align with the latest Logos positioning.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Internationalization
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:layout`
|
||||
* owner: jinhojang6
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Implement the translation workflow and locale switching needed for a multilingual Logos site launch.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### SEO
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:seo`
|
||||
* owner: jinhojang6
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Optimize metadata, structured data, and performance budgets to improve discovery of the new site.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Documentation
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:documentation`
|
||||
* owner: jinhojang6
|
||||
* status: 20%
|
||||
* status: in progress (20%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Create implementation notes and content authoring guides so teams can maintain the website after launch.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Circles map
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:circles-map`
|
||||
* owner: jinhojang6
|
||||
* status: 0%
|
||||
* status: not started
|
||||
* start-date: 2025/10/20
|
||||
* end-date: 2025/11/14
|
||||
|
||||
#### Description
|
||||
Prototype an interactive map that visualizes Logos circles and makes it easy to discover active groups.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Spaces Calendar
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:spaces-calendar`
|
||||
* owner: jinhojang6
|
||||
* status: 0%
|
||||
* status: not started
|
||||
* start-date: 2025/10/20
|
||||
* end-date: 2025/11/14
|
||||
|
||||
#### Description
|
||||
Embed an events calendar that aggregates upcoming Spaces sessions and community gatherings.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Data visualization
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:data-visualization`
|
||||
* owner: jackewing
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Design and implement the data visualization modules that communicate Logos impact metrics.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### CTAs
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:ctas`
|
||||
* owner: jinhojang6
|
||||
* status: 20%
|
||||
* status: in progress (20%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
@@ -169,27 +221,42 @@ The Logos website will support the volunteer-driven community building strategy
|
||||
- Build
|
||||
- Roadmap
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Blog (Press Engine)
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:blog`
|
||||
* owner: JulesFiliot
|
||||
* status: 60%
|
||||
* status: in progress (60%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Stand up the press engine blog system with publishing workflow, tagging, and archive views.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Search
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:search`
|
||||
* owner: JulesFiliot
|
||||
* status: 0%
|
||||
* status: not started
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Implement site-wide search that surfaces content across product pages, docs, and community resources.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### External references
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:external-references`
|
||||
* owner: jinhojang6
|
||||
* status: 0%
|
||||
* status: not started
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
@@ -197,11 +264,14 @@ The Logos website will support the volunteer-driven community building strategy
|
||||
|
||||
- from free.technology
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Social Proof
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-logos-website:social-proof`
|
||||
* owner: JulesFiliot
|
||||
* status: 70%
|
||||
* status: in progress (70%)
|
||||
* start-date: 2025/05/09
|
||||
* end-date: 2025/10/31
|
||||
|
||||
@@ -211,6 +281,8 @@ The Logos website will support the volunteer-driven community building strategy
|
||||
- Contributors
|
||||
- Members
|
||||
|
||||
#### Deliverables
|
||||
|
||||
> https://www.figma.com/design/hyehOA8iMTDiazHy4IDL6D/Logos-2?node-id=46-2287&p=f&t=fxzLuvGuIGzW0LaG-0
|
||||
> https://github.com/acid-info/logos-co
|
||||
> https://logos-co-rvlb.vercel.app
|
||||
@@ -218,4 +290,4 @@ The Logos website will support the volunteer-driven community building strategy
|
||||
> https://app.clickup.com/t/86b4pj648
|
||||
> https://www.notion.so/Logos-Movement-Strategy-H2-2025-WIP-2298f96fb65c8025a528cde1ad846f1d#2298f96fb65c8084aac0d78dc4abddee
|
||||
> https://www.notion.so/Logos-Movement-Strategy-H1-2025-1ae8f96fb65c80c3b390c72702245ab0
|
||||
> https://docs.google.com/document/d/1GXBOkPx_4p8A967SLungZAe7_lUTzobTb_BHZheUgQ4/edit?usp=sharing
|
||||
> https://docs.google.com/document/d/1GXBOkPx_4p8A967SLungZAe7_lUTzobTb_BHZheUgQ4/edit?usp=sharing
|
||||
|
||||
@@ -4,7 +4,27 @@ tags:
|
||||
- "2025q4"
|
||||
- "web"
|
||||
- "ift"
|
||||
- "maintenance"
|
||||
draft: false
|
||||
description: "Ongoing maintenance and support for previously delivered web projects across the IFT ecosystem, ensuring continued functionality, security, and performance optimization."
|
||||
---
|
||||
`vac:web:ift:2025q4-maintenance`
|
||||
|
||||
## Description
|
||||
|
||||
Provide upkeep, bug fixes, and small improvements for existing web properties across the IFT ecosystem.
|
||||
|
||||
## Task List
|
||||
|
||||
### Maintenance
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-maintenance:maintenance`
|
||||
* owner: JulesFiliot
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Handle routine maintenance tickets, dependency bumps, and production support for shipped web projects.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Development of a monthly Logos newsletter system to engage the com
|
||||
|
||||
`vac:web:ift:2025q4-newsletter`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves developing a comprehensive monthly newsletter system for the Logos ecosystem to engage the community with regular updates, insights, and content that showcases the movement's progress and advances its narrative. The newsletter will serve as a key communication channel to keep community members informed about developments, opportunities, and the broader mission of building decentralized governance and network states.
|
||||
@@ -42,6 +41,12 @@ The Logos newsletter will support Logos' strategic objectives by:
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-newsletter:newsletter`
|
||||
* owner: Jamie
|
||||
* status: 0%
|
||||
* status: not started
|
||||
* start-date: 2025/09/20
|
||||
* end-date: 2025/10/31
|
||||
|
||||
#### Description
|
||||
Plan, write, and distribute the monthly Logos newsletter highlighting ecosystem milestones and calls to action.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -10,8 +10,6 @@ description: "Development of the Parallel Society Festival website to showcase t
|
||||
|
||||
`vac:web:ift:2025q4-psf-website`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
|
||||
## Description
|
||||
|
||||
This commitment involves developing a comprehensive website for the Parallel Society Festival (PSF), a collectively organized gathering of forward-thinking network states, free cities, parallel societies, and intentional communities. The website will serve as the digital hub for this multi-day, co-organized event featuring talks, workshops, panels, debates, keynotes, showcases, performances, and art exhibits.
|
||||
@@ -35,55 +33,85 @@ The PSF website will support Logos' strategic objectives by:
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-psf-website:website`
|
||||
* owner: jinhojang6
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/03/04
|
||||
* end-date: 2026/10/31
|
||||
|
||||
#### Description
|
||||
Build the core PSF public site with schedules, speakers, and storytelling that sells the festival experience.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Ticketing
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-psf-website:ticketing`
|
||||
* owner: lou
|
||||
* status: 20%
|
||||
* status: in progress (20%)
|
||||
* start-date: 2025/03/04
|
||||
* end-date: 2026/10/31
|
||||
|
||||
#### Description
|
||||
Integrate ticketing flows, payment handling, and attendee confirmations tailored to PSF needs.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Designs
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-psf-website:designs`
|
||||
* owner: Beachbuum
|
||||
* status: 50%
|
||||
* status: in progress (50%)
|
||||
* start-date: 2025/03/04
|
||||
* end-date: 2026/10/31
|
||||
|
||||
#### Description
|
||||
Produce the visual system, page comps, and responsive assets that underpin the PSF web experience.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Copywriting
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-psf-website:copywriting`
|
||||
* owner: lou
|
||||
* status: 20%
|
||||
* status: in progress (20%)
|
||||
* start-date: 2025/03/04
|
||||
* end-date: 2026/10/31
|
||||
|
||||
#### Description
|
||||
Craft narrative copy that explains PSF’s mission, programming, and calls to action across the site.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### CTAs
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-psf-website:ctas`
|
||||
* owner: jinhojang6
|
||||
* status: 20%
|
||||
* status: in progress (20%)
|
||||
* start-date: 2025/03/04
|
||||
* end-date: 2026/10/31
|
||||
|
||||
#### Description
|
||||
|
||||
- Collaborate
|
||||
- Collaborate
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Data visualization
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-psf-website:data-visualization`
|
||||
* owner: jackewing
|
||||
* status: 10%
|
||||
* status: in progress (10%)
|
||||
* start-date: 2025/03/04
|
||||
* end-date: 2026/10/31
|
||||
|
||||
#### Description
|
||||
|
||||
> https://miro.com/app/board/uXjVJePe94w=/
|
||||
> https://drive.google.com/file/d/1SbLc778vFessbGpdseeU7LAZuDT1PNPn/view
|
||||
> https://drive.google.com/file/d/1SbLc778vFessbGpdseeU7LAZuDT1PNPn/view
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
@@ -10,7 +10,6 @@ description: "Development of Qaku app as a Logos product powered by Waku for IFT
|
||||
|
||||
`vac:web:ift:2025q4-qaku-app`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves developing Qaku app as a Logos product powered by Waku technology to serve IFT Townhalls and events. The app will be positioned as a competitive alternative to existing solutions like Slido, leveraging Waku's decentralized infrastructure to provide secure, privacy-preserving event interaction capabilities.
|
||||
@@ -42,6 +41,12 @@ The Qaku app will support Logos' strategic objectives by:
|
||||
|
||||
* fully qualified name: `vac:web:ift:2025q4-qaku-app:app`
|
||||
* owner: JulesFiliot
|
||||
* status: 80%
|
||||
* status: in progress (80%)
|
||||
* start-date: 2025/08/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Deliver the Qaku event app MVP with Waku-powered Q&A, polls, and moderation tools ready for Townhall pilots.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
title: Web Service Unit
|
||||
tags:
|
||||
- web
|
||||
---
|
||||
- qa
|
||||
- web
|
||||
|
||||
## `web:`
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
@@ -16,42 +16,43 @@ The unit's work directly supports IFT's strategic objective of scaling project c
|
||||
|
||||
---
|
||||
|
||||
<!-- todo: update -->
|
||||
### 2025q4
|
||||
## 2025q4 `vac:web:`
|
||||
|
||||
#### `ift:`
|
||||
---
|
||||
|
||||
- [[web/ift/2025q4-logos-contributions-portal|2025q4-logos-contributions-portal]]
|
||||
- [[web/ift/2025q4-logos-core|2025q4-logos-core]]
|
||||
- [[web/ift/2025q4-logos-marketing-campaign-narratives|2025q4-logos-marketing-campaign-narratives]]
|
||||
- [[web/ift/2025q4-logos-website|2025q4-logos-website]]
|
||||
- [[web/ift/2025q4-maintenance|2025q4-maintenance]]
|
||||
- [[web/ift/2025q4-newsletter|2025q4-newsletter]]
|
||||
- [[web/ift/2025q4-psf-website|2025q4-psf-website]]
|
||||
- [[web/ift/2025q4-qaku-app|2025q4-qaku-app]]
|
||||
### `ift:`
|
||||
|
||||
#### `keycard:`
|
||||
* [[web/ift/2025q4-logos-contributions-portal|logos-contributions-portal]]
|
||||
* [[web/ift/2025q4-logos-core|logos-core]]
|
||||
* [[web/ift/2025q4-logos-marketing-campaign-narratives|logos-marketing-campaign-narratives]]
|
||||
* [[web/ift/2025q4-logos-website|logos-website]]
|
||||
* [[web/ift/2025q4-maintenance|maintenance]]
|
||||
* [[web/ift/2025q4-newsletter|newsletter]]
|
||||
* [[web/ift/2025q4-psf-website|psf-website]]
|
||||
* [[web/ift/2025q4-qaku-app|qaku-app]]
|
||||
|
||||
- [[web/keycard/2025q4-keycard-website|2025q4-keycard-website]]
|
||||
### `keycard:`
|
||||
|
||||
#### `status:`
|
||||
* [[web/keycard/2025q4-keycard-website|keycard-website]]
|
||||
|
||||
- [[web/status/2025q4-sn-hub|2025q4-sn-hub]]
|
||||
- [[web/status/2025q4-status-app|2025q4-status-app]]
|
||||
- [[web/status/2025q4-status-wallet-extension|2025q4-status-wallet-extension]]
|
||||
- [[web/status/2025q4-status-website|2025q4-status-website]]
|
||||
### `status:`
|
||||
|
||||
### 2025q3
|
||||
* [[web/status/2025q4-sn-hub|sn-hub]]
|
||||
* [[web/status/2025q4-status-app|status-app]]
|
||||
* [[web/status/2025q4-status-wallet-extension|status-wallet-extension]]
|
||||
* [[web/status/2025q4-status-website|status-website]]
|
||||
|
||||
#### `ift:`
|
||||
## 2025q3 `vac:web:`
|
||||
|
||||
### `ift:`
|
||||
|
||||
- [[web/ift/2025q3-logos-website|2025q3-logos-website]]
|
||||
|
||||
#### `keycard:`
|
||||
### `keycard:`
|
||||
|
||||
- [[web/keycard/2025q3-keycard-website|2025q3-keycard-website]]
|
||||
|
||||
#### `status:`
|
||||
### `status:`
|
||||
|
||||
- [[web/status/2025q3-sn-hub|2025q3-sn-hub]]
|
||||
- [[web/status/2025q3-sn-website|2025q3-sn-website]]
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Development of comprehensive website content and documentation for
|
||||
|
||||
`vac:web:keycard:2025q4-keycard-website`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves developing comprehensive website content and documentation for both Keycard and Keycard Shell products to educate users and developers about hardware wallet security, integration capabilities, and usage. The content will serve as the primary educational resource for understanding these innovative hardware wallet solutions.
|
||||
@@ -48,23 +47,40 @@ The Keycard website's content will support IFT's strategic objectives by:
|
||||
|
||||
* fully qualified name: `vac:web:keycard:2025q4-keycard-website:i18n`
|
||||
* owner: felicio
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Localize the Keycard site and docs so core pages ship in the priority languages for launch.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Help
|
||||
|
||||
* fully qualified name: `vac:web:keycard:2025q4-keycard-docs:help`
|
||||
* fully qualified name: `vac:web:keycard:2025q4-keycard-website:help`
|
||||
* owner: jkbktl
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Author the help center covering setup, troubleshooting, and FAQs for both Keycard and Shell devices.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Start Guide
|
||||
|
||||
* fully qualified name: `vac:web:keycard:2025q4-keycard-docs:start-guide`
|
||||
* fully qualified name: `vac:web:keycard:2025q4-keycard-website:start-guide`
|
||||
* owner: jkbktl
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Create a step-by-step getting started guide that walks new users through secure activation and first use.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Development of Status Network Hub, the main portal application for
|
||||
|
||||
`vac:web:status:2025q4-sn-hub`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves developing the Status Network Hub (SN Hub), the main portal application through which users of the Status Network can access all network-related features including onboarding, staking, yield earning, bridging, and public funding pool tracking. The hub consolidates fragmented blockchain ecosystem functionalities into a single, user-friendly interface designed for beginner users and those just starting on the network.
|
||||
@@ -47,65 +46,113 @@ The Status Network Hub will support Status Network's strategic objectives by:
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:wallet-connect`
|
||||
* owner: jkbktl
|
||||
* status: 70%
|
||||
* status: in progress (70%)
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Ship the WalletConnect onboarding and session management flows so users can safely link their wallets.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Staking
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:staking`
|
||||
* owner: nnachionuwa
|
||||
* status: 60%
|
||||
* status: in progress (60%)
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Build the staking dashboard that displays yields, validator options, and lets users manage deposits.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Feedback
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:feedback`
|
||||
* owner: jkbktl
|
||||
* status: 90%
|
||||
* status: in progress (90%)
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Implement in-app feedback capture so newcomers can report issues and suggest improvements.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Deposit
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:deposit`
|
||||
* owner: jkbktl
|
||||
* status: 10%
|
||||
* status: in progress (10%)
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Design the deposit flow that guides users through bridging assets into the Status Network.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Discovery
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:discovery`
|
||||
* owner: jkbktl
|
||||
* status: 90%
|
||||
* status: in progress (90%)
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Surface curated dApps, pools, and governance opportunities in a discovery view tailored to new users.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Karma
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:karma`
|
||||
* owner: jkbktl
|
||||
* status: 10%
|
||||
* status: in progress (10%)
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Implement the Karma scoring module that rewards participation and unlocks network perks.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Notifications
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:notifications`
|
||||
* owner: nnachionuwa
|
||||
* status: 0%
|
||||
* status: not started
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Add notification preferences and delivery so users receive timely updates about their network activity.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Withdraw
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-sn-hub:withdraw`
|
||||
* owner: jkbktl
|
||||
* status: 60%
|
||||
* status: in progress (60%)
|
||||
* start-date: 2025/09/05
|
||||
* end-date: 2025/11/30
|
||||
|
||||
#### Description
|
||||
Create the withdrawal flow that lets users exit positions and transfer assets back to their wallets.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
> https://www.figma.com/design/1XbZL2WrTG5DqJO8DovE0H/Website----status.network?node-id=1940-3359&p=f&m=dev
|
||||
> https://github.com/orgs/status-im/projects/94/views/5?sliceBy%5Bvalue%5D=September+2025+%28Status+Network%29
|
||||
@@ -10,8 +10,6 @@ description: "Supporting continued development of Status App by ensuring web app
|
||||
|
||||
`vac:web:status:2025q4-status-app`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
|
||||
## Description
|
||||
|
||||
This commitment involves supporting the continued development of the Status App by ensuring that web applications, interfaces, and extensions remain functional and compatible during native app upgrades, refactoring, and protocol improvements. As the Status App undergoes significant changes including Waku protocol upgrades, community sharding implementation, and store optimization, the Web unit ensures that all web-based components continue to work seamlessly.
|
||||
@@ -27,16 +25,28 @@ This commitment involves supporting the continued development of the Status App
|
||||
|
||||
### Upgrade Waku
|
||||
|
||||
* fully qualified name: <`fully qualified task name`>
|
||||
* owner: <github/disord name of the CC responsible for this task>
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* fully qualified name: `vac:web:status:2025q4-status-app:upgrade-waku`
|
||||
* owner: jkbktl
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Align Status web surfaces with the upcoming Waku upgrade, covering SDK updates and UI/UX regression checks.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
### Community Shards
|
||||
|
||||
* fully qualified name: <`fully qualified task name`>
|
||||
* owner: <github/disord name of the CC responsible for this task>
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* fully qualified name: `vac:web:status:2025q4-status-app:community-shards`
|
||||
* owner: nnachionuwa
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Support the web-facing changes needed for community shards, including shard UI, configuration, and QA cycles.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Development of a browser wallet extension focused on trading and i
|
||||
|
||||
`vac:web:status:2025q4-status-wallet-extension`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves developing a browser wallet extension that serves as a trading wallet and token price tracker for casual and meme coin traders and investors. The extension will be independent from the Status App project, focusing on revenue generation through trading activities while providing comprehensive portfolio management across multiple connected wallets.
|
||||
@@ -57,18 +56,29 @@ The Status Wallet Extension will support Status' strategic objectives by:
|
||||
|
||||
### Price proxy
|
||||
|
||||
* fully qualified name: <`fully qualified task name`>
|
||||
* owner: <github/disord name of the CC responsible for this task>
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* fully qualified name: `vac:web:status:2025q4-status-wallet-extension:price-proxy`
|
||||
* owner: jkbktl
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Stand up a price proxy service that aggregates token pricing data and exposes cached feeds to the extension.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### Token proxy
|
||||
|
||||
* fully qualified name: <`fully qualified task name`>
|
||||
* owner: <github/disord name of the CC responsible for this task>
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* fully qualified name: `vac:web:status:2025q4-status-wallet-extension:token-proxy`
|
||||
* owner: nnachionuwa
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Build the token metadata proxy that supplies token lists, icons, and market data without relying on paid APIs.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
@@ -10,7 +10,6 @@ description: "Optimization and maintenance of the Status website with internatio
|
||||
|
||||
`vac:web:status:2025q4-status-website`
|
||||
|
||||
> *note*: The `<` `>` mark places where information has to be filled in. Please do not copy the `<` and `>` characters into the actual commitment documents.
|
||||
## Description
|
||||
|
||||
This commitment involves optimizing and maintaining the existing Status website with comprehensive internationalization (i18n) support and search engine optimization (SEO) improvements to enhance global accessibility and discoverability of the Status ecosystem. The website serves as the primary digital touchpoint for users worldwide to learn about Status, download the app, and engage with the community.
|
||||
@@ -53,17 +52,28 @@ The Status website optimization will support Status' strategic objectives by:
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-status-website:i18n`
|
||||
* owner: felicio
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Localize Status web properties and ensure translated content keeps parity with product updates.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
### SEO
|
||||
|
||||
* fully qualified name: `vac:web:status:2025q4-status-website:i18n`
|
||||
* fully qualified name: `vac:web:status:2025q4-status-website:seo`
|
||||
* owner: felicio
|
||||
* status: <not started or in progress (0%-99%) or done>
|
||||
* start-date: <yyyy/mm/dd>
|
||||
* end-date: <yyyy/mm/dd>
|
||||
* status: not started
|
||||
* start-date: 2025/10/01
|
||||
* end-date: 2025/12/31
|
||||
|
||||
#### Description
|
||||
Optimize Status web SEO fundamentals—performance, structured data, and metadata—to grow organic reach.
|
||||
|
||||
#### Deliverables
|
||||
- PRs/Issues/Docs/Reports
|
||||
|
||||
|
||||
42
tools/roadmap_validator/README.md
Normal file
42
tools/roadmap_validator/README.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Roadmap Validator
|
||||
|
||||
Command line utility for verifying that roadmap Markdown files follow our actionability standards. The validator is used locally and in CI to guard the structure, metadata, and content quality of roadmap commitments.
|
||||
|
||||
## Features
|
||||
- Enforces template basics (`## Description` content, no leftover placeholders).
|
||||
- Enforces required front matter keys (`title`, `tags`, `description`).
|
||||
- Infers roadmap identity from file paths and validates tags plus the inline identifier.
|
||||
- Ensures each `## Task List` contains at least one well-formed `###` task.
|
||||
- Checks task metadata (`owner`, `status`, `start-date`, `end-date`) and section completeness.
|
||||
- Flags TODO markers, vague descriptions without tangible deliverables, and malformed dates.
|
||||
- Restricts validation to specific `content/` subdirectories (dst, qa, nim, p2p, rfc, sc, sec, web).
|
||||
- Confirms each unit catalog (e.g. `content/dst/`) includes `index.md`, `preview.md`, keeps entries in sync with validated roadmap files, and that each entry points to an existing Markdown file.
|
||||
|
||||
## Installation
|
||||
Python 3.10+ is required. The only runtime dependency is `pyyaml`, installed automatically in CI. For local runs:
|
||||
|
||||
```bash
|
||||
pip install --disable-pip-version-check --no-cache-dir pyyaml
|
||||
```
|
||||
|
||||
## Usage
|
||||
```bash
|
||||
python tools/roadmap_validator/validate.py [targets...]
|
||||
python tools/roadmap_validator/validate.py *2025q4*
|
||||
python tools/roadmap_validator/validate.py qa/waku dst rfc/nomos
|
||||
```
|
||||
|
||||
### Targets
|
||||
- Provide files or directories; defaults to `content/`.
|
||||
- Wildcard-style tokens like `*2025q4*` filter to files whose contents include the substring.
|
||||
- Non-Markdown inputs are ignored; missing paths emit warnings.
|
||||
|
||||
## GitHub Actions
|
||||
`.github/workflows/roadmap-validator.yml` runs the validator on pushes to `main` and `chore/roadmap-validator`, checking changed Markdown files under allowed content directories. Findings emit annotations and are summarized in the job output.
|
||||
|
||||
## Development Notes
|
||||
- Validation logic lives under `tools/roadmap_validator/`.
|
||||
- Catalog-specific checks are implemented in `catalog.py`.
|
||||
- Template enforcement lives in `templates.py`.
|
||||
- Add unit tests or new checks in `tasks.py`, `identity.py`, or `validator.py`.
|
||||
- Keep CLI changes backwards compatible, as the workflow depends on them.
|
||||
0
tools/roadmap_validator/__init__.py
Normal file
0
tools/roadmap_validator/__init__.py
Normal file
177
tools/roadmap_validator/catalog.py
Normal file
177
tools/roadmap_validator/catalog.py
Normal file
@@ -0,0 +1,177 @@
|
||||
"""Validations for roadmap directory catalog files (index/preview)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from collections import defaultdict
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Dict, Iterable, List, Optional, Set, Tuple
|
||||
|
||||
from issues import ValidationIssue
|
||||
from paths import ALLOWED_CONTENT_SUBDIRS, CONTENT_ROOT
|
||||
|
||||
INDEX_ENTRY_RE = re.compile(r"^\*\s+\[\[([^\|\]]+)\|([^\]]+)\]\]")
|
||||
QUARTER_HEADING_RE = re.compile(r"^##\s+(\d{4}q[1-4])\b")
|
||||
AREA_HEADING_RE = re.compile(r"^###\s+`([^`]+)`")
|
||||
|
||||
|
||||
@dataclass
|
||||
class IndexCatalog:
|
||||
entries: Dict[Tuple[str, str], Dict[str, str]] # (quarter, area) -> {ref: label}
|
||||
|
||||
|
||||
def _parse_index(index_path: Path) -> IndexCatalog:
|
||||
entries: Dict[Tuple[str, str], Dict[str, str]] = defaultdict(dict)
|
||||
lines = index_path.read_text(encoding="utf-8").splitlines()
|
||||
current_quarter: Optional[str] = None
|
||||
current_area: Optional[str] = None
|
||||
|
||||
for line in lines:
|
||||
quarter_match = QUARTER_HEADING_RE.match(line.strip())
|
||||
if quarter_match:
|
||||
current_quarter = quarter_match.group(1)
|
||||
current_area = None
|
||||
continue
|
||||
|
||||
area_match = AREA_HEADING_RE.match(line.strip())
|
||||
if area_match:
|
||||
current_area = area_match.group(1).strip().rstrip(":")
|
||||
continue
|
||||
|
||||
entry_match = INDEX_ENTRY_RE.match(line.strip())
|
||||
if entry_match and current_quarter and current_area:
|
||||
ref = entry_match.group(1).strip()
|
||||
label = entry_match.group(2).strip()
|
||||
entries[(current_quarter, current_area)][ref] = label
|
||||
|
||||
return IndexCatalog(entries=entries)
|
||||
|
||||
|
||||
def _expected_entry(unit: str, relative: Path) -> Tuple[str, str, str, str]:
|
||||
"""Return quarter, area, reference, label expected for a roadmap file."""
|
||||
# relative has parts like ['dst', 'waku', '2025q4-waku-scaling.md']
|
||||
if len(relative.parts) < 3:
|
||||
raise ValueError(f"Unexpected roadmap path structure: {relative}")
|
||||
area = relative.parts[1]
|
||||
stem = relative.stem
|
||||
if "-" not in stem:
|
||||
raise ValueError(f"Filename should contain quarter and slug: {relative}")
|
||||
quarter, slug = stem.split("-", 1)
|
||||
reference = f"{unit}/{area}/{stem}"
|
||||
label = slug
|
||||
return quarter, area, reference, label
|
||||
|
||||
|
||||
def validate_catalog(files: Iterable[Path]) -> List[ValidationIssue]:
|
||||
issues: List[ValidationIssue] = []
|
||||
files_by_unit: Dict[str, List[Path]] = defaultdict(list)
|
||||
referenced_paths: Dict[str, Set[Path]] = defaultdict(set)
|
||||
|
||||
for file_path in files:
|
||||
try:
|
||||
relative = file_path.resolve().relative_to(CONTENT_ROOT)
|
||||
except ValueError:
|
||||
continue
|
||||
if not relative.parts:
|
||||
continue
|
||||
unit = relative.parts[0]
|
||||
files_by_unit[unit].append(file_path)
|
||||
|
||||
if not files_by_unit:
|
||||
return issues
|
||||
|
||||
for unit in sorted(files_by_unit.keys()):
|
||||
if unit not in ALLOWED_CONTENT_SUBDIRS:
|
||||
continue
|
||||
unit_path = CONTENT_ROOT / unit
|
||||
if not unit_path.exists():
|
||||
continue
|
||||
|
||||
index_path = unit_path / "index.md"
|
||||
preview_path = unit_path / "preview.md"
|
||||
|
||||
has_index = index_path.exists()
|
||||
if not has_index:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=index_path,
|
||||
line=None,
|
||||
message=f"missing `index.md` for `{unit}` catalog",
|
||||
)
|
||||
)
|
||||
|
||||
if not preview_path.exists():
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=preview_path,
|
||||
line=None,
|
||||
message=f"missing `preview.md` for `{unit}` catalog",
|
||||
)
|
||||
)
|
||||
|
||||
if not has_index:
|
||||
continue
|
||||
|
||||
catalog = _parse_index(index_path)
|
||||
for file_path in files_by_unit.get(unit, []):
|
||||
try:
|
||||
relative = file_path.resolve().relative_to(CONTENT_ROOT)
|
||||
except ValueError:
|
||||
continue
|
||||
try:
|
||||
quarter, area, reference, label = _expected_entry(unit, relative)
|
||||
except ValueError as exc:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=file_path,
|
||||
line=None,
|
||||
message=str(exc),
|
||||
)
|
||||
)
|
||||
continue
|
||||
|
||||
key = (quarter, area)
|
||||
entries_for_key = catalog.entries.get(key, {})
|
||||
actual_label = entries_for_key.get(reference)
|
||||
if actual_label is None:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=index_path,
|
||||
line=None,
|
||||
message=(
|
||||
f"missing catalog entry for `{file_path.relative_to(CONTENT_ROOT)}` "
|
||||
f"under quarter `{quarter}` and area `{area}`"
|
||||
),
|
||||
)
|
||||
)
|
||||
elif actual_label != label:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=index_path,
|
||||
line=None,
|
||||
message=(
|
||||
f"catalog entry `{reference}` should use label `{label}` "
|
||||
f"(found `{actual_label}`)"
|
||||
),
|
||||
)
|
||||
)
|
||||
referenced_paths[unit].add(Path(reference + ".md"))
|
||||
|
||||
# Ensure index entries point to existing roadmap files.
|
||||
for (quarter, area), entries_for_key in catalog.entries.items():
|
||||
for reference, label in entries_for_key.items():
|
||||
expected_path = (CONTENT_ROOT / (reference + ".md")).resolve()
|
||||
if not expected_path.exists():
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=index_path,
|
||||
line=None,
|
||||
message=(
|
||||
f"catalog entry `{reference}` under quarter `{quarter}` area `{area}` "
|
||||
"points to a missing file"
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
return issues
|
||||
70
tools/roadmap_validator/constants.py
Normal file
70
tools/roadmap_validator/constants.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""Shared constants and regular expressions for roadmap validation."""
|
||||
|
||||
import re
|
||||
|
||||
REQUIRED_FRONT_MATTER_KEYS = ("title", "tags", "description")
|
||||
REQUIRED_TASK_FIELDS = ("owner", "status", "start-date", "end-date")
|
||||
|
||||
METADATA_ALIAS_MAP = {
|
||||
"fully-qualified-name": "fully-qualified-name",
|
||||
"fully qualified name": "fully-qualified-name",
|
||||
"owner": "owner",
|
||||
"status": "status",
|
||||
"start-date": "start-date",
|
||||
"start date": "start-date",
|
||||
"end-date": "end-date",
|
||||
"end date": "end-date",
|
||||
}
|
||||
|
||||
DATE_PATTERN = r"^\d{4}/\d{1,2}/\d{1,2}$"
|
||||
DATE_RE = re.compile(DATE_PATTERN)
|
||||
TODO_PATTERN = r"\bTODO\b"
|
||||
TODO_RE = re.compile(TODO_PATTERN, re.IGNORECASE)
|
||||
TASK_HEADING_PATTERN = r"^###\s+(.*)"
|
||||
TASK_HEADING_RE = re.compile(TASK_HEADING_PATTERN)
|
||||
META_LINE_PATTERN = r"^[\-\*]\s*([^:]+):\s*(.*)$"
|
||||
META_LINE_RE = re.compile(META_LINE_PATTERN)
|
||||
|
||||
VAGUE_KEYWORDS = (
|
||||
"investigate",
|
||||
"research",
|
||||
"explore",
|
||||
"analysis",
|
||||
"assess",
|
||||
"assessment",
|
||||
"evaluate",
|
||||
"evaluation",
|
||||
"review",
|
||||
"understand",
|
||||
"ideate",
|
||||
"brainstorm",
|
||||
)
|
||||
|
||||
TANGIBLE_KEYWORDS = (
|
||||
"pr",
|
||||
"issue",
|
||||
"issues",
|
||||
"pull request",
|
||||
"merge request",
|
||||
"test",
|
||||
"tests",
|
||||
"notion",
|
||||
"doc",
|
||||
"docs",
|
||||
"documentation",
|
||||
"report",
|
||||
"reports",
|
||||
"dashboard",
|
||||
"script",
|
||||
"plan",
|
||||
"plans",
|
||||
"page",
|
||||
"pages",
|
||||
"spec",
|
||||
"specs",
|
||||
"analysis doc",
|
||||
"deliverable",
|
||||
"deliverables",
|
||||
)
|
||||
|
||||
SKIP_FILENAMES = {"index.md", "preview.md"}
|
||||
123
tools/roadmap_validator/identity.py
Normal file
123
tools/roadmap_validator/identity.py
Normal file
@@ -0,0 +1,123 @@
|
||||
"""Commitment identity extraction and related validation."""
|
||||
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional, Tuple
|
||||
from issues import ValidationIssue
|
||||
from paths import CONTENT_ROOT, should_skip
|
||||
|
||||
IDENTIFIER_PATTERN = re.compile(r"^`([^`]+)`\s*$")
|
||||
FILENAME_PATTERN = re.compile(r"^(?P<quarter>\d{4}q[1-4])-(?P<slug>.+)$")
|
||||
|
||||
|
||||
@dataclass
|
||||
class CommitmentIdentity:
|
||||
unit: str
|
||||
quarter: str
|
||||
area: str
|
||||
slug: str
|
||||
expected_tags: List[str]
|
||||
expected_identifier: str
|
||||
expected_base: str
|
||||
|
||||
|
||||
def derive_identity(path: Path) -> Tuple[Optional[CommitmentIdentity], List[ValidationIssue]]:
|
||||
"""Infer roadmap identity metadata from the file path."""
|
||||
issues: List[ValidationIssue] = []
|
||||
try:
|
||||
relative = path.resolve().relative_to(CONTENT_ROOT)
|
||||
except ValueError:
|
||||
return None, issues
|
||||
if len(relative.parts) < 3 or should_skip(path):
|
||||
return None, issues
|
||||
|
||||
unit, area = relative.parts[0], relative.parts[1]
|
||||
match = FILENAME_PATTERN.match(path.stem)
|
||||
if not match:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=path,
|
||||
line=None,
|
||||
message=f"filename should follow `<year>q<quarter>-<slug>.md` (found `{path.name}`)",
|
||||
)
|
||||
)
|
||||
return None, issues
|
||||
|
||||
quarter = match.group("quarter")
|
||||
slug = match.group("slug")
|
||||
expected_base = f"vac:{unit}:{area}:{quarter}-{slug}"
|
||||
expected_tags = [quarter, unit, area]
|
||||
expected_identifier = expected_base
|
||||
identity = CommitmentIdentity(
|
||||
unit=unit,
|
||||
quarter=quarter,
|
||||
area=area,
|
||||
slug=slug,
|
||||
expected_tags=expected_tags,
|
||||
expected_identifier=expected_identifier,
|
||||
expected_base=expected_base,
|
||||
)
|
||||
return identity, issues
|
||||
|
||||
|
||||
def validate_identity(
|
||||
path: Path,
|
||||
front_matter: Dict[str, object],
|
||||
lines: List[str],
|
||||
body_start: int,
|
||||
identity: CommitmentIdentity,
|
||||
) -> List[ValidationIssue]:
|
||||
"""Validate tags and inline identifier for a commitment."""
|
||||
issues: List[ValidationIssue] = []
|
||||
|
||||
tags = front_matter.get("tags")
|
||||
if isinstance(tags, (list, tuple)):
|
||||
tag_values = [str(tag) for tag in tags]
|
||||
if tag_values != identity.expected_tags:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=path,
|
||||
line=1,
|
||||
message=f"tags should be {identity.expected_tags!r} (found {tag_values!r})",
|
||||
)
|
||||
)
|
||||
else:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=path,
|
||||
line=1,
|
||||
message=f"tags must be a list matching {identity.expected_tags!r}",
|
||||
)
|
||||
)
|
||||
|
||||
identifier_value: Optional[str] = None
|
||||
identifier_line: Optional[int] = None
|
||||
for idx in range(body_start, len(lines)):
|
||||
stripped = lines[idx].strip()
|
||||
match = IDENTIFIER_PATTERN.match(stripped)
|
||||
if match:
|
||||
identifier_value = match.group(1)
|
||||
identifier_line = idx + 1
|
||||
break
|
||||
|
||||
if identifier_value is None:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=path,
|
||||
line=body_start + 1,
|
||||
message=f"missing commitment identifier `{identity.expected_identifier}`",
|
||||
)
|
||||
)
|
||||
elif identifier_value != identity.expected_identifier:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=path,
|
||||
line=identifier_line,
|
||||
message=(
|
||||
f"identifier should be `{identity.expected_identifier}` (found `{identifier_value}`)"
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
return issues
|
||||
12
tools/roadmap_validator/issues.py
Normal file
12
tools/roadmap_validator/issues.py
Normal file
@@ -0,0 +1,12 @@
|
||||
"""Validation issue data structures."""
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
|
||||
@dataclass
|
||||
class ValidationIssue:
|
||||
path: Path
|
||||
line: Optional[int]
|
||||
message: str
|
||||
88
tools/roadmap_validator/paths.py
Normal file
88
tools/roadmap_validator/paths.py
Normal file
@@ -0,0 +1,88 @@
|
||||
"""Filesystem helpers for roadmap validation."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Iterable, List, Optional
|
||||
|
||||
from constants import SKIP_FILENAMES
|
||||
|
||||
ALLOWED_CONTENT_SUBDIRS = {
|
||||
"dst",
|
||||
"qa",
|
||||
"nim",
|
||||
"p2p",
|
||||
"rfc",
|
||||
"sc",
|
||||
"sec",
|
||||
"web",
|
||||
}
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||
CONTENT_ROOT = REPO_ROOT / "content"
|
||||
|
||||
|
||||
def _is_allowed_content_path(path: Path) -> bool:
|
||||
"""Return True when the path resides in an allowed content subdirectory."""
|
||||
try:
|
||||
relative = path.resolve().relative_to(CONTENT_ROOT)
|
||||
except ValueError:
|
||||
return True
|
||||
parts = relative.parts
|
||||
if not parts:
|
||||
return False
|
||||
return parts[0].lower() in ALLOWED_CONTENT_SUBDIRS
|
||||
|
||||
|
||||
def should_skip(path: Path) -> bool:
|
||||
"""Return True if the file should be ignored by the validator."""
|
||||
return path.name.lower() in SKIP_FILENAMES
|
||||
|
||||
|
||||
def resolve_user_path(raw_target: str) -> Optional[Path]:
|
||||
"""Resolve a user-supplied path relative to cwd, repo root, or content root."""
|
||||
raw_path = Path(raw_target).expanduser()
|
||||
search_paths: List[Path] = []
|
||||
if raw_path.is_absolute():
|
||||
search_paths.append(raw_path)
|
||||
else:
|
||||
search_paths.extend(
|
||||
[
|
||||
Path.cwd() / raw_path,
|
||||
REPO_ROOT / raw_path,
|
||||
CONTENT_ROOT / raw_path,
|
||||
]
|
||||
)
|
||||
for candidate in search_paths:
|
||||
if candidate.exists():
|
||||
return candidate.resolve()
|
||||
return None
|
||||
|
||||
|
||||
def resolve_targets(targets: Iterable[str]) -> List[Path]:
|
||||
"""Expand iterable of target paths into unique Markdown files."""
|
||||
md_files: List[Path] = []
|
||||
seen: set[Path] = set()
|
||||
for raw_target in targets:
|
||||
target = resolve_user_path(raw_target)
|
||||
if target is None:
|
||||
sys.stderr.write(f"Warning: skipping unknown path {raw_target!r}\n")
|
||||
continue
|
||||
if target.is_dir():
|
||||
for file_path in sorted(target.rglob("*.md")):
|
||||
if (
|
||||
should_skip(file_path)
|
||||
or file_path in seen
|
||||
or not _is_allowed_content_path(file_path)
|
||||
):
|
||||
continue
|
||||
md_files.append(file_path)
|
||||
seen.add(file_path)
|
||||
elif target.is_file() and target.suffix.lower() == ".md":
|
||||
if should_skip(target) or target in seen or not _is_allowed_content_path(target):
|
||||
continue
|
||||
md_files.append(target)
|
||||
seen.add(target)
|
||||
else:
|
||||
sys.stderr.write(f"Warning: skipping non-markdown path {raw_target!r}\n")
|
||||
return md_files
|
||||
194
tools/roadmap_validator/tasks.py
Normal file
194
tools/roadmap_validator/tasks.py
Normal file
@@ -0,0 +1,194 @@
|
||||
"""Task parsing and validation routines."""
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, List, Optional, Tuple
|
||||
from constants import (
|
||||
DATE_RE,
|
||||
META_LINE_RE,
|
||||
METADATA_ALIAS_MAP,
|
||||
REQUIRED_TASK_FIELDS,
|
||||
TANGIBLE_KEYWORDS,
|
||||
TASK_HEADING_RE,
|
||||
TODO_RE,
|
||||
VAGUE_KEYWORDS,
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class TaskIssue:
|
||||
message: str
|
||||
line: Optional[int]
|
||||
|
||||
|
||||
@dataclass
|
||||
class TaskReport:
|
||||
name: str
|
||||
line: int
|
||||
metadata: Dict[str, Tuple[str, int]] = field(default_factory=dict)
|
||||
had_description: bool = False
|
||||
description_lines: int = 0
|
||||
description_line: Optional[int] = None
|
||||
description_texts: List[Tuple[str, int]] = field(default_factory=list)
|
||||
deliverables_sections: int = 0
|
||||
deliverables_items: int = 0
|
||||
deliverables_line: Optional[int] = None
|
||||
deliverables_texts: List[Tuple[str, int]] = field(default_factory=list)
|
||||
todo_hits: List[Tuple[str, int]] = field(default_factory=list)
|
||||
issues: List[TaskIssue] = field(default_factory=list)
|
||||
expected_base: Optional[str] = None
|
||||
|
||||
def add_issue(self, message: str, line: Optional[int] = None) -> None:
|
||||
self.issues.append(TaskIssue(message, line or self.line))
|
||||
|
||||
def record_metadata(self, key: str, value: str, line: int) -> None:
|
||||
canonical = METADATA_ALIAS_MAP.get(key, key)
|
||||
self.metadata[canonical] = (value.strip(), line)
|
||||
|
||||
def finalize(self) -> None:
|
||||
for field_name in REQUIRED_TASK_FIELDS:
|
||||
if field_name not in self.metadata:
|
||||
self.add_issue(f"missing `{field_name}` metadata", self.line)
|
||||
continue
|
||||
value, line = self.metadata[field_name]
|
||||
if not value:
|
||||
self.add_issue(f"`{field_name}` value is empty", line)
|
||||
elif field_name in ("start-date", "end-date") and not DATE_RE.match(value):
|
||||
self.add_issue(
|
||||
f"`{field_name}` should use YYYY/MM/DD format (found `{value}`)", line
|
||||
)
|
||||
|
||||
if not self.had_description or self.description_lines == 0:
|
||||
line = self.description_line or self.line
|
||||
self.add_issue("missing populated `#### Description` section", line)
|
||||
|
||||
if self.deliverables_sections == 0:
|
||||
line = self.deliverables_line or self.line
|
||||
self.add_issue("missing `#### Deliverables` section", line)
|
||||
elif self.deliverables_sections > 1:
|
||||
line = self.deliverables_line or self.line
|
||||
self.add_issue("multiple `#### Deliverables` sections found", line)
|
||||
elif self.deliverables_items == 0:
|
||||
line = self.deliverables_line or self.line
|
||||
self.add_issue("`#### Deliverables` section is empty", line)
|
||||
|
||||
for text, line in self.todo_hits:
|
||||
self.add_issue(f"contains TODO marker: `{text.strip()}`", line)
|
||||
|
||||
description_vague_hits = [
|
||||
(text, line)
|
||||
for text, line in self.description_texts
|
||||
if any(keyword in text.lower() for keyword in VAGUE_KEYWORDS)
|
||||
]
|
||||
has_tangible_deliverable = any(
|
||||
any(keyword in text.lower() for keyword in TANGIBLE_KEYWORDS)
|
||||
for text, _ in self.deliverables_texts
|
||||
)
|
||||
if description_vague_hits and not has_tangible_deliverable:
|
||||
text, line = description_vague_hits[0]
|
||||
self.add_issue(
|
||||
"uses vague wording without tangible deliverables; clarify scope "
|
||||
f"(`{text.strip()}`)",
|
||||
line,
|
||||
)
|
||||
|
||||
fq_entry = self.metadata.get("fully-qualified-name")
|
||||
if fq_entry and self.expected_base:
|
||||
raw_value, line = fq_entry
|
||||
normalized = raw_value.strip().strip("`")
|
||||
expected = self.expected_base
|
||||
if not (
|
||||
normalized == expected or normalized.startswith(f"{expected}:")
|
||||
):
|
||||
self.add_issue(
|
||||
f"`fully qualified name` should start with `{expected}` (found `{normalized}`)",
|
||||
line,
|
||||
)
|
||||
|
||||
|
||||
def parse_tasks(
|
||||
lines: List[str],
|
||||
start: int,
|
||||
end: int,
|
||||
expected_base: Optional[str],
|
||||
) -> List[TaskReport]:
|
||||
tasks: List[TaskReport] = []
|
||||
current: Optional[TaskReport] = None
|
||||
in_description = False
|
||||
in_deliverables = False
|
||||
|
||||
def flush_current() -> None:
|
||||
nonlocal current, in_description, in_deliverables
|
||||
if current is not None:
|
||||
current.finalize()
|
||||
tasks.append(current)
|
||||
current = None
|
||||
in_description = False
|
||||
in_deliverables = False
|
||||
|
||||
for idx in range(start, end):
|
||||
line = lines[idx]
|
||||
stripped = line.strip()
|
||||
heading_match = TASK_HEADING_RE.match(stripped)
|
||||
if stripped.startswith("## "):
|
||||
flush_current()
|
||||
break
|
||||
if heading_match:
|
||||
flush_current()
|
||||
task_name = heading_match.group(1).strip()
|
||||
current = TaskReport(name=task_name, line=idx + 1, expected_base=expected_base)
|
||||
continue
|
||||
if current is None:
|
||||
continue
|
||||
|
||||
if stripped.lower().startswith("#### "):
|
||||
in_description = False
|
||||
in_deliverables = False
|
||||
section_title = stripped[4:].strip().lower().rstrip(":")
|
||||
if section_title == "description":
|
||||
current.had_description = True
|
||||
current.description_line = idx + 1
|
||||
current.description_lines = 0
|
||||
current.description_texts = []
|
||||
in_description = True
|
||||
elif section_title == "deliverables":
|
||||
current.deliverables_sections += 1
|
||||
current.deliverables_line = idx + 1
|
||||
current.deliverables_items = 0
|
||||
current.deliverables_texts = []
|
||||
in_deliverables = True
|
||||
continue
|
||||
|
||||
if stripped == "---":
|
||||
in_description = False
|
||||
in_deliverables = False
|
||||
continue
|
||||
|
||||
if in_description:
|
||||
if stripped:
|
||||
current.description_lines += 1
|
||||
current.description_texts.append((stripped, idx + 1))
|
||||
if TODO_RE.search(stripped):
|
||||
current.todo_hits.append((stripped, idx + 1))
|
||||
continue
|
||||
|
||||
if in_deliverables:
|
||||
if stripped:
|
||||
if TODO_RE.search(stripped):
|
||||
current.todo_hits.append((stripped, idx + 1))
|
||||
if stripped != "---":
|
||||
current.deliverables_items += 1
|
||||
current.deliverables_texts.append((stripped, idx + 1))
|
||||
continue
|
||||
|
||||
meta_match = META_LINE_RE.match(stripped)
|
||||
if meta_match:
|
||||
field_key = meta_match.group(1).strip().lower().replace("_", " ")
|
||||
value = meta_match.group(2)
|
||||
current.record_metadata(field_key, value, idx + 1)
|
||||
continue
|
||||
|
||||
if stripped and TODO_RE.search(stripped):
|
||||
current.todo_hits.append((stripped, idx + 1))
|
||||
|
||||
flush_current()
|
||||
return tasks
|
||||
168
tools/roadmap_validator/templates.py
Normal file
168
tools/roadmap_validator/templates.py
Normal file
@@ -0,0 +1,168 @@
|
||||
"""Unified template validation for roadmap commitments."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional, Tuple
|
||||
|
||||
from constants import REQUIRED_FRONT_MATTER_KEYS
|
||||
from issues import ValidationIssue
|
||||
from paths import ALLOWED_CONTENT_SUBDIRS, CONTENT_ROOT
|
||||
|
||||
TEMPLATE_PATH = CONTENT_ROOT / "templates" / "commitment-template.md"
|
||||
PLACEHOLDER_PATTERN = re.compile(r"<[^>\n]+>")
|
||||
|
||||
|
||||
def _load_template_placeholders() -> List[str]:
|
||||
try:
|
||||
text = TEMPLATE_PATH.read_text(encoding="utf-8")
|
||||
except FileNotFoundError:
|
||||
return []
|
||||
placeholders: List[str] = []
|
||||
seen = set()
|
||||
for match in PLACEHOLDER_PATTERN.finditer(text):
|
||||
token = match.group(0)
|
||||
if token not in seen:
|
||||
placeholders.append(token)
|
||||
seen.add(token)
|
||||
return placeholders
|
||||
|
||||
|
||||
TEMPLATE_PLACEHOLDERS = _load_template_placeholders()
|
||||
|
||||
|
||||
def _is_commitment_file(path: Path) -> bool:
|
||||
try:
|
||||
relative = path.resolve().relative_to(CONTENT_ROOT)
|
||||
except ValueError:
|
||||
return False
|
||||
if len(relative.parts) < 3:
|
||||
return False
|
||||
if relative.parts[0] == "templates":
|
||||
return False
|
||||
if path.suffix.lower() != ".md":
|
||||
return False
|
||||
if path.stem in ("index", "preview"):
|
||||
return False
|
||||
return relative.parts[0] in ALLOWED_CONTENT_SUBDIRS
|
||||
|
||||
|
||||
@dataclass
|
||||
class TemplateValidator:
|
||||
path: Path
|
||||
lines: List[str]
|
||||
body_start: int
|
||||
front_matter: Dict[str, object]
|
||||
task_section: Optional[Tuple[int, int]] = None
|
||||
|
||||
def run(self) -> List[ValidationIssue]:
|
||||
issues: List[ValidationIssue] = []
|
||||
if not _is_commitment_file(self.path):
|
||||
return issues
|
||||
|
||||
issues.extend(self._validate_front_matter())
|
||||
self.task_section = self._find_task_section()
|
||||
issues.extend(self._validate_description_section())
|
||||
issues.extend(self._validate_placeholders())
|
||||
return issues
|
||||
|
||||
def _validate_front_matter(self) -> List[ValidationIssue]:
|
||||
issues: List[ValidationIssue] = []
|
||||
for key in REQUIRED_FRONT_MATTER_KEYS:
|
||||
value = self.front_matter.get(key)
|
||||
if value in (None, "", []):
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=self.path,
|
||||
line=1,
|
||||
message=f"missing `{key}` in front matter",
|
||||
)
|
||||
)
|
||||
tags = self.front_matter.get("tags")
|
||||
if tags is not None and not isinstance(tags, (list, tuple)):
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=self.path,
|
||||
line=1,
|
||||
message="`tags` must be a list",
|
||||
)
|
||||
)
|
||||
return issues
|
||||
|
||||
def _find_task_section(self) -> Optional[Tuple[int, int]]:
|
||||
for idx in range(self.body_start, len(self.lines)):
|
||||
if self.lines[idx].strip().lower() == "## task list":
|
||||
end = len(self.lines)
|
||||
for j in range(idx + 1, len(self.lines)):
|
||||
if self.lines[j].startswith("## "):
|
||||
end = j
|
||||
break
|
||||
return idx + 1, end
|
||||
return None
|
||||
|
||||
def _validate_description_section(self) -> List[ValidationIssue]:
|
||||
issues: List[ValidationIssue] = []
|
||||
description_idx: Optional[int] = None
|
||||
for idx in range(self.body_start, len(self.lines)):
|
||||
if self.lines[idx].strip().lower() == "## description":
|
||||
description_idx = idx
|
||||
break
|
||||
|
||||
if description_idx is None:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=self.path,
|
||||
line=None,
|
||||
message="missing `## Description` section",
|
||||
)
|
||||
)
|
||||
return issues
|
||||
|
||||
if self.task_section:
|
||||
task_heading_idx = self.task_section[0] - 1
|
||||
if description_idx > task_heading_idx:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=self.path,
|
||||
line=description_idx + 1,
|
||||
message="`## Description` section should appear before `## Task List`",
|
||||
)
|
||||
)
|
||||
|
||||
next_heading = len(self.lines)
|
||||
for j in range(description_idx + 1, len(self.lines)):
|
||||
if self.lines[j].strip().startswith("## "):
|
||||
next_heading = j
|
||||
break
|
||||
|
||||
if all(
|
||||
not self.lines[k].strip() for k in range(description_idx + 1, next_heading)
|
||||
):
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=self.path,
|
||||
line=description_idx + 2,
|
||||
message="`## Description` section should contain descriptive content",
|
||||
)
|
||||
)
|
||||
return issues
|
||||
|
||||
def _validate_placeholders(self) -> List[ValidationIssue]:
|
||||
if not TEMPLATE_PLACEHOLDERS:
|
||||
return []
|
||||
|
||||
issues: List[ValidationIssue] = []
|
||||
for idx, line in enumerate(self.lines):
|
||||
for match in PLACEHOLDER_PATTERN.finditer(line):
|
||||
token = match.group(0)
|
||||
if token in TEMPLATE_PLACEHOLDERS:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=self.path,
|
||||
line=idx + 1,
|
||||
message=f"remove placeholder `{token}` copied from the template",
|
||||
)
|
||||
)
|
||||
return issues
|
||||
142
tools/roadmap_validator/validate.py
Normal file
142
tools/roadmap_validator/validate.py
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CLI entry point for roadmap validator."""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import shlex
|
||||
import sys
|
||||
from collections import defaultdict
|
||||
from pathlib import Path
|
||||
from typing import Iterable, List, Optional, Sequence
|
||||
from paths import REPO_ROOT, resolve_targets
|
||||
from catalog import validate_catalog
|
||||
from validator import validate_file
|
||||
from issues import ValidationIssue
|
||||
|
||||
DEFAULT_TARGETS = "content"
|
||||
|
||||
|
||||
def _relpath(path: Path) -> Path:
|
||||
if path.is_absolute():
|
||||
try:
|
||||
return path.relative_to(REPO_ROOT)
|
||||
except ValueError:
|
||||
return path
|
||||
return path
|
||||
|
||||
|
||||
def format_issue(issue: ValidationIssue) -> str:
|
||||
location = _relpath(issue.path)
|
||||
prefix = f"{location}"
|
||||
if issue.line:
|
||||
prefix += f":{issue.line}"
|
||||
return f"{prefix}: {issue.message}"
|
||||
|
||||
|
||||
def emit_github_annotations(issues: List[ValidationIssue]) -> None:
|
||||
if os.getenv("GITHUB_ACTIONS") != "true":
|
||||
return
|
||||
for issue in issues:
|
||||
location = _relpath(issue.path)
|
||||
file_str = str(location)
|
||||
if issue.line:
|
||||
print(f"::error file={file_str},line={issue.line}::{issue.message}")
|
||||
else:
|
||||
print(f"::error file={file_str}::{issue.message}")
|
||||
|
||||
summary_path = os.getenv("GITHUB_STEP_SUMMARY")
|
||||
if not summary_path:
|
||||
return
|
||||
|
||||
issues_by_file = defaultdict(list)
|
||||
for issue in issues:
|
||||
issues_by_file[str(_relpath(issue.path))].append(issue)
|
||||
|
||||
unique_files = {str(_relpath(issue.path)) for issue in issues}
|
||||
|
||||
with open(summary_path, "a", encoding="utf-8") as summary:
|
||||
summary.write("## Roadmap Validator Report\n\n")
|
||||
summary.write(f"Found {len(issues)} issues across {len(unique_files)} file(s).\n\n")
|
||||
for file_path, file_issues in sorted(issues_by_file.items()):
|
||||
summary.write(f"- `{file_path}`\n")
|
||||
for issue in file_issues:
|
||||
line_info = f" (line {issue.line})" if issue.line else ""
|
||||
summary.write(f" - {issue.message}{line_info}\n")
|
||||
summary.write("\n")
|
||||
|
||||
|
||||
def run_validator(
|
||||
targets: Iterable[str],
|
||||
required_substrings: Optional[Sequence[str]] = None,
|
||||
) -> int:
|
||||
files = resolve_targets(targets)
|
||||
if required_substrings:
|
||||
filtered_files: List[Path] = []
|
||||
for file_path in files:
|
||||
try:
|
||||
contents = file_path.read_text(encoding="utf-8")
|
||||
if all(substring in contents for substring in required_substrings):
|
||||
filtered_files.append(file_path)
|
||||
except Exception as exc:
|
||||
sys.stderr.write(f"Warning: failed to read {file_path}: {exc}\n")
|
||||
files = filtered_files
|
||||
|
||||
if not files:
|
||||
sys.stderr.write("No markdown files found for validation.\n")
|
||||
return 0
|
||||
|
||||
all_issues: List[ValidationIssue] = []
|
||||
for file_path in files:
|
||||
all_issues.extend(validate_file(file_path))
|
||||
|
||||
all_issues.extend(validate_catalog(files))
|
||||
|
||||
if all_issues:
|
||||
emit_github_annotations(all_issues)
|
||||
for issue in sorted(all_issues, key=lambda i: (str(_relpath(i.path)), i.line or 0, i.message)):
|
||||
print(format_issue(issue))
|
||||
unique_files = { _relpath(i.path) for i in all_issues }
|
||||
print(f"\nValidation failed for {len(unique_files)} file(s).")
|
||||
return 1
|
||||
|
||||
print(f"All checks passed for {len(files)} file(s).")
|
||||
return 0
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Validate roadmap Markdown files for actionability standards.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"paths",
|
||||
nargs="*",
|
||||
help="Files or directories to validate. Defaults to 'content'. "
|
||||
"Tokens like '*substring*' filter files whose contents include that substring.",
|
||||
)
|
||||
return parser
|
||||
|
||||
|
||||
def main(argv: Optional[List[str]] = None) -> int:
|
||||
parser = build_parser()
|
||||
args = parser.parse_args(argv)
|
||||
|
||||
raw_targets = list(args.paths) or [DEFAULT_TARGETS]
|
||||
|
||||
substring_filters: List[str] = []
|
||||
filtered_targets: List[str] = []
|
||||
for entry in raw_targets:
|
||||
if entry.startswith("*") and entry.endswith("*") and len(entry) > 2:
|
||||
substring_filters.append(entry.strip("*"))
|
||||
else:
|
||||
filtered_targets.append(entry)
|
||||
|
||||
if not filtered_targets:
|
||||
filtered_targets = [DEFAULT_TARGETS]
|
||||
|
||||
required_substrings: Optional[List[str]] = substring_filters or None
|
||||
|
||||
return run_validator(filtered_targets, required_substrings)
|
||||
|
||||
|
||||
if __name__ == "__main__": # pragma: no cover
|
||||
raise SystemExit(main())
|
||||
80
tools/roadmap_validator/validator.py
Normal file
80
tools/roadmap_validator/validator.py
Normal file
@@ -0,0 +1,80 @@
|
||||
"""High-level validation orchestration."""
|
||||
|
||||
from pathlib import Path
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
import yaml
|
||||
|
||||
from identity import derive_identity, validate_identity
|
||||
from issues import ValidationIssue
|
||||
from paths import should_skip
|
||||
from tasks import TaskReport, parse_tasks
|
||||
from templates import TemplateValidator
|
||||
|
||||
|
||||
def parse_front_matter(lines: List[str]) -> Tuple[dict, int]:
|
||||
if not lines:
|
||||
return {}, 0
|
||||
idx = 0
|
||||
while idx < len(lines) and not lines[idx].strip():
|
||||
idx += 1
|
||||
if idx >= len(lines) or lines[idx].strip() != "---":
|
||||
return {}, 0
|
||||
end_idx = idx + 1
|
||||
while end_idx < len(lines) and lines[end_idx].strip() != "---":
|
||||
end_idx += 1
|
||||
if end_idx >= len(lines):
|
||||
raise ValueError("Unterminated YAML front matter")
|
||||
data = yaml.safe_load("\n".join(lines[idx + 1 : end_idx])) or {}
|
||||
if not isinstance(data, dict):
|
||||
raise ValueError("Front matter must parse to a mapping")
|
||||
return data, end_idx + 1
|
||||
|
||||
|
||||
def validate_file(path: Path) -> List[ValidationIssue]:
|
||||
if should_skip(path):
|
||||
return []
|
||||
|
||||
content = path.read_text(encoding="utf-8")
|
||||
lines = content.splitlines()
|
||||
issues: List[ValidationIssue] = []
|
||||
|
||||
try:
|
||||
front_matter, body_start = parse_front_matter(lines)
|
||||
except Exception as exc: # pragma: no cover - defensive guard
|
||||
return [ValidationIssue(path, 1, f"failed to parse front matter: {exc}")]
|
||||
|
||||
identity, identity_issues = derive_identity(path)
|
||||
issues.extend(identity_issues)
|
||||
|
||||
expected_base = None
|
||||
if identity:
|
||||
issues.extend(
|
||||
validate_identity(path, front_matter, lines, body_start, identity)
|
||||
)
|
||||
expected_base = identity.expected_base
|
||||
|
||||
template_validator = TemplateValidator(path=path, lines=lines, body_start=body_start, front_matter=front_matter)
|
||||
template_issues = template_validator.run()
|
||||
issues.extend(template_issues)
|
||||
|
||||
if template_validator.task_section is None:
|
||||
issues.append(ValidationIssue(path, None, "missing `## Task List` section"))
|
||||
return issues
|
||||
|
||||
start, end = template_validator.task_section
|
||||
tasks: List[TaskReport] = parse_tasks(lines, start, end, expected_base)
|
||||
if not tasks:
|
||||
issues.append(ValidationIssue(path, None, "no tasks found under `## Task List`"))
|
||||
return issues
|
||||
|
||||
for task in tasks:
|
||||
for task_issue in task.issues:
|
||||
issues.append(
|
||||
ValidationIssue(
|
||||
path=path,
|
||||
line=task_issue.line,
|
||||
message=f"Task `{task.name}` {task_issue.message}",
|
||||
)
|
||||
)
|
||||
return issues
|
||||
Reference in New Issue
Block a user