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:
fbarbu15
2025-10-28 15:41:11 +02:00
committed by GitHub
parent 60f436ef30
commit 845d6b8dcd
68 changed files with 2432 additions and 808 deletions

66
.github/workflows/roadmap-validator.yml vendored Normal file
View 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
View File

@@ -8,4 +8,6 @@ private/
.replit
replit.nix
node_modules
.ipynb_checkpoints/
.ipynb_checkpoints/
.cache
__pycache__

View File

@@ -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)

View File

@@ -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-DHTbased, disc-NGlike Logos discovery capability
and releasing a document that collects the requirements of discovery
## Description
This commitment entails specifying a KAD-DHTbased, disc-NGlike 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-DHTbased 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-DHTbased 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-DHTbased, disc-NGlike Logos discovery capability
and releasing a document that collects the requirements of discovery
## Description
This commitment entails specifying a KAD-DHTbased, disc-NGlike 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-DHTbased 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-DHTbased 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.

View File

@@ -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 Zerokits 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 Zerokits 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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -45,29 +45,43 @@ by making sure were 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

View File

@@ -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:

View File

@@ -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

View File

@@ -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:

View File

@@ -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)

View File

@@ -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 ?

View File

@@ -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:

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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 Kademlias 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 Kademlias 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

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:`

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 PSFs 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

View File

@@ -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

View File

@@ -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]]

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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.

View File

View 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

View 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"}

View 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

View 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

View 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

View 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

View 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

View 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())

View 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