Development (#172)

* docs: Add CLAUDE_RULES.md with strict rebrand protection rules

- Define immutable rebrand rules that cannot be violated
- Prohibit reverting rebrand for cargo check convenience
- Establish checkpoint and audit trail requirements
- Document correct error handling approach

* refactor: Complete kurdistan-sdk to pezkuwi-sdk rebrand

- Update README.md with pezkuwi-sdk branding
- Replace all kurdistan-sdk URL references with pezkuwi-sdk
- Replace kurdistan-tech with pezkuwichain in workflows
- Update email domains from @kurdistan-tech.io to @pezkuwichain.io
- Rename tool references: kurdistan-tech-publish → pezkuwi-publish
- Update runner names: kurdistan-tech-* → pezkuwichain-*
- Update analytics/forum/matrix domains to pezkuwichain.io
- Keep 'Kurdistan Tech Institute' as organization name
- Keep tech@kurdistan.gov as official government contact
This commit is contained in:
2025-12-19 23:30:43 +03:00
committed by GitHub
parent 2093647fea
commit 3680848df2
209 changed files with 496 additions and 454 deletions
@@ -471,7 +471,7 @@ pub(crate) async fn handle_new_head<
let validator_group_lens: Vec<usize> =
session_info.validator_groups.iter().map(|v| v.len()).collect();
// insta-approve candidates on low-node testnets:
// cf. https://github.com/pezkuwichain/kurdistan-sdk/issues/134
// cf. https://github.com/pezkuwichain/pezkuwi-sdk/issues/134
let num_candidates = included_candidates.len();
let approved_bitfield = {
if needed_approvals == 0 {
+1 -1
View File
@@ -1552,7 +1552,7 @@ pub async fn start_approval_worker<
// of actions are generated by handling a single action.
//
// This particular problem statement is specified in issue 3311:
// https://github.com/pezkuwichain/kurdistan-sdk/issues/142
// https://github.com/pezkuwichain/pezkuwi-sdk/issues/142
//
// returns `true` if any of the actions was a `Conclude` command.
#[overseer::contextbounds(ApprovalVoting, prefix = self::overseer)]
+1 -1
View File
@@ -175,7 +175,7 @@ pub fn canonicalize(
// due to the fork pruning, this range actually might go too far above where our actual highest
// block is, if a relatively short fork is canonicalized.
// TODO https://github.com/pezkuwichain/kurdistan-sdk/issues/143
// TODO https://github.com/pezkuwichain/pezkuwi-sdk/issues/143
let new_range = StoredBlockRange(canon_number + 1, std::cmp::max(range.1, canon_number + 2));
overlay_db.write_stored_block_range(new_range);
+1 -1
View File
@@ -647,7 +647,7 @@ async fn run_iteration<Context>(
// Start prune-all on a separate thread, so that in the case when the operation takes
// longer than expected we don't keep the whole subsystem blocked.
// See: https://github.com/pezkuwichain/kurdistan-sdk/issues/170 for more details.
// See: https://github.com/pezkuwichain/pezkuwi-sdk/issues/170 for more details.
#[overseer::contextbounds(AvailabilityStore, prefix = self::overseer)]
async fn start_prune_all<Context>(
ctx: &mut Context,
@@ -49,7 +49,7 @@ mod tests;
const SPAWNED_TASK_DELAY: Duration = Duration::from_millis(1500);
const LOG_TARGET: &str = "teyrchain::bitfield-signing";
// TODO: use `fatality` (https://github.com/pezkuwichain/kurdistan-sdk/issues/158).
// TODO: use `fatality` (https://github.com/pezkuwichain/pezkuwi-sdk/issues/158).
/// Errors we may encounter in the course of executing the `BitfieldSigningSubsystem`.
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
@@ -114,7 +114,7 @@ pub(crate) struct Initialized {
/// blocks) we will be too slow importing all votes from unfinalized chains on startup
/// (dispute-coordinator gets killed because of unresponsiveness).
///
/// https://github.com/pezkuwichain/kurdistan-sdk/issues/168
/// https://github.com/pezkuwichain/pezkuwi-sdk/issues/168
///
/// To resolve this, we limit the amount of votes imported at once to
/// `CHAIN_IMPORT_MAX_BATCH_SIZE` and put the rest here for later processing.
@@ -771,7 +771,7 @@ impl Initialized {
.handle_import_statements(
ctx,
overlay_db,
// TODO <https://github.com/pezkuwichain/kurdistan-sdk/issues/147>
// TODO <https://github.com/pezkuwichain/pezkuwi-sdk/issues/147>
MaybeCandidateReceipt::AssumeBackingVotePresent(candidate_hash),
session,
statements,
@@ -221,7 +221,7 @@ fn partitioning_happy_case() {
// achieved with or without the 'help' of a double vote (a validator voting for and against at the
// same time). This makes the test a bit pointless but anyway I'm leaving it here to make this
// decision explicit and have the test code ready in case this behavior needs to be further tested
// in the future. Link to the PR with the discussions: https://github.com/pezkuwichain/kurdistan-sdk/issues/177
// in the future. Link to the PR with the discussions: https://github.com/pezkuwichain/pezkuwi-sdk/issues/177
#[test]
fn partitioning_doubled_onchain_vote() {
let mut input = BTreeMap::<(SessionIndex, CandidateHash), DisputeStatus>::new();
+1 -1
View File
@@ -416,7 +416,7 @@ fn note_provisionable_data(
// parablocks once they are included. But we can do slightly better by
// allowing disagreeing backers to record their disagreement and initiate a
// dispute once the parablock in question has been included. This potential
// change is tracked by: https://github.com/pezkuwichain/kurdistan-sdk/issues/140
// change is tracked by: https://github.com/pezkuwichain/pezkuwi-sdk/issues/140
ProvisionableData::Dispute(_, _) => {},
}
}
+1 -1
View File
@@ -43,5 +43,5 @@ another popular persistent shell, mosh, it allows scrollback.
[impl-guide]: https://docs.pezkuwichain.io/sdk/book/pvf-prechecking.html#summary
[glossary]: https://docs.pezkuwichain.io/sdk/book/glossary.html
[testing]: https://github.com/pezkuwichain/kurdistan-sdk/blob/main/pezkuwi/doc/testing.md
[testing]: https://github.com/pezkuwichain/pezkuwi-sdk/blob/main/pezkuwi/doc/testing.md
[et]: https://github.com/MisterTea/EternalTerminal
@@ -34,7 +34,7 @@
//! reasons.
//!
//! Considering `io_uring`'s status discussed above, and that it very likely would get detected
//! either by our [static analysis](https://github.com/pezkuwichain/kurdistan-sdk/issues/106) or by
//! either by our [static analysis](https://github.com/pezkuwichain/pezkuwi-sdk/issues/106) or by
//! testing, we think it is safe to block it.
//!
//! ## Consensus analysis
@@ -24,7 +24,7 @@
//!
//! Currently we are only logging these for the purposes of gathering data. In the future, we may
//! use these stats to reject PVFs during pre-checking. See
//! <https://github.com/pezkuwichain/kurdistan-sdk/issues/166#issuecomment-1381941762> for more
//! <https://github.com/pezkuwichain/pezkuwi-sdk/issues/166#issuecomment-1381941762> for more
//! background.
/// Module for the memory tracker. The memory tracker runs in its own thread, where it polls memory
+1 -1
View File
@@ -394,7 +394,7 @@ where
let metrics = self.metrics.clone();
let (sender, receiver) = oneshot::channel();
// TODO: make the cache great again https://github.com/pezkuwichain/kurdistan-sdk/issues/159
// TODO: make the cache great again https://github.com/pezkuwichain/pezkuwi-sdk/issues/159
let request = match self.query_cache(relay_parent, request) {
Some(request) => request,
None => return,
+1 -1
View File
@@ -31,7 +31,7 @@ automatically do so.
Related issues:
* <https://github.com/pezkuwichain/kurdistan-sdk/issues/153>
* <https://github.com/pezkuwichain/pezkuwi-sdk/issues/153>
### Decision
@@ -678,7 +678,7 @@ fn delay_reputation_change() {
);
}
/// <https://github.com/pezkuwichain/kurdistan-sdk/issues/172#discussion_r547594835>
/// <https://github.com/pezkuwichain/pezkuwi-sdk/issues/172#discussion_r547594835>
///
/// 1. Send a view update that removes block B from their view.
/// 2. Send a message from B that they incur `COST_UNEXPECTED_MESSAGE` for, but then they receive
@@ -782,7 +782,7 @@ fn spam_attack_results_in_negative_reputation_change() {
/// Upon receiving them, they both will try to send the message each other.
/// This test makes sure they will not punish each other for such duplicate messages.
///
/// See <https://github.com/pezkuwichain/kurdistan-sdk/issues/135>.
/// See <https://github.com/pezkuwichain/pezkuwi-sdk/issues/135>.
#[test]
fn peer_sending_us_the_same_we_just_sent_them_is_ok() {
let parent_hash = Hash::repeat_byte(0xFF);
@@ -2361,7 +2361,7 @@ fn sends_assignments_even_when_state_is_approved_v2() {
);
}
/// <https://github.com/pezkuwichain/kurdistan-sdk/issues/176>
/// <https://github.com/pezkuwichain/pezkuwi-sdk/issues/176>
///
/// 1. Receive remote peer view update with an unknown head
/// 2. Receive assignments for that unknown head
@@ -4253,7 +4253,7 @@ fn subsystem_rejects_wrong_claimed_assignments() {
/// assignment and Delay tranche assignments land on the same candidate. The delay tranche0 can be
/// safely ignored and we don't need to gossip it however, the compact tranche0 assignment should be
/// gossiped, because other candidates are included in it, this test makes sure this invariant is
/// upheld, see https://github.com/pezkuwichain/kurdistan-sdk/issues/172#discussion_r557628699, for
/// upheld, see https://github.com/pezkuwichain/pezkuwi-sdk/issues/172#discussion_r557628699, for
/// this edge case.
#[test]
fn subsystem_accepts_tranche0_duplicate_assignments() {
@@ -85,7 +85,7 @@ const COST_APPARENT_FLOOD: Rep =
///
/// This is to protect from a single slow validator preventing collations from happening.
///
/// For considerations on this value, see: https://github.com/pezkuwichain/kurdistan-sdk/issues/148
/// For considerations on this value, see: https://github.com/pezkuwichain/pezkuwi-sdk/issues/148
const MAX_UNSHARED_UPLOAD_TIME: Duration = Duration::from_millis(150);
/// A timeout for resetting validators' interests in collations.
@@ -2366,7 +2366,7 @@ async fn handle_collation_fetch_response(
"Request timed out"
);
// For now we don't want to change reputation on timeout, to mitigate issues like
// this: https://github.com/pezkuwichain/kurdistan-sdk/issues/152
// this: https://github.com/pezkuwichain/pezkuwi-sdk/issues/152
Err(None)
},
Err(RequestError::NetworkError(err)) => {
@@ -86,7 +86,7 @@ const TRY_RERESOLVE_AUTHORITIES: Duration = Duration::from_secs(2);
/// populated). Authority discovery on Kusama takes around 8 minutes, so warning after 10 minutes
/// should be fine:
///
/// https://github.com/pezkuwichain/kurdistan-sdk/blob/main/bizinikiwi/client/authority-discovery/src/lib.rs#L88
/// https://github.com/pezkuwichain/pezkuwi-sdk/blob/main/bizinikiwi/client/authority-discovery/src/lib.rs#L88
const LOW_CONNECTIVITY_WARN_DELAY: Duration = Duration::from_secs(600);
/// If connectivity is lower than this in percent, issue warning in logs.
@@ -452,7 +452,7 @@ where
// First `maxValidators` entries are the teyrchain validators. We'll check
// if our index is in this set to avoid searching for the keys.
// https://github.com/pezkuwichain/kurdistan-sdk/blob/main/pezkuwi/runtime/teyrchains/src/configuration.rs#L148
// https://github.com/pezkuwichain/pezkuwi-sdk/blob/main/pezkuwi/runtime/teyrchains/src/configuration.rs#L148
if *index < teyrchain_validators_this_session {
gum::trace!(target: LOG_TARGET, "We are now a teyrchain validator",);
self.metrics.on_is_teyrchain_validator();
@@ -796,7 +796,7 @@ async fn update_gossip_topology(
let random_seed = {
let (tx, rx) = oneshot::channel();
// TODO https://github.com/pezkuwichain/kurdistan-sdk/issues/156:
// TODO https://github.com/pezkuwichain/pezkuwi-sdk/issues/156:
// get the random seed from the `SessionInfo` instead.
sender
.send_message(RuntimeApiMessage::Request(
@@ -137,7 +137,7 @@ const POV_REQUEST_TIMEOUT_CONNECTED: Duration = Duration::from_millis(2000);
/// We supply leniency because there are often large candidates and asynchronous
/// backing allows them to be included over a longer window of time. Exponential back-off
/// up to a maximum of 10 seconds would be ideal, but isn't supported by the
/// infrastructure here yet: see https://github.com/pezkuwichain/kurdistan-sdk/issues/164
/// infrastructure here yet: see https://github.com/pezkuwichain/pezkuwi-sdk/issues/164
const ATTESTED_CANDIDATE_TIMEOUT: Duration = Duration::from_millis(2500);
/// We don't want a slow peer to slow down all the others, at the same time we want to get out the
@@ -483,7 +483,7 @@ pub(crate) async fn handle_network_update<Context>(
state.unused_topologies.insert(*new_session_index, topology);
}
// TODO [https://github.com/pezkuwichain/kurdistan-sdk/issues/165]
// TODO [https://github.com/pezkuwichain/pezkuwi-sdk/issues/165]
// technically, we should account for the fact that the session topology might
// come late, and for all relay-parents with this session, send all grid peers
// any `BackedCandidateInv` messages they might need.
+1 -1
View File
@@ -624,7 +624,7 @@ pub struct Overseer<SupportsTeyrchains> {
approval_voting_parallel: ApprovalVotingParallel,
#[subsystem(GossipSupportMessage, sends: [
NetworkBridgeTxMessage,
NetworkBridgeRxMessage, // TODO <https://github.com/pezkuwichain/kurdistan-sdk/issues/160>
NetworkBridgeRxMessage, // TODO <https://github.com/pezkuwichain/pezkuwi-sdk/issues/160>
RuntimeApiMessage,
ChainSelectionMessage,
ChainApiMessage,
+1 -1
View File
@@ -794,7 +794,7 @@ where
let config = pezsc_consensus_grandpa::Config {
// FIXME bizinikiwi#1578 make this available through chainspec
// Grandpa performance can be improved a bit by tuning this parameter, see:
// https://github.com/pezkuwichain/kurdistan-sdk/issues/157
// https://github.com/pezkuwichain/pezkuwi-sdk/issues/157
gossip_duration: Duration::from_millis(1000),
justification_generation_period: GRANDPA_JUSTIFICATION_PERIOD,
name: Some(name),