Upcoming change: Stages overhaul

Hey everyone!

Just wanted to pre-announce a major change to the platform that’ll ship in the coming weeks.

Context

There are multiple cases where we’ve wanted to either (a) split up an existing stage into multiple stages, or (b) add new stages in the middle of existing ones. We’ve been unable to make these changes so far because the platform doesn’t support it.

One prime example is the last stage of Git (clone a repository) - it’s unnecessarily hard and we know how we want to split it down, but we haven’t been able to ship that change because of these limitations.

There were a bunch of questions to figure out here, such as:

  • What happens to code examples when a stage is split?
  • What happens to profile pages when a stage is split? Does a user lose progress?
  • What happens if a user’s code no longer passes stages after they’re split?

We’ve found reasonable answers to all of these questions, but they’ll require significant changes to the way stages work.

Changes

Roughly, the changes are:

  • We’ll replace numbered stages (replication-1, replication-2) etc. with stages that have random identifiers, like AX3, VC4 etc.
    • This change allows us to split stages & add new ones in the future without worrying about references going stale (especially here in the forum).
  • We’ll allow “skipping” stages
    • This change allows us to add stages which we think some people will want to do but others might not. You’re no longer “forced” to go through a strict linear order.
  • We’ll allow completing multiple stages at once
    • This allows us to make byte-sized stages without ruining the experience for users who prefer to implement multiple things at once and not follow strictly defined order.

The most disruptive of these changes is going to be the stage naming change, so we’ll get started with that first. Will post another update once we’re close to shipping the name changes!

4 Likes
HTTP Server #CR8: Gzip compression
HTTP Server (#DF4) JavaScript
Replication Stage #YD3 Missing GEKACK
Stuck on Redis Replication #ZN8
HELP (Rust) DNS #GT1: Forwarding Server
Import flate2 in Rust #CR8: Gzip compression
Stuck in replication #NA2
Replication Stage #ZN8: Replica Connection Array Empties Unexpectedly in Redis
Redis Persistence #JU6
Stuck on command replication #ZN8 tests
Rust - Redis #ZN8: Single-replica propagation
Replication stage (#NA2) No ACKs received from replicas?
Replication Stage (#XV6) Slave receive nothing on occasion
I want to implement event loop using asyncio and socket to handle multiple requests (#ZU2)
Incorrect test for Replication #TU8
Git with Go stage #MG6: ERR upload-pack: not our ref
Redis Streams Stage #ZN8: Blocking reads
Redis stage (#JU6) expected null bulk string got bulk string
Ping Requests getting dropped for #ZU2: Concurrent clients
Ruby: Redis Replication Stage #NA2: Error reading replica acknowledgement
Java Replication #NA2 - #TU8
DNS query failed: dns: overflowing header size (#YC9)
Redis Replication #CF8: Test Reads the RDB file before the recieving the next response
HTTP Compression stage #DF4
Redis Challenge Stage #YG4: only some set commands reach replica (Go)
Stuck on Redis Clojure Replication #BW1
Bittorrent stage (#AH1) portability issue?
Stage #IF6 case sensitive stdout test
Redis Replication #NA2: Timeout Issue
Stuck on Replication (#YD3) but it fails when testing Replication (#XC1) connection refused error
Constant timeout from client in stage #QV8 [http-server] [Java]
Redis Replication #NA2: timeout before receiving expected number of responses
Stuck on replication #ZN8
Commands propagated but not executed in replica (#YG4)
Clarity on redis: replication #NA2
Expected null bulk string (“$-1\r\n”), got BULK_STRING (#YZ1)
Stuck on Redis Stage #LA7 in Rust
Go Redis Replication #NA2
Replication Stage #ZN8 Help
Last stage (#MG6) of git
Stage #YC9 of “Build your own DNS”
Last stage (#MG6) of Git in Java (Issue with deltified content)
SOLVED: issue with Single-replica propagation stage #ZN8
Redis Stage #ZN8 Blocking reads
Rust Reids Replication (#NA2) Connection reset by peer (os error 104)
Help! Stuck on Stage #RG2
DNS Stage (#XM2) Write answer section Help
Replication Stage(#HD5) Same listening ports used by 3 replicas?
Replication (#YG4) connection refused sometimes
Command processing (#YG4) write to broken pipe
Replication (#YD3) ACKs with commands
Rust - Redis Replicas Stage (#NA2) I am not getting any response from client for GETACK
Replication (#ZN8) Os Network Error?
Replication (#YG4) GET commands received before SET?
Stage #QQ0 Stuck with sending bytes to TcpStream
Redis: errors.Join is undefined (#YG4)
Stage #AP6 file not found context deadline exceeded
I keep getting timeout on the last test for stage (#CN2) for the HTTP challenge
#EH4 Test Error “Found extra data:”
Rust - Redis stage (#NA2) replication - Connection reset by peer (os error 104)
Replication (#XV6) REDIS0011 command?
Replication Stage (#BW1) address already in use error
Replication #CF8 And Replication #XV6
I’m stuck on stage (#EJ5) of build your own HTTP server; help needed! (C#)
Replication #NA2: Discrepancy between master_repl_offset and “REPLCONF ACK”
Replication #ZN8: Received bytes and received data logs mismatch
Redis Challenge Stage #HD5
Replication (#YG4) Unclear that multiple commands can be received at once
Replication #ZN8: Feedback with more detail on problem?
Redis Expiry (#YZ1) Challenge (New testcase suggestion)
Error in #ZX1: instructions for “Query entries from stream”
Not receiving 2nd REPLCONF command before PSYNC? (#TU8)
“Replica sent bytes” log is confusing (#YG4)
RDB persistence first stage (#ZG5) returns confusing EOF error
Stream #ZX1/#YP1/#FS1 output is wacky compared to stream #UM0
Stages overhaul: Part 1 (Stage renames) complete
(#RB2) lcrypto and OpenSSL library problem (BitTorrent-Client in C)
Upcoming change: Build system overhaul
Replication extension #XC1
Last Stage #MG6: Clone Implementation in Javascript